FFmpeg复合滤镜和-vf填充和缩放图像到视频

时间:2017-11-21 17:28:59

标签: video ffmpeg scale video-processing

我正在尝试在不同时间点叠加包含多个图像的视频。这里的问题是图像可能比视频大,但它们应缩小(保持纵横比),缺少的空格应填充黑色。

这是我到目前为止所拥有的:

-i 'input_video.mp4' 
-i 'input_image_1.jpg' 
-i 'input_image_2.jpg' 
-i 'input_image3.jpg' 
-i 'input_image4.jpg' 
-filter_complex "[0][1] overlay=0:0:enable='between(t,0.0,2.0)'[s1];
[s1][2] overlay=0:0:enable='between(t,7.0,9.0)'[s2];
[s2][3] overlay=0:0:enable='between(t,18.0,20.0)'[s3];
[s3][4] overlay=0:0:enable='between(t,20.0,22.0)'[s4];" 
-vf 'scale=min(iw*540/ih,960):min(540,ih*960/iw), 
     pad=960:540:(960-iw)/2:(540-ih)/2' 
-pix_fmt yuv420p -c:a copy
'output_image.mp4'

刻度和打击垫中的值是动态导出的,与视频高度和视频宽度相对应。

然而,有了这个突击队,FFmpeg抱怨-filter_complex-vf不能在同一突击队中使用。我想避免首先缩小图像或从中创建视频文件,然后叠加这些视频。

任何指针都表示赞赏。

1 个答案:

答案 0 :(得分:2)

使用

-i 'input_video.mp4' 
-i 'input_image_1.jpg' 
-i 'input_image_2.jpg' 
-i 'input_image3.jpg' 
-i 'input_image4.jpg' 
-filter_complex
"[1]scale=min(iw*540/ih,960):min(540,ih*960/iw),
    pad=960:540:(960-iw)/2:(540-ih)/2[img1];
 [2]scale=min(iw*540/ih,960):min(540,ih*960/iw),
    pad=960:540:(960-iw)/2:(540-ih)/2[img2];
 [3]scale=min(iw*540/ih,960):min(540,ih*960/iw),
    pad=960:540:(960-iw)/2:(540-ih)/2[img3];
 [4]scale=min(iw*540/ih,960):min(540,ih*960/iw),
    pad=960:540:(960-iw)/2:(540-ih)/2[img4];
[0][img1] overlay=0:0:enable='between(t,0.0,2.0)'[s1];
[s1][img2] overlay=0:0:enable='between(t,7.0,9.0)'[s2];
[s2][img3] overlay=0:0:enable='between(t,18.0,20.0)'[s3];
[s3][img4] overlay=0:0:enable='between(t,20.0,22.0)'[s4];" 
-c:a copy   'output_image.mp4'