【问题标题】:Creating narrated slideshow from multiple images and sound files从多个图像和声音文件创建叙述幻灯片
【发布时间】:2020-07-17 20:09:22
【问题描述】:

我有一组 jpg 格式的幻灯片(s-00.jpg、s-01.jpg、...)和一组 mp3 格式的音频文件(a-00.mp3、a-01.mp3 , ...)。

我想创建一个带有旁白幻灯片的 mp4:

  • s-00.jpg 在播放 a-00.mp3 时显示
  • s-01.jpg 在播放 a-01.mp3 时显示
  • ...

我确信这对于 ffmpeg 来说是相对微不足道的,但我在语法上遇到了困难。到目前为止,我设法发现的是,我可以从图像中制作视频

ffmpeg -i s-%02d.jpg slideshow.mp4

我找到了很多如何将一个 mp3 文件添加到整个幻灯片放映的示例,但找不到任何可以为每张幻灯片添加不同 mp3 的示例。

【问题讨论】:

  • 欢迎来到 Stack Overflow。 SO 是面向专业和热情的程序员的问答页面。将您自己的代码添加到您的问题中。您应该至少展示自己为解决这个问题所做的研究。
  • 只是一个想法,但由于您的所有活动部件,您可以考虑 2 个步骤。对于所有幻灯片获取音频和 ffmpeg 合并那些 2,重复所有幻灯片.. 第 2 部分更难。它的 concat 过滤器迭代/连接所有谨慎的 vid 以构成最终输出
  • 谢谢,@RobertRowntree - 我想我会继续寻找几天而不是做那个简单的额外步骤......

标签: bash audio video ffmpeg


【解决方案1】:

感谢罗伯特在上面的评论中,我找到了答案。我编写了一个 bash 脚本来执行此操作,而不是试图提出一个过于复杂的 ffmpeg 解决方案:

# Create one video per slide
for file in *.mp3 
do
    number=$(echo $file | cut -f 1 -d '.')
    ffmpeg -y -loop 1 -i $number.jpg -i tmp-$file -c:v libx264 -c:a aac -b:a 192k -vf format=yuv420p -shortest $number.mp4


    echo "file '$number.mp4'" >> files.txt
done

# Merge videos
ffmpeg -y -f concat -safe 0 -i files.txt -movflags +faststart -c copy output.mp4


# Clean up
mv output.mp4 output.do_not_delete
rm *.mp4
mv output.do_not_delete output.mp4
rm files.txt

【讨论】:

  • 建议将-vf format=yuv420p 添加到第一个ffmpeg 命令,以便非基于FFmpeg 的播放器可以播放输出,如果要通过渐进式下载观看输出,则将-movflags +faststart 添加到第二个命令。此外,请引用您的变量,这样它就不会在带有空格的文件名上中断(请参阅 shellcheck.net)。如果你想优化出cut命令使用参数扩展来处理扩展。
  • 谢谢!已对此进行了修改 - 见上文
  • -movflags +faststart 是一个输出选项,所以它应该移动到输出文件之前,而不是输入之前。
  • 这解释了为什么它坏了......我永远不会理解 ffmpeg。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 2016-05-04
  • 1970-01-01
  • 2018-05-28
  • 2016-03-27
  • 2012-07-12
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多