ffmepg V3.4 中文文档(1)

1. 概要

 ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... 

2. 描述

    ffmpeg是一款非常快速的视频和音频转换器,可以从音频/视频源获取。 它还可以在任意采样率之间转换,并通过高质量的多相滤波器实时调整视频大小。ffmpeg 可以从任意输入“文件”读取(可以是常规文件,管道,网络流,抓取设备等),由 -i 指定输入;并写入任意的输出“文件”。任何在命令行中不能被解析的选项都会被认为是输出url。

    原则上,每个输入或输出 url 都可以包含任意数量的不同类型的视频流(视频/音频/字幕/附件/数据)。流的类型/数量可能受容器格式的限制。选择某种输入流将自动确定某种输出,或者使用 -map 选项指定(参见流选择章节)。

    要引用选项中的输入文件,您必须使用它们的索引(从0开始)。 例如。 第一个输入文件是0,第二个是1等。类似的,文件中的流也是使用索引引用。例如, 2:3是指第三个输入文件中的第四个流。(参阅流说明符一章)

   一般规则,选项将应用于下一个指定的文件。因此,顺序很重要,您可以多次在命令行上使用相同的选项,然后将每一个选项应用于下一个输入或输出文件。例外:全局选项(例如verbosity level),应该首先指定它们。

    将输出文件的视频比特率设置为64 kbit / s:

 ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi

    强制输出文件的帧频为24 fps:

 
ffmpeg -i input.avi -r 24 output.avi
    强制输入文件的帧速率(仅适用于原始格式)为1 fps,输出文件的帧速率为24 fps:
 
ffmpeg -r 1 -i input.m2v -r 24 output.avi
    原始流输入文件可能需要format选项。

3. 详细说明

ffmpeg中转换过程可以用下图来描述:

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

    ffmpeg调用libavformat库(包含demuxers)来读取输入文件并获取包含编码数据的数据包。当由多个输入文件时,ffmpeg会尝试通过跟踪输入流上的最低时间戳来使它们同步。

    然后将编码的数据包传递给解码器(除非为数据流选择了流拷贝,请参阅进一步的描述)。解码器产生未压缩的帧(原始视频/ PCM音频/ ...),再过滤做进一步处理(参见下一节)。在过滤之后,帧被传递给编码器,编码器对其进行编码并输出编码包(encoded data packets)。 最后,这些被传递给复用器( muxer ),它将编码的数据包写入输出文件。

3.1. 过滤器

    在编码之前,ffmpeg可以使用libavfilter库中的过滤器处理原始音频和视频帧。几个链式过滤器形成一个滤镜(filter graph)。 ffmpeg分两种类型的滤镜:简单和复杂。

3.1.1 Simple filtergraphs

    简单滤镜就是那些只有一个输入和输出,都是相同类型的滤镜。 在上图中,它们可以通过简单地在解码和编码之间插入额外的步骤来表示:

 _________                        ______________
|         |                      |              |
| decoded |                      | encoded data |
| frames  |\                   _ | packets      |
|_________| \                  /||______________|
             \   __________   /
  simple     _\||          | /  encoder
  filtergraph   | filtered |/
                | frames   |
                |__________|

    简单滤镜配置了流 -filter 选项(视频用 -vf 和音频用 -af)。 一个简单的视频滤镜看起来像这样:

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

    请注意,某些滤镜会更改帧属性,但不会改变帧内容。例如,上例中的fps过滤器会更改帧数,但不会触及帧内容。 另一个例子是setpts过滤器,它只设置时间戳并以其他方式传递帧。

3.1.2 Complex filtergraphs

    复杂滤镜:那些不能简单描述为用于一个流的线性处理链的滤镜。 例如,当图形有多个输入和/或输出,或者输出流类型与输入不同时,就是这种情况。 它们可以用下图表示:

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

    复杂滤镜使用 -filter_complex 选项进行配置。 请注意,此选项是全局性的,因为复杂滤镜本质上不能与单个流或文件明确关联。-lavfi 选项等同于-filter_complex。

    一个复杂滤镜的简单例子是覆盖过滤器(overlay filter),它有两个视频输入和一个视频输出,其中包含一个叠加在另一个之上的视频。 它的音频对应是amix滤波器。

3. 流拷贝

    流拷贝是通过将拷贝参数提供给 -codec 选项来选择的模式。 它使ffmpeg省略了指定流的解码和编码步骤,因此它只进行解复用和混合(demuxing and muxing)。 这对于更改容器格式或修改容器级元数据很有用。 在这种情况下,上图将简化为:

 _______              ______________            ________
|       |            |              |          |        |
| input |  demuxer   | encoded data |  muxer   | output |
| file  | ---------> | packets      | -------> | file   |
|_______|            |______________|          |________|
    由于没有解码或编码,因此速度非常快,并且没有质量损失。 但是,由于许多因素,它在某些情况下可能不起作用,因为过滤器只对未压缩的数据起作用。

    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值