一、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. 从0开始fastjson漏洞分析

    关于fastjson漏洞利用参考:https://www.cnblogs.com/piaomiaohongchen/p/10799466.html fastjson这个漏洞出来了很久,一直没时间分析, ...

  2. WTM Blazor,Blazor开发利器

    Blazor从诞生到现在也有一段时间了,之前一直在观望,从dotnet5中Blazor的进步以及即将到来的dotnet6中的规划来看,Blazor的前途还是光明的,所以WtmBlazor来了! Bla ...

  3. MyBaits自动配置原理

    前言 首先我们建立一个SpringBoot工程,导入mybatis-spring-boot-starter依赖. <dependency> <groupId>org.mybat ...

  4. [源码分析] 定时任务调度框架 Quartz 之 故障切换

    [源码分析] 定时任务调度框架 Quartz 之 故障切换 目录 [源码分析] 定时任务调度框架 Quartz 之 故障切换 0x00 摘要 0x01 基础概念 1.1 分布式 1.1.1 功能方面 ...

  5. 在 Linux 中,最直观、最可见的部分就是 文件系统(file system)

    在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想.这些思想中有一些来 ...

  6. CentOS 6.5新增加硬盘挂载并实现开机自动挂载

    Centos7.x请参考:https://www.cnblogs.com/himismad/p/7851548.html 在内网主机Centos 6.5新增一个50G硬盘 (搭建在CAS服务器,直接新 ...

  7. java_[类加载器]

    Class 与 类加载 Class对象由JVM自动产生,每当一个类被加载时,JVM就自动为其生成一个Class对象,通过Class对象可以获得类的相关信息. 将类信息读到内存中过程,称为类加载 Jav ...

  8. Redis(3)- 数据结构

    一.Redis数据结构 Redis数据结构:Redis在数据类型上常用的有5种数据类型,而底层实现拥有种.可以使用命令OBJECT ENCODING K1查询底层数据结构. # 查询key的底层数据类 ...

  9. Step By Step(Lua元表与元方法)

    Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...

  10. 熬夜讲解vue3组合API中setup、 ref、reactive的用法

    1.初识setUp的使用 简单介绍下面的代码功能: 使用ref函数,去使用监听某一个变量的变化,并且把它渲染到视图上. setUp函数是组合API的入口函数.这个是非常重要的. setUp可以去监听变 ...