如何在 ffmpeg 中将图像转换为具有特定纵横比的短视频并用某种颜色(黑色)填充空白区域?

如何在 ffmpeg 中将图像转换为具有特定纵横比的短视频并用某种颜色(黑色)填充空白区域?

我正在尝试将图像转换成短视频。

ffmpeg  -r 1/30 -i image.jpg video.mp4

此代码可以完成工作,但输出视频的宽高比与原始图片相同。我需要另一个 - 16x10。我需要图像适合框架而不缩放/扭曲,并用某种颜色(例如黑色)填充空白区域。就像下图中描述的那样。有什么办法吗?

期望结果

更新:

我尝试使用具有正值的裁剪滤镜来增加框架的大小:

ffmpeg -r 1/30 -i image.jpg -vf crop=in_w+200:in_h+200:0:0 -y video.mp4

不幸的是,它失败了。我收到以下错误:

[Parsed_crop_0 @ 0x7fd8db204180] Invalid too big or non positive size for width '1280' or height '874'
[Parsed_crop_0 @ 0x7fd8db204180] Failed to configure input pad on Parsed_crop_0
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0

答案1

裁剪滤镜可以仅有的删除图像的某些部分,但绝不会增加其尺寸。

你只需要垫式过滤器为此。我假设您的图像具有均匀的尺寸。

ffmpeg -framerate 1/30 -i image.jpg \
  -vf "pad='if(gt(dar,16/10)\,iw\,2*trunc(ih*16/10/2))':'if(gt(dar,16/10)\,2*trunc(iw*10/16/2)\,ih)':-1:-1:color=black" \
-y video.mp4

相关内容