如何使用 FFmpeg 调整视频大小以使其更小

Ala*_*lan 200 ffmpeg

是否可以使用 FFmpeg 调整我的视频大小以使其更小?

我的原始视频尺寸为 1024x576,现在我想将视频大小调整为 720x480 以满足要求。

我怎样才能做到这一点?

jim*_*ark 324

最基本的例子是这样的:

ffmpeg -i input.avi -s 720x480 -c:a copy output.mkv
Run Code Online (Sandbox Code Playgroud)

使用scale过滤器将提供更多的灵活性:

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.mkv
Run Code Online (Sandbox Code Playgroud)

-1会告诉ffmpeg的自动选择相对于正确的高度与宽度设置以保持高宽比。-1如果您提供给定的高度,也可以用于宽度。


使用时标度的一个缺点libx264是该编码器需要偶数值,标度可能会自动选择奇数,从而导致错误:width or height not divisible by 2。您可以告诉 scale 为给定的高度选择一个偶数值(在本例中为 720):

scale="trunc(oh*a/2)*2:720"
Run Code Online (Sandbox Code Playgroud)

...或给定的宽度(在本例中为 1280):

scale="1280:trunc(ow/a/2)*2"
Run Code Online (Sandbox Code Playgroud)

请注意,您的 ffmpeg 构建可能会抱怨无法识别-c-filter选项。它也可能不支持scale. 在这种情况下,您应该使用较新的 ffmpeg,您可以将下载为静态构建,或者自己编译

  • 在多次翻阅 ffmpeg 的手册页后,我发现该选项似乎已更改为“-vf”,而不是“-filter:v”。 (10认同)
  • 您可以使用 `scale=720:-2` 告诉 scale 提供偶数值 (9认同)
  • @doug65536 `-filter:v` 和 `-vf` 都很好。您使用的 Ubuntu 版本已损坏且已过时——它实际上并不是 FFmpeg 的 `ffmpeg`,而是由 Libav(FFmpeg fork)提供的同名二进制文件。 (5认同)
  • '-c' 是 -codec 的缩写,':a' 指定音频流,'copy' 指定复制编解码器,它复制流(在这种情况下为音频)而不重新编码。基本上音频流将通过。这在您仅操作视频流时很常见。 (5认同)
  • 具有负大小的“scale”语法(要求整除性并近似保持比率)似乎很实用,但我更喜欢缩放选项“force_original_aspect_ratio=decrease”和“force_divisible_by=2”以及一维或二维,因为它比依赖消极的任意约定要明显得多。我不知道哪个选项属于哪个 ffmpeg 版本,所以我不知道它有多相关。 (2认同)

小智 53

我使用以下命令对视频和图像进行重新缩放。对于固定宽度和高度 -

ffmpeg -i input.avi -vf scale="720:480" output.avi
Run Code Online (Sandbox Code Playgroud)

如果您想保留纵横比,只需将高度设为 -1,它就会根据宽度自动调整大小 -

ffmpeg -i input.avi -vf scale="720:-1" output.avi
Run Code Online (Sandbox Code Playgroud)

如果您想根据输入大小进行缩放,例如可以说将宽度/高度减少到一半,您可以这样做 -

ffmpeg -i input.avi -vf scale="iw/2:ih/2" output.avi
Run Code Online (Sandbox Code Playgroud)

笔记 :

iw : input width
ih : input height
Run Code Online (Sandbox Code Playgroud)

静态构建可以从 - https://johnvansickle.com/ffmpeg/下载

文档:https : //ffmpeg.org/ffmpeg.html#filter_005foption