ffmpeg 中还没有选项可以自动将所有流提取到适当的容器中,但当然可以手动执行。
您只需要知道要提取的格式的适当容器。
默认stream selection 只为每种流类型选择一个流,因此您必须使用-map 选项手动映射每个流。
使用ffmpeg 或ffprobe,您可以在每个单独的流中获取信息,并且有一个wide variety of formats(xml、json、cvs 等)可以满足您的需求。
ffmpeg例子
ffmpeg -i input.mkv
结果输出(我删掉了一些额外的东西,流编号和格式信息是重要的):
Input #0, matroska,webm, from 'input.mkv':
Metadata:
Duration: 00:00:05.00, start: 0.000000, bitrate: 106 kb/s
Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Stream #0:1: Audio: vorbis, 44100 Hz, mono, fltp (default)
Stream #0:2: Audio: aac, 44100 Hz, mono, fltp (default)
Stream #0:3: Audio: flac, 44100 Hz, mono, fltp (default)
Stream #0:4: Subtitle: ass (default)
ffprobe例子
ffprobe -v error -show_entries stream=index,codec_name,codec_type input.mkv
结果输出:
[STREAM]
index=0
codec_name=h264
codec_type=video
[/STREAM]
[STREAM]
index=1
codec_name=vorbis
codec_type=audio
[/STREAM]
[STREAM]
index=2
codec_name=aac
codec_type=audio
[/STREAM]
[STREAM]
index=3
codec_name=flac
codec_type=audio
[/STREAM]
[STREAM]
index=4
codec_name=ass
codec_type=subtitle
[/STREAM]
使用上述命令之一的信息:
ffmpeg -i input.mkv \
-map 0:v -c copy video_h264.mkv \
-map 0:a:0 -c copy audio0_vorbis.oga \
-map 0:a:1 -c copy audio1_aac.m4a \
-map 0:a:2 -c copy audio2.flac \
-map 0:s -c copy subtitles.ass
在这种情况下,上面的例子是一样的:
ffmpeg -i input.mkv \
-map 0:0 -c copy video_h264.mkv \
-map 0:1 -c copy audio0_vorbis.oga \
-map 0:2 -c copy audio1_aac.m4a \
-map 0:3 -c copy audio2.flac \
-map 0:4 -c copy subtitles.ass
将流与某些常见格式的输出扩展匹配的部分列表:
| Video Format |
Extensions |
| H.264 |
.mp4, .m4v, .mov, .h264, .264 |
| H.265/HEVC |
.mp4, .h265, .265 |
| VP8/VP9 |
.webm |
| AV1 |
.mp4 |
| MPEG-4 |
.mp4, .avi |
| MPEG-2 |
.mpg, .vob, .ts |
| DV |
.dv, .avi, .mov |
| Theora |
.ogv/.ogg |
| FFV1 |
.mkv |
| Almost anything |
.mkv, .nut |
| Audio Format |
Extensions |
| AAC |
.m4a, .aac |
| MP3 |
.mp3 |
| PCM |
.wav |
| Vorbis |
.oga/.ogg |
| Opus |
.opus, .oga/.ogg, .mp4 |
| FLAC |
.flac, .oga/.ogg |
| Almost anything |
.mka, .nut |
| Subtitle Format |
Extensions |
| Subrip/SRT |
.srt |
| SubStation Alpha/ASS |
.ass |