ffmpeg 常用命令大全

FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。

本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。

FFMPEG 目录及作用
libavcodec: 提供了一系列编码器的实现。
libavformat: 实现在流协议,容器格式及其本IO访问。
libavutil: 包括了hash器,解码器和各利工具函数。
libavfilter: 提供了各种音视频过滤器。
libavdevice: 提供了访问捕获设备和回放设备的接口。
libswresample: 实现了混音和重采样。
libswscale: 实现了色彩转换和缩放工能。
FFMPEG基本概念
在讲解 FFMPEG 命令之前,我们先要介绍一些音视频格式的基要概念。

音/视频流
在音视频领域,我们把一路音/视频称为一路流。如我们小时候经常使用VCD看港片,在里边可以选择粤语或国语声音,其实就是CD视频文件中存放了两路音频流,用户可以选择其中一路进行播放。

容器
我们一般把 MP4、 FLV、MOV等文件格式称之为容器。也就是在这些常用格式文件中,可以存放多路音视频文件。以 MP4 为例,就可以存放一路视频流,多路音频流,多路字幕流。

channel
channel是音频中的概念,称之为声道。在一路音频流中,可以有单声道,双声道或立体声。

FFMPEG 命令
我们按使用目的可以将 FFMPEG 命令分成以下几类:

基本信息查询命令
录制
分解/复用
处理原始数据
滤镜
切割与合并
图/视互转
直播相关
除了 FFMPEG 的基本信息查询命令外,其它命令都按下图所示的流程处理音视频。


| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| || |
v
_________
| |
| decoded |
| frames |
|
|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|
| |___________|
ffmpeg调用libavformat库(包含demuxers)来读取输入文件并获取包含编码数据的数据包。 当有多个输入文件时,ffmpeg会尝试通过跟踪任何活动输入流上的最低时间戳来使其保持同步。

然后将编码的数据包传送给解码器(除非为数据流选择了流拷贝,请参阅进一步描述)。 解码器产生未压缩的帧(原始视频/ PCM音频/ …),可以通过滤波进一步处理(见下一节)。 在过滤之后,帧被传递到编码器,编码器并输出编码的数据包。 最后,这些传递给复用器,将编码的数据包写入输出文件。

默认情况下,ffmpeg只包含输入文件中每种类型(视频,音频,字幕)的一个流,并将其添加到每个输出文件中。 它根据以下标准挑选每一个的“最佳”:对于视频,它是具有最高分辨率的流,对于音频,它是具有最多channel的流,对于字幕,是第一个字幕流。 在相同类型的几个流相等的情况下,选择具有最低索引的流。

您可以通过使用-vn / -an / -sn / -dn选项来禁用某些默认设置。 要进行全面的手动控制,请使用-map选项,该选项禁用刚描述的默认设置。

下面我们就来详细介绍一下这些命令。

基本信息查询命令
FFMPEG 可以使用下面的参数进行基本信息查询。例如,想查询一下现在使用的 FFMPEG 都支持哪些 filter,就可以用 ffmpeg -filters 来查询。详细参数说明如下:

参数 说明
-version 显示版本。
-formats 显示可用的格式(包括设备)。
-demuxers 显示可用的demuxers。
-muxers 显示可用的muxers。
-devices 显示可用的设备。
-codecs 显示libavcodec已知的所有编解码器。
-decoders 显示可用的解码器。
-encoders 显示所有可用的编码器。
-bsfs 显示可用的比特流filter。
-protocols 显示可用的协议。
-filters 显示可用的libavfilter过滤器。
-pix_fmts 显示可用的像素格式。
-sample_fmts 显示可用的采样格式。
-layouts 显示channel名称和标准channel布局。
-colors 显示识别的颜色名称。
接下来介绍的是 FFMPEG 处理音视频时使用的命令格式与参数。

命令基本格式及参数
下面是 FFMPEG 的基本命令格式:

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

ffmpeg 通过 -i 选项读取输任意数量的输入“文件”(可以是常规文件,管道,网络流,抓取设备等,并写入任意数量的输出“文件”。

原则上,每个输入/输出“文件”都可以包含任意数量的不同类型的视频流(视频/音频/字幕/附件/数据)。 流的数量和/或类型是由容器格式来限制。 选择从哪个输入进入到哪个输出将自动完成或使用 -map 选项。

要引用选项中的输入文件,您必须使用它们的索引(从0开始)。 例如。 第一个输入文件是0&#

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值