提取所有音轨/流
这会将所有音频放入一个文件中:
ffmpeg -i input.mov -map 0:a -c copy output.mov
-map 0:a
仅选择所有音频流。视频和字幕将被排除在外。
-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
以启用流复制模式。
提取某个频道
使用通道分割过滤器。从立体声输入获取右前 (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 个字幕、1 个数据)。
-vn
是一个旧的遗留选项。它从默认流选择行为中排除视频。因此,音频、字幕和数据仍会自动选择,除非用 、 或 告知-an
不-sn
要这样做-dn
。
-map
更复杂但更灵活和有用。-map
禁用默认流选择行为,并且ffmpeg
仅包含您通过-map
选项告诉它的内容。-map
也可用于排除某些流或流类型。例如,-map 0 -map -0:v
将包括除所有视频之外的所有流。
有关更多示例,请参阅FFmpeg Wiki:地图。
错误
无效的音频流。只需要一个 MP3 音频流。
MP3 仅支持 1 个音频流。该错误意味着您试图将超过 1 个音频流放入 MP3。这也可能意味着您正在尝试将非 MP3 音频放入 MP3。
WAVE 文件只有一个流
与上面类似。
在流 #0 中找不到编解码器的标记,容器中当前不支持编解码器
您正在尝试将音频格式放入不支持它的输出中,例如将 PCM (WAV) 放入 MP4。
删除-c copy
,选择不同的输出格式(更改文件扩展名),或手动选择编码器(例如-c:a aac
)。
请参阅容器格式的比较。
无法为输出文件 #0 写入标头(编解码器参数不正确?):参数无效
这是一个无用的通用错误。实际的、信息丰富的错误应立即出现在此通用错误消息之前。