假设我有一个特殊分辨率的视频,例如 1280x718,我想将其更改为 1280x720。
但是我不想将 718 像素垂直插值到 720,我宁愿只在顶部和底部添加一行。
所以基本上,我正在寻找一种方法来告诉 ffmpeg 创建 1280x720 的输出视频,其中 1280x718 的输入视频覆盖中心,所有未覆盖的区域都是黑色或其他。
我想我们可以称之为裁剪的相反。我知道如何 resize 视频(带插值)但在这种情况下我不想重新缩放或弄乱原始内容,只需添加一个小边框。
找到答案,张贴在这里供参考:
ffmpeg -i input.mp4 -vcodec libx264 \
-vf "pad=width=1280:height=720:x=0:y=1:color=black" -acodec copy result.mkv
width
和 height
是预期的输出分辨率,x
和 y
是放置输入的左上角坐标(在新输出中)。 color
(可选)是边框颜色,也可以使用color=0xff00ff
表示法。
虽然接受的答案可以添加填充,但它不会使图像在该填充中居中。要填充视频和居中,请添加
:x=-1:y=-1
:
ffmpeg -i "input.mp4" -c:a copy -c:v libx264 \
-vf "pad=width=1280:height=720:x=-1:y=-1:color=black" output.mp4
之所以有效,是因为
pad
过滤器的文档指出:
x, y
指定偏移量以将输入图像放置在填充的 区域,相对于输出图像的上/左边界。
x表达式可以引用y表达式设置的值,反之亦然
x和y的默认值为0。
如果 x 或 y 评估为负数,它们将被更改,因此输入图像以填充区域为中心。