我有一个 ffmpeg 命令,它需要 3 个音频文件和 3 个图像文件,并将 3 个音频文件连接成一个长度为 870.04 秒的视频,其中图像以幻灯片形式播放,每个图像显示 290.015 秒。
您可以将命令复制并粘贴到您的网络浏览器搜索栏中,将其变成一行,然后运行它(文件路径为 win10 命令提示符格式化)
ffmpeg
-r 2 -i "E:\myFolder\10. Deejay Punk-Roc - Knock 'em All The Way Out.aiff"
-r 2 -i "E:\myFolder\11. Deejay Punk-Roc - Spring Break.aiff"
-r 2 -i "E:\myFolder\12. Deejay Punk-Roc - Fat Gold Chain.aiff"
-r 2 -i "E:\myFolder\1_front.jpg"
-r 2 -i "E:\myFolder\2_back.jpg"
-r 2 -i "E:\myFolder\3_cd.jpg"
-filter_complex "[0:a][1:a][2:a]concat=n=3:v=0:a=1[a];[3:v]scale=w=600:h=593,setsar=1,loop=580.03:580.03[v3];[4:v]scale=w=600:h=593,setsar=1,loop=580.03:580.03[v4];[5:v]scale=w=600:h=593,setsar=1,loop=580.03:580.03[v5];[v3][v4][v5]concat=n=3:v=1:a=0,pad=ceil(iw/2)*2:ceil(ih/2)*2[v]"
-map "[v]" -map "[a]" -c:a pcm_s32le -c:v libx264 -bufsize 3M -crf 18 -pix_fmt yuv420p -tune stillimage -t 870.04
"E:\myFolder\newOutputVid.mkv"
这个命令最复杂的部分,也就是每张图片显示多长时间背后的逻辑,是 filter_complex 参数,我将在下面尝试解释:
-filter_complex "
//concat the three audio files. [0:a] is referring to the 0'th file input which is audio file 'Knock 'em All The Way Out'
[0:a][1:a][2:a]concat=n=3:v=0:a=1[a];
//file input 3, is the first image,
[3:v]scale=w=600:h=593,setsar=1,loop=580.03:580.03[v3];[4:v]scale=w=600:h=593,setsar=1,loop=580.03:580.03[v4];[5:v]scale=w=600:h=593,setsar=1,loop=580.03:580.03[v5];
//concat the three images in order
//set output resolution
[v3][v4][v5]concat=n=3:v=1:a=0,pad=ceil(iw/2)*2:ceil(ih/2)*2[v]"
对于渲染后的输出视频,第一张图片显示正确,因为视频分辨率 600w x 593h 与图片本身相同
我如何为
[4:v]
编辑我的filter_complex行,第四个输入文件是第二个图像2_back.jpg
,这样图像就不会被拉伸?也许喜欢添加黑色背景填充以使图像在框架中完全可见而不被裁剪/拉伸