一、FFmpeg的基本组成

目前,ffmpeg有7大库,分别为AVFormat, AVCodec, AVFilteer, AVDecoder, AVUtil,Swresample, Swscale,AVDevice七大库组成。

1、AVFormat模块

它实现了对文件的封装(muxing)解封装(demuxing),例如:MP4,flv,ts等文件格式,RTMP(Real Time Messaging Protocol),TRSP(Real Time Streaming Protocol),MMS等网络协议封装格式。在实际需求中,我们可以对avforamt增加自己的封装处理模块,进行媒体封装格式的扩展,增加自己定制的封装格式。

2、AVCodec模块

它实现了大多数常用的编解码格式,支持编码(encoder),也支持解码(decoder), 例如:MPEG4,AAC,MJPEG,H.264(第三方解码器),H.265等解码器,同样,也支持h264对应的x264编码器,h265支持的x265编码器。同理,我们也可以对AVcodec进行拓展,增添我们自己的编解码格式。

3、AVFilter模块

它提供了一个通用的音频,视频,字幕等滤镜处理框架,它的一个使用样例如下:

在这张图中,首先,一个输入文件进行分割成为两个流,一个保存原样([main]),另一个传入[tmp],经过crop滤镜和vflip滤镜处理后,覆盖在[main]流上,并输出新的视频。

例如:ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop = iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT

这行命令的刨析:

a、“,”: 用于分割两个相同的Filter线性链,在这里就是crop和vflip

b、“;”: 用于分隔不同的Filter线性链

c、[main][flip]  表示这两个流进行合并,后面overflay表示flip从x = 0, y = H/2这个地方开始覆盖掉。

4、swscale和swresample模块

这两个模块放在一起介绍:

scale:裁剪,是对视频图像进行缩放和像素格式转换。例如:将图像从1080p->720p,将图像数据从yuv420P->YUYV,YUV->RGB。

YUV:Y代表亮度,UV代表色度。用于对视频图形进行压缩。

swresample:重采样,音频需要进行采样,它可以操作音频采样,音频通道(channel)布局转换和调整。

5、命令分析:

例如;ffmpeg -i input.mp4 output.avi

a、-i: input(输入),后面接一个输入文件。

第二个人参数就是输出文件,在这里是output.avi

b、在这里,这两个文件不是简单的进行后缀名的更换,而是对它的封装格式进行了转换,转换过程如下图:

先读取输入流,让后通过Demuxer(调用libavformat的API)对音频包进行解封装,通过Decoder(libavcodec)解包为YUV或PCM数据,然后通过Encoder(libavcodec)对数据进行编码,再通过muxer(libavformat)进行封装,最后成为输出流。

二、ffplay和ffprobe

ffplay:它提供了音视频的显示播放功能

ffprobe:它是一个多媒体分析工具,可用查询你要了解的媒体信息,比如音频的参数,视频的参数,时长等。

例:ffprobe -show_streams  那些年,我们一起追的女孩.mp4

上面的语言是经过我自己的整理写的,如果有错误,欢迎纠正!

ffmpeg-入门介绍(笔记)的更多相关文章

  1. cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例

    cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...

  2. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  3. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  4. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

  5. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  6. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  7. FFmpeg Basic学习笔记(3)

    视频叠加--画中画效果 overlay video filter 视频叠加比较常见的应用场景是台标的叠加,在画面左上角.右上角.左下角或右下角叠加台标. ffmpeg提供的overlay filter ...

  8. FFmpeg Basics学习笔记(2)

    帧率 fps的概念 帧率,单位FPS(frame per second), 用于衡量视频每秒的处理帧数,对于编码器而言说明编码器在1s的编码的速度,通常可以使用一帧的编码时间倒数简单计算:对于解码器而 ...

  9. FFmpeg 入门(5):视频同步

    本文转自:FFmpeg 入门(5):视频同步 | www.samirchen.com 视频如何同步 在之前的教程中,我们已经可以开始播放视频了,也已经可以开始播放音频了,但是视频和音频的播放还未同步, ...

  10. FFmpeg 入门(4):线程分治

    本文转自:FFmpeg 入门(4):线程分治 | www.samirchen.com 概览 上一节教程中,我们使用 SDL 的音频相关的函数来支持音频播放.SDL 起了一个线程来在需要音频数据的时候去 ...

随机推荐

  1. (数据科学学习手札121)Python+Dash快速web应用开发——项目结构篇

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  2. 将mysql数据同步到ES6.4(全量+增量)

    下载安装包时注意下载到指定文件夹 这里我放在OPT文件夹下一:安装logstash进入到opt文件夹打开终端 执行以下命令wget -c https://artifacts.elastic.co/do ...

  3. J2SE基础题

    J2SE基础 八种基本数据类型的大小,以及他们的封装类.(有的也说是9中基本数据类型,包括了void) 基本类型 大小(字节) 默认值 封装类 byte 1 (byte)0 Byte short 2 ...

  4. MySQL中MyISAM为什么比InnoDB查询快

    大家都知道在MySQL中,MyISAM比InnoDB查询快,但很多人都不知道其中的原理. 今天我们就来聊聊其中的原理,另外也验证下是否MyISAM比InnoDB真的查询快. 在探索其中原理之前,我们先 ...

  5. osg纯手工画球+贴纹理

    手动计算球面顶点的坐标,纹理坐标,来画球并贴纹理 其中createSphereGeom()函数的的二个参数为18,意思是在经纬度上每10度设一个点,因为经度一共是180度,180/18=10,相当于横 ...

  6. Linux权限问题(1)-Sticky

    背景:朋友在使用php进行mv操作时,出现了权限被拒绝的问题.查看之后,发现目录设置了sticky权限,取消此权限后,文件可以正常mv及删除. Sticky:对于一个多人可写的目录,如果设置了stic ...

  7. VMware安装RedHat7、CentOS7后无网卡解决办法

    由于Vmware虚拟网卡和linux兼容问题导致驱动无法正常安装,默认的网卡类型不兼容找到我们的Vmware虚拟机文件夹,将VMware 虚拟机配置 (.vmx),追加一条设置,网卡类型etherne ...

  8. 062.Python前段框架Django视图CBV

    一 CBV与FBV CBV:Class Based View FBV:Function Based View 之前写过的都是基于函数的view,就叫FBV.还可以把view写成基于类的,那就是CBV. ...

  9. 052.Python前端Django框架路由层和视图层

    一.路由层(URLconf) 1.1 路由层简单配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Dj ...

  10. 第35章-CentOS7实战

    补充安装软件包 yum -y install vim lrzsz bash-completion telnet nmap 关闭selinux:/etc/selinux/config 关闭防火墙:sys ...