前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ffmpeg Documentation

ffmpeg Documentation

作者头像
用户3004328
发布2018-09-06 16:52:59
9460
发布2018-09-06 16:52:59
举报
文章被收录于专栏:增长技术增长技术
  • 摘要 ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
  • 描述 ffmpeg是一个非常快的视频和音频转换器,还可以从实时音频/视频源获取。它还可以在任意采样率之间 转换和调整高质量的视频的多相滤波器 从ffmpeg的输入“文件”(可以是普通文件,管道,网络流,抓设备等) ,由-i选项指定任意数量的读取和写入到任意数量的输出“文件”,这由一个普通的输出文件名被指定。任何 命令行不能被解释为一个选项上发现被认为是一个输出文件名。 每个输入或输出文件在原则上可以包含任意数量的不同类型(视频/音频/字幕/附件/数据)的流。允许数量 和/或类型的流可以由容器格式的限制。选择其中流从投入将进入其输出自动或与-map选项完成(见流选择章节)。 是指输入文件的选项,则必须使用他们的索引(从0开始) 。例如第一输入文件是0,第二个为1,等等。同样, 在一个文件流通过其索引所指。例如2:3指的是在第三个输入文件中的第四数据流。也看到了流符章。 作为一般规则,选择被施加到下一个指定的文件。因此,顺序很重要,你可以在命令行上多次相同的选项。 每次出现时则施加到下一个输入或输出文件。这条规则的例外是全局选项(例如冗长级) ,应首先规定。 不要混合输入和输出文件 - 首先指定所有输入文件,所有的输出文件。也不要混用属于不同的文件的选项。 所有选项仅适用于下一个输入或输出文件和文件之间重置。
    • 设置输出文件以64千比特/秒的视频比特率: ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
    • 强制输出文件为24 fps的帧速率: ffmpeg -i input.avi -r 24 output.avi
    • 强制输入文件的帧频(只有原始格式有效),以1FPS和每秒24帧的帧速率输出文件: ffmpeg -r 1 -i input.m2v -r 24 output.avi

    可能需要对原始输入文件的格式选项

  • 细节描述 在ffmpeg每个输出代码转换过程可以由以下图描述:

| | | | | input | demuxer | encoded data | decoder | file | ———> | packets | —–+ |__| |____| | v ____ | | | decoded | | frames | |__| ___ ______ | | | | | | | output | <——– | encoded data | <—-+ | file | muxer | packets | encoder |__| |______| ffmpeg的调用了libavformat库(含分流器)来读取输入文件并获得含有从他们编码的数据包。 当有多个输入文件,ffmpeg试图保持同步通过在任何活动的输入流跟踪最低的时间戳。 编码的数据包然后被传递到解码器(除非复制音频流被选择用于流,见进一步的说明)。解码器产生的未 压缩帧(原始视频/PCM音频/…),它可以进一步通过过滤进行处理(见下一节)。过滤后,这些帧被传递到 编码器,其编码它们并输出编码的数据包。最后这些被传递到复用器,并写入编码数据包到输出文件。

  • 过滤器 在编码之前,ffmpeg的可以处理原始音频和使用过滤器从libavfilter库视频帧。几个链接过滤器组成的 过滤器图,ffmpeg有两种filtergraphs的区分:简单和复杂。
    • 简单过滤图 简单filtergraphs是那些具有正好一个输入和输出,这两个相同的类型。另外,在上述图他们可以通过 简单地插入解码和编码之间的附加步骤来表示:


| | | | | decoded | | encoded data | | frames |\ _ | packets | |__| \ /||____| \ _____ / simple || | / encoder filtergraph | filtered |/ | frames | |___|

简单filtergraphs配置了每个流的筛选器选项(视频和音频分别-vf和-af别名)。一个简单的FilterGraph 动态视频可以看一下这样的例子:

代码语言:javascript
复制
 _______        _____________        _______        ________
|       |      |             |      |       |      |        |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______|      |_____________|      |_______|      |________|

需要注意的是一些过滤器改变框架属性而不是画面的内容。例如在实施例中的fps过滤器上方改变帧的数目, 但不触及帧内容。又如setpts滤波器,其仅设置时间戳否则传递帧不变。

  • 复杂过滤图

复杂filtergraphs是那些不能被描述为简单地施加到一个流的线性处理链。是这种情况下,例如,当图 具有多个输入和/或输出,或当输出流的类型和输入类型不同。它们可以被表示为以下图:

代码语言:javascript
复制
 _________
|         |
| input 0 |\                    __________
|_________| \                  |          |
             \   _________    /| output 0 |
              \ |         |  / |__________|
 _________     \| complex | /
|         |     |         |/
| input 1 |---->| filter  |\
|_________|     |         | \   __________
               /| graph   |  \ |          |
              / |         |   \| output 1 |
 _________   /  |_________|    |__________|
|         | /
| input 2 |/
|_________|

复杂filtergraphs配置有-filter_complex选项。注意,此选项是全局的,因为复杂FilterGraph动态, 就其性质,不能明确地与单个流或文件相关联。

该-lavfi选项相当于-filter_complex。

一个复杂FilterGraph动态的简单的例子是overlay滤波器,它有两个视频输入和一个视频输出,含有一个视频 重叠在另一个的上面。其音频对应的amix过滤器。

  • 流拷贝
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档