使用 ffmpeg 将具有不同宽度的视频调整为固定高度保留纵横比

Axa*_*dax 18 video ffmpeg

我想将很多视频文件转换为我们公司网站的 Flash 视频。我有一个要求,所有的视频都必须是 360p 格式,所以它们的大小应该是 Nx360。

FFMpeg 使用-s参数将目标分辨率指定为W x H。我不知道W¯¯ IDþ,因为它依赖于源文件的宽高比。如果源为 640x480,目标将为 480x360。如果源为 848x480,目标将为 636x360。

有没有办法用ffmpeg的一些开关来做到这一点?它将保留纵横比,我只会指定目标视频的高度?

我可以通过制作一个程序来轻松解决它,该程序将启动 ffprobe 以获取源视频大小,计算纵横比,然后计算新的宽度。

小智 15

您可以尝试添加此视频过滤器:

-vf "scale=-1:360" 
Run Code Online (Sandbox Code Playgroud)

-1 在这种情况下意味着可变/未知,因此此过滤器调整视频大小以保留输入的纵横比,保持 360 作为高度。

对我来说,这达到了您正在寻找的相同结果。


Tol*_*d H 6

还没有足够的点数来评论现有答案,但这是遵循 user65600 的答案,并在特定编解码器需要可被 2 整除的宽度/高度时更进一步(例如 libx264)

当您使用 -1(变量/未知)时,它可以返回一个奇数 #。为了保证偶数#,你必须使用类似的东西trunc(ow/a/2)*2,它会自动计算最接近的偶数#,同时保持纵横比。

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

来源:https : //ffmpeg.org/trac/ffmpeg/ticket/309

  • 这个答案在 2013 年是正确的,现在仍然有效。但是多年来,您可以通过使用 `-2` 而不是 `-1` 来强制一个值可以被 2 整除。(任何 `-n` 值强制被 `n` 整除) (2认同)