提取所有音频轨道/流
这将所有音频放入一个文件:
ffmpeg -i input.mov -map 0:a -c copy output.mov
-map 0:只选择所有音频流。视频和字幕将被排除在外。
-c copy启用流复制模式。这复制音频,不重新编码。如果你想重新编码音频,移除-c copy。
选择一种支持音频格式的输出格式。参见容器格式的比较。
提取一个特定的音轨/流
提取音频流#4的例子:
ffmpeg -i input.mkv -map 0:a:3 -c copy output.m4a
-map 0:a:3只选择音频流#4 (ffmpeg从0开始计数)。
-c copy启用流复制模式。这复制音频,不重新编码。如果你想重新编码音频,移除-c copy。
选择一种支持音频格式的输出格式。参见容器格式的比较。
提取并重新编码音频/更改格式
类似于上面的例子,但是没有-c copy。各种各样的例子:
ffmpeg -i input.mp4 -map 0:a output.mp3
ffmpeg -i input.mkv -map 0:a output.m4a
ffmpeg -i input.avi -map 0:a -c:a aac output.mka
ffmpeg -i input.mp4 output.wav
单独提取所有音频流
本例中的输入有4个音频流。每个音频流将输出为单个的、单独的文件。
ffmpeg -i input.mov -map 0:a:0 output0.wav -map 0:a:1 output1.wav -map 0:a:2 output2.wav -map 0:a:3 output3.wav
可选地在每个输出文件名前添加-c copy以启用流复制模式。
提取某个通道
使用channelsplit过滤器。从立体声输入中获得右前(FR)通道的示例:
ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
Channel_layout是输入的通道布局。它不会自动检测到,因此您必须提供布局名称。
Channels列出要提取的通道。
请参阅ffmpeg -layouts以获得音频通道布局名称(用于channel_layout)和通道名称(用于channels)。
使用流复制模式(-c copy)在过滤时是不可能使用的,因此音频必须重新编码。
更多示例请参见FFmpeg Wiki:音频通道。
-map和-vn有什么区别?
Ffmpeg有一个默认的流选择行为,每个流类型选择一个流(1个视频,1个音频,1个字幕,1个数据)。
-vn是一个旧的遗留选项。它将视频从默认流选择行为中排除。因此,音频、字幕和数据仍然会自动选择,除非被告知不要使用-an、-sn或-dn。
-map更复杂,但更灵活和有用。-map将禁用默认的流选择行为,ffmpeg将只包括你用-map选项告诉它的内容。-map也可以用来排除某些流或流类型。例如,-map 0 -map -0:v将包括除所有视频外的所有流。
更多示例请参见FFmpeg Wiki: Map。
错误
无效的音频流。只需要一个MP3音频流。
MP3只支持1个音频流。该错误意味着您正在尝试将多个音频流放入MP3。它也可以表示您正在尝试将非MP3音频转换为MP3。
WAVE文件只有一个流
类似于上面。
无法在流#0中找到编解码器的标记,编解码器目前在容器中不支持
您正在尝试将音频格式放入不支持该格式的输出中,例如将PCM (WAV)放入MP4。
删除-c副本,选择不同的输出格式(更改文件扩展名),或手动选择编码器(如-c:a aac)。
参见容器格式的比较。
无法写入输出文件#0的头(不正确的编解码器参数?):无效的参数
这是一个无用的通用错误。实际的、信息丰富的错误应该立即出现在这个通用错误消息之前。