一、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. 老J的技术分享之总结

    老J做IT这块有二十多个年头了,算是中国IT的见证者与参与者.那个时候刚开始接触和了解时,对于他的一些建议,我不是很乐于去接受,因为我觉得他的那一套技术体系不是很适合如今的情况,当时间久了后发现,他对 ...

  2. Go 函数详解

    一.函数基础 函数由函数声明关键字 func.函数名.参数列表.返回列表.函数体组成 函数是一种类型.函数类型变量可以像其他类型变量一样使用,可以作为其他函数的参数或返回值,也可以直接调用执行 函数名 ...

  3. 并查集板子+kruskal

    最近在学最小生成树得时候又用到了并查集,一起来整理一下 1.并查集 并查集就是字面意思,将两个单独得集合合并成一个大的集合. 并查集关键在于两个操作:合并和查找 先要完成查找操作(合并操作在查找的基础 ...

  4. golang:并发编程总结

    并行和并发 并发编程是指在一台处理器上"同时"处理多个任务. 宏观并发:在一段时间内,有多个程序在同时运行. 微观并发:在同一时刻只能有一条指令执行,但多个程序指令被快速的轮换执行 ...

  5. [笔记] 《c++ primer》书店程序 Chapter7

    Sales_data.h 1 #ifndef SALES_DATA_H 2 #define SALES_DATA_H 3 4 #include "Version_test.h" 5 ...

  6. [bug] python matplotlib 中文乱码

    参考 matplotlib解决不显示中文问题 https://www.jianshu.com/p/b02ec7dc39dd

  7. 如何解决在WordPress安装Redis插件时需要输入FTP问题?

    用LAMP或者LNMP搭建Worepress的时候,安装主题或者插件时候,往往提示需要输入FTP服务端信息的问题,其实这是一个坑,可以完全避免的 我们只需在wp-config.php文件最后添加以下代 ...

  8. k8s运行容器之Job应用(6)

    容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序,完成后容 ...

  9. 手机POS机

    资质查询 http://www.pbc.gov.cn/zhengwugongkai/127924/128041/2951606/1923625/1923629/d6d180ae/index4.html ...

  10. [leetcode] 69. x 的平方根(纯int溢出判断实现)

    69. x 的平方根 非常简单的一个题,用二分法逼近求出ans即可,额外注意下溢出问题. 不过我要给自己增加难度,用long或者BigNum实现没意思,只能使用int类型 换句话当出现溢出时我们自己得 ...