使用FFmpeg处理音视频

本文主要是介绍如何使用ffmpeg命令行工具进行各式各样的音视频处理操作——缩放、裁剪、剪辑、旋转、格式转换,etc。。。学了本文,基本可以把格式工厂之类的音视频处理软件删了。。

一. 安装ffmpeg命令行工具

本文只介绍mac系统下的安装方法,Linux的用户安装也很简单,Win的用户也可以上网找找教程。。。

1. 安装Homebrew

Homebrew号称是“OS X 不可或缺的包管理器”,通过homebrew,可以很方便地在mac上安装常用的命令行工具。给出官网:http://brew.sh/

安装和使用方法官网说得很详细,恩。。

2. 安装ffmpeg

上面我们已经安装了Homebrew,接下来我们很方便地就可以安装ffmpeg,只需要一行命令:

$ brew install ffmpeg  //使用brew安装ffmpeg

执行了上面的命令后,brew会开启疯狂下载模式。。如果网速快的话,一会儿就可以下载完毕。然后brew还会自动把ffmpeg的启动路径加到path环境变量中,这样你就可以在任何地方使用ffmpeg了,不需要先cd到ffmpeg安装目录再执行命令了。

brew自动把ffmpeg的启动路径加到path环境变量时,可能会提示“permission denied”,这是因为brew没有更改相关文件的权限,手动加上就好了,举个例子:

$ sudo chmod 777 /usr/share/  // 这个命令是给所有程序添加/usr/share/的读、写、执行权限,执行成功之后就brew就可以更改/usr/share/下的内容了

上面的命令会让你输入当前登录用户的密码,输入你电脑的密码就好啦。

二. 视频处理

1. 剪辑

有时候我们需要截取一个长视频的其中某一段内容,比如从一个视频的第10秒开始,截取6秒的内容,也就是10~16秒的内容,输入一个out.mp4文件

$ ffmpeg -i in.mp4 -ss 00:00:10 -t 00:00:06 -acodec aac -vcodec h264 -strict -2 out.mp4   //从00:00:10开始,截取的长度为00:00:06

参数解释:

-i 代表输入待处理的文件

-ss 代表开始的时间

-t 代表截取的长度。

-acodec 音频编解码器,这个不懂的话也没关系,直接照抄就行。。

-vcodec 音频编解码器,这个不懂的话也没关系,直接照抄就行。。

2. 缩放

很多时候我们需要把一个高分辨率的视频处理成一个低分辨率的视频,以达到减小视频体积的目的。举个例子:把一个10801920的视频缩小到360640

$ ffmpeg -i in.mp4 -vf scale=360:640 -acodec aac -vcodec h264 out.mp4  // 1080*1920-->360*640

参数解释:

-i 代表输入,

-vf 的全称是video filter,即:视频滤镜,缩放其实就是给视频添加一个滤镜。

scale=360:640 scale是一种滤镜,缩放滤镜,格式是:scale=width:height,其中,width和height分别是处理后的宽和高

3. 裁剪

有时候我们想截取一个大视频的中间一部分画面,比如一个10801920的视频,我们想截取中间的10801080的部分,这个也可以实现的:

$ ffmpeg -i in.mp4 -strict -2 -vf crop=1080:1080:0:420 out.mp4 

参数解释:

crop 和上面的scale一样,也是视频滤镜的一种,crop是裁剪滤镜。四个参数分别是 width:height:x:y,其中width和height指的是裁剪的宽和高,x和y代表裁剪的区域的左上角的坐标,坐标系原点为原视频的左上角。比如 0:0就代表原视频的左上角,50:50就代表以原视频的左上角为原点的坐标系的50:50位置

4. 旋转

使用ffmpeg可以轻松地旋转视频。举个例子:将一个视频顺时针旋转90度

$ ffmpeg -i in.mp4 -vf rotate=PI/2:ow=1080:oh=1920 out.mp4

参数解释:

视频旋转其实也是一直滤镜。

