libav(ffmpeg)简明教程(2)

距离上一次教程又过去了将近一个多月,相信你们已经都将我上节课所说的东西所彻底消化掉了。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/tcpsudo fuser -k 8840/tcp 杀掉相应的进程。而后执行avplay http://localhost:8848/test.html 视频就经过网络传过来了对吧,就这么简单是吧~

相关文章
相关标签/搜索