• libav(ffmpeg)简明教程(2)


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

    这节课就来点轻松的,说说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 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 视频就通过网络传过来了对吧,就这么简单是吧~

  • 相关阅读:
    Ubuntu的防火墙UFW
    使用Xshell连接Ubuntu
    Markdown 11种基本语法
    Git Push 避免用户名和密码方法
    "git rm" 和 "rm" 的区别
    无限级分类实现思路
    1. Git 克隆代码
    Git 笔记
    git 远程分支创建与推送
    ci 笔记
  • 原文地址:https://www.cnblogs.com/hyb1/p/3910631.html
Copyright © 2020-2023  润新知