通过裁剪和调整大小将视频转换为固定屏幕尺寸

通过裁剪和调整大小将视频转换为固定屏幕尺寸

我曾尝试自己弄清楚这一点,但是无数的选择让我感到困惑。

我希望理想情况下使用或ffmpegmencoder或其他东西,但我知道这两个我已经工作了)将任何传入视频转换为固定的屏幕尺寸。

如果视频太宽或太短,则对视频进行中心裁剪。如果尺寸不合适,则向上或向下调整尺寸,使其完全符合固定屏幕尺寸。

我最终需要的是带有 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是输出矩形的高度
  • xy指定输出矩形的左上角

原始图像

原始图像
原始 320x240 图像

示例 1

80x60

要裁剪 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_wout_h

示例 3

距顶部 20 像素,距底部 20 像素

从顶部裁剪 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"

这样,您可以尝试并调整裁剪,而无需编码、查看、重复。

笔记

  • crop过滤文档

  • MP4 的默认编码器是libx264(H.264 视频)或mpeg4(MPEG-4 Part 2 视频),具体取决于您的ffmpeg构建。请参阅FFmpeg Wiki:H.264 视频编码指南了解更多信息。

  • 不要裁剪并重新编码,而要考虑在播放时裁剪。任何值得使用的播放器都可以做到这一点。

  • 古代ffmpeg版本使用-croptop-cropbottom-cropleft-cropright选项代替crop过滤器。如果你的情况如此,那么获得现代ffmpeg。开发非常活跃,没有理由使用古董。

相关内容