一、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. [bug] Python:“TabError: inconsistent use of tabs and spaces in indentation”

    原因 代码中混用了Tab和4个空格 参考 https://blog.csdn.net/dongdong9223/article/details/82745068

  2. [刷题] 200 Number of Islands

    要求 给定一个二维数组,只有0和1两个字符,1代表陆地,0代表水域,纵向和横向的陆地连接成岛屿,被水域隔开,求出地图中有多少岛屿 思路 对要查找的区域进行双重循环遍历,寻找陆地 从陆地初始点开始进行深 ...

  3. 用nvm的方式安装node

    一.nvm简介 Node Version Manager(Node版本管理工具)由于以后的开发工作可能会在多个Node版本中测试,而且Node的版本也比较多,所以需要这么款工具来管理.   nvm的安 ...

  4. CentOS6 YUM 源失效问题解决办法

    问题解决 网站好不容易找到一个 Yum 源还能用,地址:https://vault.centos.org/6.9/ 操作简单,把CentOS-Base.repo 里面的东西全部删掉,添加如下内容即可. ...

  5. Ubuntu 20.04 配置多网卡链路聚合

    Ubuntu 20.04 配置多网卡链路聚合 多网卡IP配置 首先查看网卡信息 root@it:~# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65 ...

  6. mate-notification-daemon stopping, Mate notifications timeout

    mate-notification-daemon stopping, Mate notifications timeout Ask Question Asked 9 days ago Viewed 1 ...

  7. 008.kubernets的调度系统之标签选择器

    一 Kubernetes 调度简介 除了让 kubernetes 集群调度器自动为 pod 资源选择某个节点(默认调度考虑的是资源足够,并且 load 尽量平均),有些情况我们希望能更多地控制 pod ...

  8. IT菜鸟之交换机基础配置

    交换机属于二层设备(隶属于osi七层模型中的第二层:数据链路层,不识别不支持IP地址)  > 用户模式 用于登录设备 # 特权模式 用于查询设备配置 (config)# 全局模式 用于配置设备 ...

  9. Linux进阶之RAID磁盘阵列、系统启动及dd命令

    本节内容 1.      磁盘阵列 RAID0: 条带卷 2+ 100% 读写速度快,不容错 RAID1: 镜像卷 2   50% 读写速度慢,容错 RAID5: 奇偶校验条带卷 3 读写速度快,容错 ...

  10. MyBatis 数据源的原理和机制

    回顾JDBC JDBC访问数据库流程 加载驱动 获取Connection连接对象(消耗性能) 获取PrepareStatement对象 执行SQL语句 获取结果集 关闭Connection连接对象 存 ...