ffmpeg 使用两个图像和两个音频文件制作视频

ffmpeg 使用两个图像和两个音频文件制作视频

我正在尝试从两幅图像和两个 mp3 音频文件创建一个 MP4 视频,这是我的命令:

ffmpeg -hide_banner -loop 1 -i coming/img0.jpeg -loop 1 -i coming/img1.jpeg -i coming/aud0.mp3 -i coming/aud1.mp3 -i coming/watermark.png -filter_complex “[0:v]scale=960:540[v0];[1:v]scale=960:540[v1];[v0]pad=1920:540:(ow-iw)/2:0:0x1E1622[hstack0];[v1]pad=1920:540:(ow-iw)/2:0:0x1E1622[hstack1];[hstack0][hstack1]vstack=inp uts=2[out];[out]pad=1920:1080:(ow-iw)/2:(oh-ih)/2:0x1E1622[outw];[outw][4:v]overlay=Ww-32:Hh-32[outv];[2:a]volume=0.5[a0];[3:a]volume=0.8[a1];[a0][a1]amix=inputs=2[outa]" -map "[outv]" -map "[outa]" -shortest -ac 2 -vsync 0 -y outgoing/output.mp4

它只需拍摄两幅图像,更改分辨率,将它们堆叠在一起,并将音频文件混合在一起,生成一个名为 output.mp4 的输出

我有两个问题:

  1. 这个过程永远不会结束,即使两个音频文件播放完毕,它仍会继续,即使我使用-shortest标志

  2. 在我的情况下,我可以有两个长度不同的音频文件,并且我希望输出是最长音频文件的长度,而不是最短的音频文件的长度

答案1

我最终所做的是遍历我的所有音频文件,并使用 ffprobe 检查我拥有的最长的音频文件是什么,并使用它来确定我的输出视频的持续时间。

这是用于检查给定文件持续时间的 ffprobe 命令:

ffprobe -i <YOUR_FILE_NAME> -show_entries format=duration -v quiet -of csv="p=0"

要为输出文件设置特定的持续时间,ffmpeg您可以使用-t如下标志:

ffmpeg -i <INPUT_FILE> -t <DURATION_IN_SECONDS> <OUTPUT_FILE_NAME>

相关内容