1 FFmpeg的由来

FFmpeg缩写中,FF指的是Fast Forward,mpeg是 Moving Pictures Experts Group的缩写。官网:ffmpeg.org

编译好的可执行程序也可以从官网上下载。当然你也可以自己搭建编译环境编译。

2 FFmpeg命令行工具

主要包括:

  • ffmpeg 快速的音频、视频编码器/解码器
  • ffplay 多媒体播放器
  • ffprobe 多媒体文件特征解析

同时FFmpeg编译之后包含libavcodec、libavformat、libavdevice、libavfilter、libavutil、libpostproc、libswresample、libswscale。

3 ffmpeg命令行格式

ffmpeg.exe [global options] [input file options] -i input_file [output file options] output_files
[]表示可选的参数

4 ffplay命令行格式

ffplay和ffmpeg命令行参数一致,只是ffplay没有输出相关的参数。
比如: ffmpeg -i input_file ... test_options ... output_files
使用ffplay可以直接预览
ffplay -i input_file ... test_options

5 ffmpeg中数值前缀或后缀语法

ffmpeg中表示数字可以使用K、M、G形式的后缀,分别表示千、兆、吉;默认是10进制的,可以使用后缀B表示以2为单位的KB、MB、GB等。比如在设置转码率的时候可以使用下面几种形式表示视频编码码率为1.5Mb:

ffmpeg -i input.avi -b:v 1500000 output.mp4

ffmpeg -i input.avi -b:v 1500K output.mp4

ffmpeg -i input.avi -b:v 1.5M output.mp4

ffmpeg -i input.avi -b:v 0.015G output.mp4

设置转码码率为10MB,形式如下:

ffmpeg -i input.mpg -b:v 10MB output.mp4

7 ffmpeg转码及filter

ffmpeg转码的基本逻辑是如下图所示:

 _______              ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________|

ffmpeg从输入文件(input_file)中通过解复用器(demuxer,包含在libavformat库中)读取到压缩之后的编码数据(encoded data);压缩的数据通过解码器(decoder)的解码,还原为原始的数据(decoded frame,音频PCM、视频YUV),这些数据可作为filter的输入;原始音视频数据通常可以直接传递给编码器(encoder),输出编码后的数据(encoded packet,重新编码),这个过程也可以省略;通过复用器(muxer)的处理输出指定的封装格式。

这里提到filter的概念,在ffmpeg的转码过程中filter是最复杂的。多个filter可以构成filterchain,使用逗号分隔;多个filterchain可以构成filtergraph,用分号分隔。filtergraph分为简单和复杂两种。简单的filtergraph通常是可以线形顺序描述的filtergraph,比如下图:

 _______        _____________        _______        ________
| | | | | | | |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______| |_____________| |_______| |________|

复杂的filtergraph通常是具有多个输入输出文件,并有多条执行路径。比如下面的例子,

 _________
| |
| input 0 |\ __________
|_________| \ | |
\ _________ /| output 0 |
\ | | / |__________|
_________ \| complex | /
| | | |/
| input 1 |---->| filter |\
|_________| | | \ __________
/| graph | \ | |
/ | | \| output 1 |
_________ / |_________| |__________|
| | /
| input 2 |/
|_________|

filter在实际使用中语法如下:(注意区分,前面是输出标签,后面是输出标签)

[in_label1][in_label2][...] filter_name=parameters [out_label1][out_label2][...]

举例说明下,先看下面语法:
ffplay -i i.mpg -vf split[a][b];[a]pad=2*iw[A];[b]hqdn3d[B];[A][B]overlay=w

最终的filter是这样的:

  [a]  [a]pad=2*iw[A]  [A]

split                overlay=w

  [b]  [b]hqdn3d[B]    [B]

(后续部分内容会介绍不同的filter语法)

8 Lavfi virtual device

-f表示使用filter,而lavfi是libavfilter virtual input device的别名。其支持的命令行格式如下:

-f lavfi [-graph [-graph_file]]

-graph是作为输入的filtergraph,graph_file表示filtergraph文件的。

比如下面输入显示SMPTE测试图:

ffplay -f lavfi -i smptebars

9 颜色的表示方法

  • 固定的名字(可以查看颜色表),比如red、blue;
  • 十六进制的颜色描述0xRRGGBB[@AA],注意透明度A必须是浮点数,范围[0.0,1.0]或者十六进制描述(0x前缀);
  • #RRGGBB@AA,网页中描述颜色的格式,AA使用十六进制;
  • random,系统随机计算一个颜色;

