编程小短文:FFmpeg视频画面尺寸调整,必知必会

引言

FFmpeg是音视频处理领域,应用范围最广的一个项目。

我们日常使用的大小桌面版视频播放器,或者命令行使用的播放器,大多数是基于 ffmpeg 开发的。

如果说它是音视频编解码处理中的老大哥,这一点都不为过。

本文主要从一个小知识点作为切入面,深入介绍一下,如何有效地压缩和降低视频文件的体积。

问题的提出

有一位题主遇到下面的情况,他有一个视频文件,宽高比是 1024x576,现在想要将尺寸调整为 720x480,应该怎么办?

当然了,这对于 ffmpeg 应用程序来说是小菜一碟。只用执行下面一行指令。

ffmpeg -i input.avi -s 720x480 -c:a copy output.mkv

其中:

-s:是 --scale 的短选项,用于指定输出文件的画面宽高比;

-c:a:是输出音视频的盒子,copy 说明了是不做任何处理,原样输出。

如果想要限制画面宽度,而对于画面高度想要自动的进行裁切,那么就要用到过滤器。执行下面一行指令。

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.mkv

-1将告诉ffmpeg自动选择与提供的宽度相关的正确高度,以保持宽高比。如果用户给定了高度,那么-1则可以用于指定保持宽高比中的宽度。

使用libx264时,Scale的一个缺点是此编码器需要偶数值,Scale可能会自动选择奇数值,从而导致错误:宽度或高度不能被2整除。

你可以告诉Scale为给定高度选择偶数值(在本例中为720):

scale="trunc(oh*a/2)*2:720"

或者指定高度,

scale="1280:trunc(ow/a/2)*2"

引申讨论

一般情况下我们会把固定格式宽高比的视频文件转换为统一格式,用于适配不同型号的手机。那么有没有办法,在不知道目标型号手机的宽高比的时候,按照百分比为视频画面进行调整呢?答案是肯定有的。

比如下面这样对画面进行宽高50%的收缩。

ffmpeg -i input.avi -vf scale="iw/1:ih/2" output.avi

你应该会注意到我们使用了两个变量。

iw:输入文件的画面宽度

ih:输入文件的画面高度

这两个是系统的常量,可以拿来直接使用。

写在最后

其实 ffmpeg 所提供的过滤器功能十分复杂,而且功能十分强大。可应用于众多领域的音视频转换,只要是输入的视频流,均可进行深度的处理。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200523A0NH9G00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券