我曾尝试自己弄清楚这一点,但是无数的选择让我感到困惑。
我希望理想情况下使用或ffmpeg
(mencoder
或其他东西,但我知道这两个我已经工作了)将任何传入视频转换为固定的屏幕尺寸。
如果视频太宽或太短,则对视频进行中心裁剪。如果尺寸不合适,则向上或向下调整尺寸,使其完全符合固定屏幕尺寸。
我最终需要的是带有 MP3 音轨的 720x480 XVid AVI。
我发现很多页面都显示了如何调整到最大分辨率,但我需要视频完全达到该分辨率(裁剪掉多余的部分,没有黑条)。
有人能告诉我要运行的命令行吗 - 或者至少告诉我部分/大部分方法吗?如果需要多个命令行(运行 X 以获取分辨率,执行此计算,然后使用该计算的输出运行 Y),我可以编写脚本。
答案1
类似这样的事情应该适用于每种情况的适当参数:
注:原始答案发布在此链接中:如何使用 ffmpeg 裁剪视频?最初由我发布,并经过多次编辑,以将其更新为最新版本的 ffmpeg 中的最新选项。非常感谢響克,乔纳森。,安东鲁杰什科,颈须领主以及未来的维护者。
在最新版本的 FFmpeg 中,使用crop
筛选:
ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
其中选项如下:
out_w
是输出矩形的宽度out_h
是输出矩形的高度x
并y
指定输出矩形的左上角
原始图像
原始 320x240 图像
示例 1
要裁剪 80×60 的部分,从位置 (200, 100) 开始:
ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
- 音频是流已复制在这个例子中,因此避免了重新编码。
示例 2
裁剪右下角的四分之一:
ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4
这与以下内容相同:
ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4
这与以下内容相同:
ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
in_w
您可以使用和来参考输入图像大小,in_h
如第一个示例所示。输出宽度和高度也可以使用out_w
和out_h
。
示例 3
从顶部裁剪 20 像素,从底部裁剪 20 像素:
ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
x
如果和y
被省略(如本例所示),则过滤器将自动将裁剪置于中心。
预览
您可以裁剪(呵呵)并实时预览ffplay
:
ffplay -i input -vf "crop=in_w:in_h-40"
这样,您可以尝试并调整裁剪,而无需编码、查看、重复。
笔记
MP4 的默认编码器是
libx264
(H.264 视频)或mpeg4
(MPEG-4 Part 2 视频),具体取决于您的ffmpeg
构建。请参阅FFmpeg Wiki:H.264 视频编码指南了解更多信息。不要裁剪并重新编码,而要考虑在播放时裁剪。任何值得使用的播放器都可以做到这一点。
古代
ffmpeg
版本使用-croptop
、-cropbottom
、-cropleft
、-cropright
选项代替crop
过滤器。如果你的情况如此,那么获得现代ffmpeg
。开发非常活跃,没有理由使用古董。