FFmpeg 复杂过滤器和 -vf 将图像填充和缩放到视频
FFmpeg complex filter and -vf to pad and scale images to video
我正在尝试用不同时间点的多个图像叠加视频。这里的问题是图像可能比视频大,但它们应该按比例缩小(保持纵横比)并且缺失的空间应该用黑色填充。
这是我目前的情况:
-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'
scale 和 pad 中的值是动态导出的,对应于视频高度和视频宽度。
然而,对于这个突击队,FFmpeg 抱怨说 -filter_complex
和 -vf
不能在同一个突击队中使用。我不想先缩小图像或从中创建视频文件,然后叠加这些视频。
不胜感激。
使用
-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'
我正在尝试用不同时间点的多个图像叠加视频。这里的问题是图像可能比视频大,但它们应该按比例缩小(保持纵横比)并且缺失的空间应该用黑色填充。
这是我目前的情况:
-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'
scale 和 pad 中的值是动态导出的,对应于视频高度和视频宽度。
然而,对于这个突击队,FFmpeg 抱怨说 -filter_complex
和 -vf
不能在同一个突击队中使用。我不想先缩小图像或从中创建视频文件,然后叠加这些视频。
不胜感激。
使用
-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'