可以用下面语句验证下颜色的描述:

ffplay -f lavfi -i color=c=0xff0000@0.5

ffplay -f lavfi -i color=c=blue

ffplay -f lavfi -i color=c=#0000ff@0x80

ffplay -f lavfi -i color=c=random

10 ffmpeg帮助文档查询

ffmpeg.exe支持以下命令后缀 -h、-h long、-h topic
ffmpeg -h decoder=decoder_name
ffmpeg -h encoder=encoder_name

  • 支持的码流filter -bsfs
  • 可用的编解码器 -codecs
  • 可用的解码器 -decoders
  • 可用解码器 -encoders
  • 可用filter -filters
  • 支持的音视频格式(后缀或文件格式) -formats
  • 支持的音频声道layout -layouts
  • 支持的像素格式 -pix_fmts
  • 支持的协议类型 -protocols
  • 支持的音频数字化精度 -sample_fmts

附加说明

本部分内容主要涉及《Ffmpeg Basic》的前两章,建议认真阅读下,这将是后续学习和扩展的基础,不需要全部搞明白,但是需要理解ffmpeg基本的转码、和libavfilter的工作原理。
至于ffmpeg的帮助文档,在需要的时候知道哪里可以找到,可以参考什么就可以了。

参考:http://ffmpeg.org/ffmpeg-filters.html#Filtering-Introduction

FFmpeg Basics学习笔记(1)ffmpeg基础的更多相关文章

  1. FFmpeg Basics学习笔记(2)

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

  2. FFmpeg Basic学习笔记(3)

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

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  5. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  6. 「学习笔记」字符串基础:Hash,KMP与Trie

    「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ...

  7. 【学习笔记】Linux基础(零):预备知识

    学习笔记(连载)之Linux系列 Note:本学习笔记源自<鸟哥的Linux私房菜(基础学习篇)>一书,为此书重要内容的摘要和总结,对于一些常识性的知识不再归纳 新型冠状病毒引发的肺炎战& ...

  8. 【JAVAWEB学习笔记】06_jQuery基础

    接05的学习笔记. 四.使用JQ完成省市二级联动 1.需求分析 使用jquery完成省市二级联动 2.技术分析 2.1数组的遍历操作 方式一: $(function(){ // 全选/ 全不选 $(& ...

  9. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

随机推荐

  1. BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

    转自:https://blog.csdn.net/ochangwen/article/details/51531866 一.简介 Java在java.math包中提供的API类BigDecimal,用 ...

  2. coreData详解

    1.初识CoreData CoreData的结构构成: NSManagedObjectModel的构成: 可以通过Entity创建继承自NSManagedObject类的文件,这个文件就是开发中使用的 ...

  3. Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)

    一段PHP程序执行报错: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261181 ...

  4. 如何查看出口IP地址?

    出口ip地址怎么看?#curl ifconfig.me

  5. uploadify.js参数说明(转)

    一.属性 属性名称 默认值 说明 auto true 设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 . buttonClass ” 按钮样式 buttonCursor ‘ ...

  6. 如何在windows下安装JDK

    1:卸载 A:一定要删除注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft 项 B:最好用安装工具卸载JDK,如果没有的话就删除JDK文件夹然后用Wise Regis ...

  7. iOS AFNetWorking下得Basic Auth认证请求方式

    我新入职了一家公司,做了一个项目,服务器的大哥说他采用的是Basic Auth认证请求方式,一般我们用的都是OAuth的认证方式,下面我们就对比一下这两种认证方式 百度百科得到如下 Basic Aut ...

  8. Digital Color Meter 颜色值提取工具

    1.Digital Color Meter 简介 Digital Color Meter 是一款 Mac 自带的颜色值提取工具. 其它下载地址 Digital Color Meter for Mac, ...

  9. C# 两个时间相减 返回 对应天时分秒

    "; //string sdsdsdsds = "1"; , '); //不足2位 就补充0 足2位 就不变 DateTime dts1 = DateTime.Now; ...

  10. java多线程学习--java.util.concurrent (转载)

    题记:util和concurrent 包是后续重点先看的和学习的模块 原文地址:http://www.cnblogs.com/sunhan/p/3817806.html CountDownLatch, ...