提取所有音轨/流
这会将所有音频放入一个文件中:
ffmpeg -i input.mov -map 0:a -c copy output.mov
提取特定的音轨/流
提取音频流#4的示例:
ffmpeg -i input.mkv -map 0:a:3 -c copy output.m4a
提取并重新编码音频/更改格式
与上面的示例类似,但没有-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 以启用stream copy 模式。
提取某个频道
使用channelsplit filter。从立体声输入获取右前 (FR) 通道的示例:
ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
-
channel_layout 是输入的通道布局。它不会自动检测到,因此您必须提供布局名称。
-
channels 列出了您要提取的频道。
- 有关音频通道布局名称(对于
channel_layout)和通道名称(对于 channels),请参见 ffmpeg -layouts。
- 过滤时不能使用stream copy模式(
-c copy),所以必须对音频进行重新编码。
- 有关更多示例,请参阅 FFmpeg Wiki: Audio Channels。
-map 和 -vn 有什么区别?
ffmpeg 具有默认的 stream selection 行为,它将为每种流类型选择 1 个流(1 个视频、1 个音频、1 个字幕、1 个数据)。
-vn 是一个旧的遗留选项。它从默认流选择行为中排除视频。因此音频、字幕和数据仍会自动选择,除非使用 -an、-sn 或 -dn 告知不要这样做。
-map 更复杂但更灵活和有用。 -map 禁用默认流选择行为,ffmpeg 将仅包含您使用 -map 选项告诉它的内容。 -map 也可用于排除某些流或流类型。例如,-map 0 -map -0:v 将包括所有流除了所有视频。
更多示例请参见FFmpeg Wiki: Map。
错误
无效的音频流。只需要一个 MP3 音频流。
MP3 仅支持 1 个音频流。该错误意味着您试图将超过 1 个音频流放入 MP3。这也可能意味着您正在尝试将非 MP3 音频放入 MP3。
WAVE 文件只有一个流
与上面类似。
在流 #0 中找不到编解码器的标记,容器当前不支持编解码器
您正在尝试将音频格式放入不支持它的输出中,例如将 PCM (WAV) 放入 MP4。
移除-c copy,选择不同的输出格式(更改文件扩展名),或者手动选择编码器(如-c:a aac)。
见comparison of container formats。
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
这是一个无用的通用错误。实际的、信息丰富的错误应紧接在此通用错误消息之前。