目前还没有选项ffmpeg
可以自动将所有流提取到适当的容器中,但当然可以手动进行。
您只需要知道要提取的格式的适当容器。
默认流选择只为每种流类型选择一个流,因此您必须使用该-map
选项手动映射每个流。
使用ffmpeg
orffprobe
您可以获取每个单独流中的信息,并且有多种格式(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
将流与某些常见格式的输出扩展名匹配的部分列表:
视频格式 |
扩展 |
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 |
西奥拉 |
.ogv/.ogg |
FFV1 |
.mkv |
几乎所有事 |
.mkv, .nut |
音频格式 |
扩展 |
AAC |
.m4a, .aac |
MP3 |
.mp3 |
PCM |
.wav |
沃尔比斯 |
.oga/.ogg |
作品 |
.opus、.oga/.ogg、.mp4 |
FLAC |
.flac、.oga/.ogg |
几乎所有事 |
.mka, .nut |
字幕格式 |
扩展 |
Subrip/SRT |
.srt |
变电站阿尔法/ASS |
。屁股 |