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


14

我试图自己解决这个问题,但是无数的选择让我感到困惑。

我想理想地使用ffmpegmencoder(或其他,但我知道我正在使用的那两个)将任何传入的视频转换为固定的屏幕尺寸。

如果视频太宽或太短,请对视频进行中心裁剪。如果尺寸不合适,则将其放大或缩小以使其恰好是固定的屏幕尺寸。

我需要的确切最后内容是XVid AVI中的720x480,带有MP3音轨。

我找到了很多页面,这些页面显示了如何调整为最大分辨率,但是我需要视频精确地达到该分辨率(多余部分被裁剪掉,没有黑条)。

谁能告诉我要运行的命令行-或至少让我了解那里的大部分/大部分方式?如果需要多个命令行(运行X以获取分辨率,请执行此计算,然后使用该计算的输出运行Y),我可以编写脚本。

Answers:


22

对于每种情况,类似这样的东西都应该使用适当的参数:

注意:原始答案发布在此链接中:如何使用ffmpeg裁剪视频?最初由我发布,并进行了多次编辑,以便将其更新为ffmpeg最新版本中的最新选项。非常感谢slhck乔纳森。,Anton RudeshkoLordNeckbeard和未来的维护者。


在最新版本的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

要从位置(200,100)开始裁剪80×60的部分:

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像素

从顶部裁剪20个像素,从底部裁剪20个像素:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • 如果xy省略,过滤器将自动使作物居中,例如在本示例中。

预览版

您可以收割(呵呵)并通过以下方式实时预览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。开发非常活跃,没有理由使用古董。


加分预览ffplay,这使得使用ffmpeg裁剪实践中视频的屏幕尺寸是可行的。
SpeedCoder5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.