距离上一次教程又过去了将近一个多月,相信大家已经都将我上节课所说的东西所完全消化掉了。

这节课就来点轻松的,说说libav的命令使用吧。

注:遇到不懂的或者本文没有提到的可以用例如命令后加 --help full或者man 命令(man avconv)查看全部参数细节,或者进libav.org网站查:https://libav.org/avconv.html

杀手级命令:avconv:

个人认为他最强大的功能就是对各种格式的支持范围非常广,你拥有了它可以完全丢弃例如在Windows上格式工厂之类的软件,它支持你所有市面上流行的媒体格式文件。

最简单的转换格式的命令示例(将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.mp4

如果你想要将视频缩小一下尺寸示例(将视频转换成dst.mp4并且重置分辨率为:320x240),长宽像素数字必须同时为偶数并且大于100,,还可以填入720p、1080p之类的字符:avconv -i src.avi -s 320x240 dst.mp4

如果你想只要将原视频的前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
RTSPPort
BindAddress 0.0.0.0
MaxClients
MaxBandwidth
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 视频就通过网络传过来了对吧,就这么简单是吧~

libav(ffmpeg)简明教程(2)的更多相关文章

  1. libav(ffmpeg)简明教程(1)

    突然发现又有好久没有写技术blog了,主要原因是最近时间都用来研究libav去了(因为api极类似ffmpeg,虽然出自同一份代码的另外一个分支,因项目选用libav,故下文均用libav代替),其实 ...

  2. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  3. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  4. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  5. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

  6. 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)

        界面的显示方面就都讲完啦,下面来介绍下控件的响应.     前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...

  7. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

  8. Mac安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

  9. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

随机推荐

  1. centos运行netcore error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

    Error: Another program is already listening on a port that one of our HTTP servers is configured to ...

  2. [Windows]获取系统版本号

    1 string GetMainProgInfo() 2 { 3 string strRet; 4 TCHAR szPath[MAX_PATH]; 5 GetModuleFileName(NULL,s ...

  3. java 提取(解压)zip文件中特定后缀的文件并保存到指定目录

    内容简介 本文主要介绍使用ZipFile来提取zip压缩文件中特定后缀(如:png,jpg)的文件并保存到指定目录下. 导入包:import java.util.zip.ZipFile; 如需添加对r ...

  4. Oracle 12c登陆sys用户的方法

    本机安装过oracle 12c之后,发现用sql plus执行命令conn sys/change_on_install as sysdba; 提示如下图: 后在网上搜索此问题,需要先登陆system账 ...

  5. 魔卡少女(cardcaptor)——线段树

    题目 [题目描述] 君君是中山大学的四年级学生.有一天在家不小心开启了放置在爸爸书房中的一本古书.于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地.这时 ...

  6. element-ui国际化探索(大型项目适用)

    配置好了,自己感觉是比较简单的,就是有一点点繁琐,加油吧. 由于保密,无法拿出项目,故写了一个小demo,记录一下,适用于大型项目: 项目中需要自定义切换中/英文(国际化),基于vue.js,结合vu ...

  7. C# AD 验证登陆

    using System.DirectoryServices; using System.DirectoryServices.AccountManagement; using (DirectoryEn ...

  8. AOP注解方式

    Aop,  aspect object programming  面向切面编程 功能: 让关注点代码与业务代码分离! 关注点, 重复代码就叫做关注点: 切面, 关注点形成的类,就叫切面(类)! 面向切 ...

  9. IO缓冲流

    目录 IO缓冲流 缓冲流 基本原理 字节缓冲流 字符缓冲流 IO缓冲流 缓冲流也叫高效流,能够更高效的进行读取: 转换流:能够进行编码转换 序列化流:持久化存储对象 缓冲流 缓冲流--就是对应4个Fi ...

  10. 最简实例演示asp.net5中用户认证和授权(3)

    上接: 最简实例演示asp.net5中用户认证和授权(2) 在实现了角色的各种管理接口后,下一步就是实现对用户的管理,对用户管理的接口相对多一些,必须要实现的有如下三个: 1 public inter ...