FFmpeg库之ffmpeg

ffmpeg命令行使用

ffmpeg是一个通用的媒体转换器。它可以读取各种输入(包括实时抓取/录制设备),对其进行过滤,并将它们转码为多种输出格式。

语法格式:

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

基本命令

命令名称 作用
-version 显示ffmpeg版本
-formats 显示可用的格式
-demuxers 显示可用的解复用器
-protocols 显示可用的协议
-muxers 显示可用的复用器
-filters 显示可用的过滤器
-devices 显示可用的设备
-pix_fmts 显示可用的像素格式
-codecs 显示所有的编解码器
-sample_fmts 显示可用的采样格式
-decoders 显示可用的解码器
-layouts 显示声道名称
-encoders 显示所有的编码器
-colors 显示识别的颜色名称
-bsfs 显示比特流filter

选择流 -map选项

-map选项用于手动控制每个输出文件中的流选择。用户可以跳过-map,让ffmpeg执行如下所述的自动流选择。-vn/-an/-sn/-dn选项可用于分别跳过包含视频、音频、字母和数据流。

使用格式如下:

-map 文件索引位置:流索引位置
-map 文件索引位置:流的类型
-map 文件索引位置:流的类型:流的索引位置

流类型:

  • a 表示音频流
  • v 表示视频流
  • s 表示字幕流
  • d 表示数据流
  • t 表示附件六
    注意:索引位置从0开始

在特定输出文件没有任何映射选项的情况下,ffmpeg检查输出格式以检查哪种类型的流可以包含在其中,即视频,音频或字母。对于每个可接受的流类型,ffmpeg将从所有输入中选择一个可用的流。
它将根据以下标准选择该流:

  • 对于视频来说,它是分辨率最高的流媒体
  • 对于音频,它是具有最多通道的流
  • 对于字母,这是找到的第一个字幕流,但有一个警告,输出的格式的默认字幕编码器可以是基于文本的,也可以是基于图像的,并且只会选择相同类型的字幕流
  • 在相同类型的多个流速率相等的情况下,选择索引最低的流
    注意:数据或附件流不会自动选择,只能使用-map包含

例如:假设有如下几个视频文件

input file 'A.avi'
		stream 0: video 640x360
		stream 1: audio 2 channels

input file 'B.mp4'
		stream 0: video 1920x1080
		stream 1: audio 2 channels
		stream 2: subtitles (text)
		stream 3: audio 5.1 channels
		stream 4: subtitles (text)

input file 'C.mkv'
		stream 0: video 1280x720
		stream 1: audio 2 channels
		stream 2: subtitles (image)

执行如下命令
ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

指定了3个输出文件,对于前2个,没有设置-map选项,因此ffmpeg将自动为这两个文件选择流(会选择最好的那个流)。
out1.mkv是一个Matroska容器文件,它接受视频、音频和字幕流,因此ffmpeg将尝试在每种类型中选择一种。
对于视频,它将从B.mp4中选择流0,它所在所有输入视频流中具有最高的分辨率。
对于音频,它将从B.mp4中选择流3,因为它有最多的通道。
对于字幕,它将从B.mp4中选择流2,这是A.avi和B.mp4之间的第一个字幕流。
out2.wav只接受音频流,所以只选择B.mp4的流3。
out3.Mov,由于设置了-map选项,因此不会发生自动流选择。-map 1:a选项将选择来自第二个输入B.mp4的所有音频流。此输出文件中不会包含其他流。
对于前两个输出,所有包含的流都将被转码。所选择的编码器将是每个输出格式注册的默认编码器,它可能与所选输入流的编码器不匹配。
对于第三个速出,音频流的编解码器选项已经设置为复制,因此不会发生或可能发生解码-过滤-编码操作。所选流的数据包应从输入文件传送,并在输出文件中进行混合。

主要命令

命令名称 作用
-f fmt (input/output) 强制输入或输出文件格式。通常会自动检测输入文件的格式,并从输出文件的文件扩展名中猜测格式,因此在大多数情况下不需要此选项
-i url (input) 输入文件的URL
-stream_loop number (input) 设置输入流循环的次数。循环0表示没有循环,循环-1表示无限循环
-t duration (input/output) 当用作输入选项(在-i之前)时,限制从输入文件读取数据的持续时间。当用作输出选项(在url之前)时,在其持续时间达到duration后停止写入输出。duration必须是时间持续时间规格,请参阅ffmpeg-utils(1)手册中的时间持续时间部分。
-to position (input/output) 在该位置停止写入输出或读取输出-to和-t是互斥的,-t具有优先级
-ss positon (input/output) 当用作输入选项(在-i前)时,在此输入文件中查找位置。当用作输出选项(在url前)时,解码但丢弃输入,直到时间戳到达指定位置</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yerennuo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值