授讲:Tomy
地点:放映助手交流群
时间:2016-10-08 20:00
文档整理:老厉害
好了开启今天的课程;首先很高兴又在这里和大家聊一下关于数字电影技术的话题,今天的话题是什么呢,其实就一个,就是来聊聊关于FFmpeg ,今天是基础篇。
大家可能听说过FFmpeg这个名字,但是这个FFmpeg到底是用来干什么的,可能不是很了解;所以我先来说说FFmpeg到底是个啥东东?
我先来例举三个FFmpeg的客户名单;
一、FaceBook 全球知名的社交网站
二、Chrome 著名的网页浏览器
三、YouTube 全球最大的视频分享网站
看这三个客户的名单你就能知道这个FFmpeg到底有牛X了。
好了,我接下来给FFmpeg下一个简单的定义;FFmpeg是基于GNU的用于处理流媒体的(比如视频,音频,字幕等)的软件工程;说软件工程你可能会有点不清楚,其实FFmpeg就是一个免费的媒体处理软件,这样你就能明白了。
这个媒体主要是各类视频、音频、字幕处理可以理解为操作,比如视频的格式转换(俗称转码)、音频格式的转换、字幕叠加等等。
反正对于视频、音频、字幕的一切操作需要FFmpeg都可以帮你来完成。
为什么叫FFmpeg?
FF-Fast Forward(快进的意思)、mpeg-Motion Picture Exprer Group(动态图形专家组);FF的意思其实就是说明这个软件处理各类媒体的速度非常之快,和DVD播放机上的快进键是一个翻译;MPEG是说明这个FFmpeg工程的专业程度;
所以合起来就是说明FFmpeg是一个专业的、快速的、高效的媒体处理软件。
好了,大概了解了FFmpeg的概念以后,我来说说FFmpegr的具体应用;
首先要了解的是FFmpeg这个命令的输入规则,我要说明一点,FFmpeg是通过命令行输入命令来完成一个特定的操作的。所以首先要了解这个命令怎么来输入才是正确的。
请看下图
上下二张图是同一张图,下面是我翻译过的。
要输入一条FFmpeg命令,首先要输入ffmpeg(这不是废话吗)!然后那个global optional是全局参数,这个全局参数的意思是对于输入和输出文件同样有效的。
接下来的input file option意思是输入文件的指定参数;-i 必须要有表示接下来是一个输入文件;然后input file就是输入一个文件;接下来的output file options意思是输出文件的指定参数;最后就是output_file就是输出一个文件。
记住一点,凡是有options的选项都不是必须要有的;比如一开始那个globe options全局参数就不是必须要有的,凡是不带options选项的就一定输入,哪几个是一定要输入的呢?
首先是ffmpeg这个命令,然后-i 代表输入一个文件,input_file代表输入一个或者几个文件,最后就是output_file就是输出一个文件;也就是四个选项是必须要输入的,否则就不会一条完整的ffmpeg命令。
比如我来举一个例子。ffmpeg -i 输入文件.avi 输出文件.mp4;记住每个选项之间要有一个空格;这条命令的意思就是把输入文件.avi转码为输出文件.mp4
你看是不是超级方便?如果不是使用命令的话,你至少需要一个转码软件,比如格式工厂等等。
刚才我也说过了,用FFmpeg转码的效率比任何一个转码软件都要高,而且使用FFmpeg转码的质量非常高,甩XX工厂几条大街。
好了,上面基本上说了二个要点:
一、什么FFmpeg;
二、FFmpeg命令的使用规范。
什么是FFmpeg更正一下
了解了以上二个要点之后,我来说说关于视频转码的话题,这个也是大家可能最为关心的一个关于FFmpeg的话题,要了解FFmpeg是如何来转码一个视频的,我们先来看一张图片(一定要记住这张图片)
我接来说说FFmpeg转码的秘密;首先是输入文件,比如a.avi,这个avi是什么意思;大家一定会说这个我知道啊,就是一种视频格式嘛,我想来更正一下,其实说的严格一点不是格式,而是一种叫avi的封装;啥,怎么出来个封装了?对,就是叫封装。
我们可以把一个视频文件理解为一个包,里面有几个瓶子,我们想喝瓶子中的水,怎么办?其中一个瓶子里面装的是可乐,一个瓶子里面装的是水。那我要喝可乐怎么办?首先,我们要打开这个包吧对不对?这个包我们可以理解为一个封装,比如AVI就是一个包(或者叫一个封装),其中的可乐是视频流,水是音频流,可乐和水装在不同的瓶子里面;所以大家在网上下载的AVI MP4 MKV其实都是不同的封装而已,但是里面的水和可乐有可能完全是一样的;这就是视频的概念。
我再来强调一点,所谓视频就是一种封装形式,里面封装了经过压缩的(或者叫编码过的)视频流和音频流。
了解了这个概念以后,我们就能完全了解FFmpeg的工作流程了:
1、导入一个视频文件(对应上面图中的数字1);
2、DEMUX(意思是去掉打开封装,或者叫去封装)这个DEMUX的意思就是打开装有可乐和水的包;
3、就是你得到的装有可乐(视频编码流)和水(音频编码流)的瓶子;
4、但是瓶子是不能喝的,我们要喝的是瓶子里面的可乐和水本身对不对,这个过程就是解码;
5、解码以后的视频和音频(可乐和水)这才是我们最终想要得到的,对不对,同时也是FFmpeg用来为输出做准备的素材(未压缩过的视频和音频数据),这个对应我们数字电影来说就是你看到的具体的画面和听到的具体的声音;
6、编码(也叫压缩,一般编码都是会有压缩的,分为有损和无损压缩);
7、就是编码(或者叫压缩过的)以后的视频和音频流;
8、MUX(重新封装为一种视频格式);
9、一种新的封装产生了;
比如输入我刚才举例的那样,输入的封装叫avi,输出的封装叫mp4;这个从1到9就是整个FFmpeg的工程流程;所以你只要理解了这个1到9到底在干些什么,那么FFmpeg对你来说已经不再是什么难理解的概念了。
好了,这个就是我今天要讲的关于FFmpeg的基础知识篇,接下来我以二个具体的例子来结束今天的课程,这二个例子也是我在网站和QQ群中看到经常有人提出的,所以我具体来答复大家。
第一个例子,就是关于如何来处理FLV这种封装。有童鞋说他要做预告片,但是他从网站上下载的FLV文件无法被EDIUS或者PR识别,怎么办?
其实使用FFmpeg可以轻松、解决
解决方案一、ffmpeg -i 输入文件.flv -c copy 输出文件.mp4
其实ED也好,PR也罢,并不是不能打开FLV封装中的视频和音频流,只是ED和PR无法理解FLV这种封装,或者干脆叫不支持这种FLV封装形式,但是MP4这种封装文件是可以被ED和PR所识别的,所以上面这条FFmpeg命令其实没有改变任何的视频和音频流,只是换了一种封装而已,结果是顺利解决问题。
这条命令当中的-c copy选项就是把FLV文件中的视频和音频流拷到MP4文件中,所以并没有转码,速度很快,视频和音频没有任何的损失,可以说是无损转码。
解决方案二、如果遇到-c copy也不行,怎么办?如果方案一失败,就那请采用方案二,具体命令如:ffmpeg -i 输入文件.flv -q 1 输出文件.mp4
大家注意到没有,这条命令中把原来的-c copy换成了-q 1;那么这个-q 1选项是什么意思呢?q(Quality质量);q就是转码质量的意思。
这条命令就是不管原来FLV文件中的视频流是什么样的编码类型,我用最高的质量来转码为H264编码的MP4文件;1就代表最高转码质量的意思,这条命令就有转码了,所以速度没有第一条来得快;所以我们首先一定要采用方案一,方案一无效再用方案二,理解了吧。
好了我回答的第一个问题,接下来是第二个问题,也是经常有网友提到的问题,就是如何把DCP转码为普通视频;关于这个操作也有二个方案;方案一(高质量方案),使用命令如下:
ffmpeg -i 视频.mxf -i 音频.mxf -c:a copy -c:v prores -qmin 1 -qmax 3 输出视频.mov
我来说说这条方案一命令的意思,-c:a 就是对音频编码的意思,现在我采用-c:a copy 就是说对DCP中的音频部分不作任何转码的处理(原来是5.1声道,转码以后还是5.1声道),-c:v 就是对视频编码的意思,视频编码我采用了苹果公司的视频无损的prores编码方案,-qmin 1 -qmax 3 就是让转码的时候视频质量在最高1和3之间;这样一条FFmpeg命令轻松把DCP转换为普通的视频了,而且这个视频的质量是视频无损的;有利于接下来的编辑操作;这是DCP转换为普通视频的第一种方案,也是高质量的方案;接下来说说DCP转换为普通视频比较经常的一种方案,即第二种方案,命令如下:
ffmpeg -i 输入视频.mxf -i 输入音频.mxf -q 1 输出文件.mp4
这个方案二和上面FLV转码的方案二其实是一样的;就把DCP转码为视频H264编码,音频AAC编码的普通MP4封装文件;其中的-q 1也就是保证转码质量的最大化。
好了,今天的课程到此结束,谢谢大家的时间,我们下次再会。
扩展阅读: FFmpeg常用基本命令
转载请注明出错(放映员资料库)和作者(Tomy)
声明:影聚合仅提供信息展示和存储服务,文章均来自网络和个人,内容仅代表作者本人观点,不代表本站观点。部分内容由AI智能生成,请谨慎参考。如内容如有侵权,请联系cm@rov8.com,我们将第一时间处理。
2023-11-28
2023-10-09
2023-06-09
2023-02-09
2022-05-31
2022-02-09
2020-06-13
2018-02-09
2015-02-27
2014-03-18
评论(0)