提取所有音轨/流
此操作将所有音频放入一个文件中:
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
选择了第四个音频流(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
列出要提取的声道。
- 有关音频声道布局名称(用于
channel_layout
)和声道名称(用于channels
),请参见ffmpeg -layouts
。
- 在过滤时无法使用流复制模式(
-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:Map。
错误
无效的音频流。需要恰好一个MP3音频流。
MP3仅支持1个音频流。此错误意味着您正在尝试将多个音频流放入MP3中。这也可能意味着您正在尝试将非MP3音频放入MP3中。
WAVE文件只有一个流
类似于上述情况。
无法在流#0中找到编解码器的标记,容器当前不支持该编解码器
您正在尝试将一个音频格式放入不支持它的输出中,例如将PCM(WAV)放入MP4中。
删除-c copy
,选择其他输出格式(更改文件名扩展名)或手动选择编码器(例如-c:a aac
)。
请参见容器格式比较表。
无法为输出文件#0编写标题(编解码器参数不正确?):无效的参数
这是一个无用的、通用的错误。实际的、有信息的错误应该紧接在这个通用错误消息之前。