rotate=PI/2 rotate是旋转滤镜,后面的“PI/2”旋转角度(正数代表顺时针),这里是90度

rotate除了指定旋转角度的参数外,还有其他一些参数:

ow 全称是out width,输出视频的宽度,如果不指定,默认是输入视频的宽度

oh 全称是out height,输出视频的高度,如果不指定,默认是输入视频的高度

5. 调节帧率

帧率会很大程度上影响画面的流畅度和视频的体积,帧率越大,画面越流畅,同时视频体积越大。

我们有时候需要通过降低帧率来减小视频的体积。

举个例子:将一个视频的帧率降到15

$ ffmpeg -i in.mp4 -r 15 out.mp4

参数解释:

-r 帧率

6. 格式转换

ffmpeg具备强大的格式转换功能,这里举几个常用的例子。

$ ffmpeg -i in.mov -vcodec copy -acodec copy out.mp4  // mov --> mp4
$ ffmpeg -i in.flv -vcodec copy -acodec copy out.mp4  // flv --> mp4
$ ffmpeg -i in.gif -vf scale=420:-2,format=yuv420p out.mp4  // gif --> mp4

7. 查看视频的详细信息

有的时候我们需要在处理之前先了解一下视频的参数信息,比如分辨率、比特率等等。可以使用下面的命令:

$ ffmpeg -i in.mp4   // 不加任何参数,只指定输入的视频

来个截图:

三. 音频处理

稍后继续。。。

四. Reference

FFmpeg有着强大的音视频处理能力,其官网给出了众多音视频处理滤镜的使用介绍,文中只提到了一些常用的操作,如果没有你想要的,可以直接去看下官网的滤镜介绍。

音视频滤镜介绍:http://ffmpeg.org/ffmpeg-filters.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

Android 8.0 “奥利奥”正式发布

18940
来自专栏更流畅、简洁的软件开发方式

帮助文档的数据库结构

  自然框架一直没有完整的帮助文档,只是有几个简单的示例。这个就是差距呀,那么帮助文档要怎么写呢?有工具可以自动生成,但是总感觉自动生成的一点都不好用,自己都看...

22590
来自专栏Youngxj

自定义易玩稀的媒体范

19950
来自专栏ytkah

如何通过iframe调用其他页面的内容

  我们在建站的时候经常会在页面出现同样的内容,比如公司简介之类的,这些东西很长,会减低网页的原创程度,相似度太高,对SE不是很友好。这时我们可以考虑把这部分内...

38040
来自专栏WeTest质量开放平台团队的专栏

如何快速优化手游性能问题?从UGUI优化说起

作者Feefi,加入腾讯多年,目前主要从事Unity项目UI开发及优化相关工作,曾获得国际软件设计大赛“成都创业金钥匙”奖。

11820
来自专栏听雨堂

Morris图表使用小记

挺好用的,碰到几个问题,有的是瞎试解决了的: 1、我想折线图能够响应单击事件,即点击某个节点后,就能加载进一步的信息,帮助没找到,参照另外一个地方的写法,居然支...

30480
来自专栏小白课代表

看书必备!安卓+iOS 看小说神器!!

20820
来自专栏CDA数据分析师

有Bigger | 打造属于自己的 Python 编码环境

一个好的程序员必须善用各种工具提升自己的开发效率,和提升自己的幸福指数。另外,个人觉得vim还是值得自己重新一配的,我的配置过程基本都是在 读spf13的配置,...

22650
来自专栏玩转全栈

flutter开发技巧汇总[持续更新]

1、你应该会碰到initState会被多次执行的问题,通常发生在tabView的切换时,此时你可能要了解一下这个接口了。

57960
来自专栏数据小魔方

学会自定义主题,让你的仪表盘瞬间高逼格~

今天这一篇跟大家介绍如何在PowerBI和Tableau中自定义主题来更换默认主题,让你的仪表盘随心所欲的变换主题。 关于Excel的主题配色相关内容已经推送过...

55370

扫码关注云+社区

领取腾讯云代金券