将FFmpeg添加到视频后,它会弄乱图像叠加层的宽度

时间:2019-01-01 14:30:07

标签: ffmpeg

我正在使用以下命令将给定的图像叠加到视频上:

ffmpeg -y \
-i "Input.mp4" \
-loop 1 -t 17 -i "overlay.png" \
-filter_complex \
"[1:v]fade=in:st=3:d=1:alpha=1, \
fade=out:st=10:d=1:alpha=1 \
[ovr1]; \
[0][ovr1] overlay=(W-w)/2:H-h-10" \
-codec:a copy \
"Output.mp4"

该命令有效,但是它产生的宽度与输入overlay.png不同,但高度相同。

这里是overlay.png

overlay.png preview

这是FFmpeg叠加后在视频中的显示方式:

video screenshot

overlay.png的大小为274x79,但在视频中大约为324x79

我已经检查了建议使用scale的问题(ffmpeg overlay size),将命令更改为以下内容:

ffmpeg -y \
-i "Input.mp4" \
-loop 1 -t 17 -i "overlay.png" \
-filter_complex \
"[1:v]scale=274:79 \
fade=in:st=3:d=1:alpha=1, \
fade=out:st=10:d=1:alpha=1 \
[ovr1]; \
[0][ovr1] overlay=(W-w)/2:H-h-10" \
-codec:a copy \
"Output.mp4"

但是结果仍然相同(更大的宽度),我可以通过将scale编辑为scale=400:400来检查其效果来确认overlay.png确实有效。

是什么原因造成的?在将ffmpeg -i Input.mp4覆盖在视频上之后,如何保持其原始大小?


编辑:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Input.mp4': Metadata: major_brand : mp42 minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 2018-12-30T12:38:54.000000Z encoder : HandBrake 1.1.0 2018040700 Duration: 00:00:17.45, start: 0.000000, bitrate: 1179 kb/s Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 720x480 [SAR 32:27 DAR 16:9], 1174 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default) Metadata: creation_time : 2018-12-30T12:38:54.000000Z handler_name : VideoHandler 显示以下内容:

put

1 个答案:

答案 0 :(得分:1)

您的视频为720x480,但显示比例为16:9,基本上是宽屏SD NTSC视频。

您需要使用比例尺和setar滤波器将其制作成正方形像素的视频,然后再覆盖图像。

所以

ffmpeg -y \
-i "Input.mp4" \
-loop 1 -t 17 -i "overlay.png" \
-filter_complex \
"[0:v]scale=2*trunc(iw*sar/2):ih,setsar=1[0v]; \
[1:v]fade=in:st=3:d=1:alpha=1, \
fade=out:st=10:d=1:alpha=1[ovr1]; \
[0v][ovr1] overlay=(W-w)/2:H-h-10" \
-codec:a copy \
"Output.mp4"