使用 ffmpeg 将不同宽度的视频调整为固定高度并保持宽高比

使用 ffmpeg 将不同宽度的视频调整为固定高度并保持宽高比

我想将大量视频文件转换为 Flash 视频,用于我们公司的网站。我要求所有视频都必须是 360p 格式,因此它们的大小为 Nx360。

FFMpeg 用途-s指定目标分辨率的参数为西XH。 我不知道西idth,因为它取决于源文件的宽高比。如果源是 640x480,则目标将是 480x360。如果源是 848x480,则目标将是 636x360。

有没有办法通过 ffmpeg 的一些开关来实现这一点?它会保留纵横比并且我只需指定目标视频的高度吗?

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

答案1

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

-vf "scale=-1:360" 

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

对我来说,这实现了您所寻求的相同结果。

答案2

目前还没有足够的积分来评论现有的答案,但这是在用户 65600 的答案之后进行的,并且在特定编解码器需要可被 2 整除的宽度/高度时更进一步(例如 libx264)

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

-vf "scale=trunc(ow/a/2)*2:360"

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

答案3

-vf "scale=trunc(ow/a/2)*2:360"由于“自引用”错误而无法工作。

相反,下面的方法有效:

-vf“比例=-1:360,比例=trunc(iw/2)*2:360”

这样,通过两次连续缩放就避免了自引用,并在第二步中完成舍入。很可爱,不是吗?:)

相关内容