我正在尝试拍摄音频和静止图像,并根据该静止图像和 30 分钟的音频创建 30 分钟的视频片段。
这是我尝试使用的:
find audio/ -name '*.ogg' -execdir bash -c '\ ffmpeg -i ../white-144p.png -i {} \ -acodec libvorbis \ -af silenceremove=0:0:0:-1:0.7:-30dB \ -segment_time 1800 \ -f segment ../video/$(basename {} .ogg)_%03d.mp4' \;
ffmpeg 愉快地运行了 30 分钟,并输出了由静态图像和整个音频文件创建的视频。我做错了什么?
答案1
默认情况下,片段复用器在视频+音频输出上操作时,只有在经过了segment_time 后遇到视频关键帧时才会创建新片段。FFmpeg 主要是用于处理定时媒体(即视频和音频)的程序。单个图像被视为 1 帧的 25 fps 视频。对于您来说,您需要按如下方式进行更改:
find audio/ -name '*.ogg' -execdir bash -c '\
ffmpeg -loop 1 -framerate 8 -i ../white-144p.png -i {} \
-acodec libvorbis \
-force_key_frames "expr:gte(t,n_forced*1800)" \
-af silenceremove=0:0:0:-1:0.7:-30dB \
-segment_time 1800 -shortest \
-f segment ../video/$(basename {} .ogg)_%03d.mp4' \;
-loop 1 -framerate 8
从图像中生成无限的 8 fps 视频流。
-force_key_frames "expr:gte(t,n_forced*1800)"
强制 ffmpeg 每 1800 秒生成一个关键帧,以便可以按照精确的间隔剪切片段。
-shortest
添加后,命令将在音频结束时结束 - 视频流无限长。