一、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. Java集合详解(三):HashMap原理解析

    概述 本文是基于jdk8_271版本进行分析的. HashMap是Map集合中使用最多的.底层是基于数组+链表实现的,jdk8开始底层是基于数组+链表/红黑树实现的.HashMap也会动态扩容,与Ar ...

  2. composer 更新命令及常用命令

    composer 安装 官方地址:https://getcomposer.org/download/ 下载地址:https://getcomposer.org/Composer-Setup.exe 下 ...

  3. [tools] 工具

    代码编辑 notepad++ 文档对比 Beyond Compare 代码阅读 source insight 代码分析 Scitools 下载 http://www.cr173.com/soft/29 ...

  4. Linux讲解之定时任务

    https://www.php.cn/linux-369884.html Linux讲解之定时任务 原创2018-05-14 10:11:3101319 本文目录: 12.1 配置定时任务 1 ...

  5. Fedora镜像下载地址

    Fedora镜像下载地址 Fedora 7核心源码包在: http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/7/F ...

  6. shell基础之函数

    shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式: func() { #指定函数名 command # ...

  7. 1.1Ubuntu安装

    在虚拟机中安装 Ubuntu 步骤 安装前的准备和基本安装 设置语言环境 安装常用软件 1. 安装前的准备和基本安装 1.1 安装前的准备 访问 http://cn.ubuntu.com/downlo ...

  8. CSS 重置技术

    元素默认样式显示问题 每个浏览器对不同元素都有自己的默认样式.Google Chrome 渲染正文标题.段落.列表等,与 IE 浏览器可能都有所不同.这就导致同一个页面元素在不同的浏览器中显示效果不一 ...

  9. Linxu 修改主机名

    方法一: # hostname NEW_NAME <这种方法只对当前系统有效,重启后无效> 方法二: # hostnamectl set-hostname NEW_NAME:设定主机名,永 ...

  10. GO语言面向对象08---投胎游戏

    package main import ( "fmt" "math/rand" "os" "time" ) /* @内存 ...