距离上一次教程又过去了将近一个多月,相信你们已经都将我上节课所说的东西所彻底消化掉了。html
这节课就来点轻松的,说说libav的命令使用吧。服务器
注:遇到不懂的或者本文没有提到的能够用例如命令后加 --help full或者man 命令(man avconv)查看所有参数细节,或者进libav.org网站查:https://libav.org/avconv.html网络
杀手级命令:avconv:tcp
我的认为他最强大的功能就是对各类格式的支持范围很是广,你拥有了它能够彻底丢弃例如在Windows上格式工厂之类的软件,它支持你全部市面上流行的媒体格式文件。ide
最简单的转换格式的命令示例(将src.avi文件按照原视频比例转换成MP4格式放置到dst.mp4): avconv -i src.avi dst.mp4工具
若是你是想将视频中的每一帧输出成图片序列保存到磁盘上,请输入:avconv -i src.avi dst_%d.jpg测试
反过来若是你有按照必定规律命名好的图片序列(相似像src_0.jpg,src_1.jpg,src_2.jpg...),也能够反过来输入导出成最终视频:avconv -i src_%d.jpg dst_mp4网站
除了文件中的视频、图片序列能够用来做参数之外,还能够将rtsp网络视频做为参数:avconv -i rtsp://hostname[:port]/path dst.mp4spa
若是你想要将视频缩小一下尺寸示例(将视频转换成dst.mp4而且重置分辨率为:320x240),长宽像素数字必须同时为偶数而且大于100,,还能够填入720p、1080p之类的字符:avconv -i src.avi -s 320x240 dst.mp4code
若是你想只要将原视频的前6秒转换出来的话,请输入:avconv -ss 00:00:00 -t 00:00:06 -i src.avi dst.mp4
想将原视频bite rate修改,请使用-r参数:avconv -i src.avi -r 2397600 dst.mp4
同理原视频中的音频一样也有sample rate修改的需求,请使用avconv -i src.avi -f -sample_rates 128000 dst.mp4
若是想将pixel formats从新定义的话,请使用-pix_fmt参数(注:必须是这个文件格式所支持的pix_fmts):avconv -i src.avi -pix_fmts AV_PIX_FMT_YUV420P dst.mp4
同理音频也须要sample_fmts从新设置的话,使用-sample_fmts参数,一样是输出文件格式所支持的format才能成功:avconv -i src.avi -sample_fmts AV_SAMPLE_FMT_FLTP dst.mp4
细心的人会发现上面的命令中修改sample rate中多包含了-f,其实-f是filter的意思,它是libav另一个很是强大的工具,当你每次打开libav的源文件或者官网介绍中会发现有不少的和filter相关新奇的部分。
下面以一个简单的例子介绍一下它:
avconv -i src.avi -f clock dst.mp4 顺时针旋转视频90度就这么简单! more detail
libav还实现了并支持SAP(Session Announcement Protocol),
你一句命令就能够:avconv -re i src.avi sap sap://0.0.0.0, 播放就用avplay命令直接带 sap://localhost便可播放,或者用VLC player直接打开网络地址播放,强大吧?
libav还引用了另一个强大的库——frei0r,它自己是用C写的一个视频特效处理的库,使用它只需给定一些简单少量的参数便可实现强大的效果,虽然我还没真正测试过,有兴趣的朋友能够玩玩看回复在下面。
另外它做为一个成熟的视频库,怎么能缺乏对rtsp协议的支持呢?
创建rtsp服务器,使用命令avserver -f avserver.conf
其中avserver.conf 是一个文本文件,须要实现写好内容像这样:
Port 8848 RTSPPort 8840 BindAddress 0.0.0.0 MaxClients 100 MaxBandwidth 1000000 CustomLog connlogs.txt <Stream test.html> File "fsbk.flv" Format flv </Stream> <Stream status.html> Format status </Stream>
是否是至关简单,若是你发现端口被占用了,输入sudo fuser -k 8848/tcp 和 sudo fuser -k 8840/tcp 杀掉相应的进程。而后执行avplay http://localhost:8848/test.html 视频就经过网络传过来了对吧,就这么简单是吧~