如何从mov文件中提取ffmpeg中的音频
Posted
技术标签:
【中文标题】如何从mov文件中提取ffmpeg中的音频【英文标题】:How to extract audio in ffmpeg from mov file 【发布时间】:2020-11-23 20:36:30 【问题描述】:我有一个带有.mov
容器的 ProRes422 文件:FINAL.mov
。我想将音轨保存到一个新文件中(没有编码或任何东西,只需将其保存)。在 QuickTime 中有一个选项可以保存“仅音频”--
在 ffmpeg
中执行此操作的等效方法是什么?从基础研究来看,似乎是这样的:
$ ffmpeg \
-i FINAL.mov \
-vn # remove video? \
?? # keep audio \
MYAUDIO_FINAL.mov
$ ffmpeg -i
给出:
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'FINAL.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2016-01-11T19:23:10.000000Z
com.apple.finalcutstudio.media.uuid: CE6F1278-8982-4B98-9E46-AE7C329436EF
com.apple.quicktime.player.movie.audio.gain: 1.000000
com.apple.quicktime.player.movie.audio.treble: 0.000000
com.apple.quicktime.player.movie.audio.bass: 0.000000
com.apple.quicktime.player.movie.audio.balance: 0.000000
com.apple.quicktime.player.movie.audio.pitchshift: 0.000000
com.apple.quicktime.player.movie.audio.mute:
com.apple.quicktime.player.movie.visual.brightness: 0.000000
com.apple.quicktime.player.movie.visual.color: 1.000000
com.apple.quicktime.player.movie.visual.tint: 0.000000
com.apple.quicktime.player.movie.visual.contrast: 1.000000
com.apple.quicktime.player.version: 7.6.6 (7.6.6)
com.apple.quicktime.version: 7.7.3 (2826.24) 0x7738000 (Mac OS X, 10.9.5, 13F34)
Duration: 00:01:59.58, start: 0.000000, bitrate: 154872 kb/s
Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le(bt709, progressive), 1920x1080, 153307 kb/s, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 23976 tbn, 23976 tbc (default)
Metadata:
creation_time : 2016-01-11T19:23:10.000000Z
handler_name : Apple Alias Data Handler
encoder : Apple ProRes 422 (HQ)
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s (default)
Metadata:
creation_time : 2016-01-11T19:23:10.000000Z
handler_name : Apple Alias Data Handler
还有一个带有 8 通道音频的文件:
Duration: 01:10:12.00, start: 0.000000, bitrate: 173231 kb/s
Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le(bt709, progressive), 1920x1080, 164007 kb/s, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 24k tbn, 24k tbc (default)
Metadata:
handler_name : Apple Alias Data Handler
encoder : Apple ProRes 422 (HQ)
Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (FL), s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
Stream #0:2(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (FR), s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
Stream #0:3(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
Stream #0:4(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (LFE), s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
Stream #0:5(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (BL), s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
Stream #0:6(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (BR), s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
Stream #0:7(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (DL), s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
Stream #0:8(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 1 channels (DR), s32 (24 bit), 1152 kb/s (default)
Metadata:
handler_name : Apple Alias Data Handler
At least one output file must be specified
【问题讨论】:
@llogan 是的,它应该保持原样。换句话说,5.1 音轨应该保持 5.1(但 mov 不会自动这样做吗?)。 @llogan 我想我能从技术上回答这个问题的唯一方法是,如果音频再次“交换”到视频中,当完整的 mov 文件被 md5 编辑时,它应该具有相同的校验和。 @llogan 已更新...虽然会有各种文件输入,但都是.mov
。
【参考方案1】:
ffmpeg -i input.mov -map 0:a -c copy output.mov
-map 0:a
从输入#0
中选择所有a
audio 流。使用 -map
会禁用默认的 stream selection 行为,否则默认情况下会为每种流类型选择一个流。
这使用stream copy模式(-c copy
),所以它就像复制和粘贴,不会发生重新编码。
【讨论】:
谢谢,我又发布了一个 8 声道音频,也可以吗? 实际上,这是您编辑的另一个答案:***.com/a/27413824/651174。这两种方法有什么区别? @David542-vn
是一个旧选项,我发现它不如-map
有用。 -vn
禁用视频,但默认流选择仍将为每种流类型选择 1 个流,因此链接中的命令仍将包含字幕和数据流(如果它们存在并由输出格式支持)。它也只会选择 1 个音频流。而-map 0:a
将只产生音频流,它将包括所有音频流(来自输入#0)。至于 8 单声道流输入,我的答案中的相同命令也可以。
知道了,谢谢你的回答。出于好奇,为什么音频流是#0
?有什么流是什么的顺序吗?例如,为什么不是 Audio=1 和 Video=2 (只是编造一些东西,但如果你能简单地解释一下轨道是如何编号的,那就太好了!)
@David542 FFMPEG mux video and audio (from another video) - mapping issue 解释了流和-map
语法。以上是关于如何从mov文件中提取ffmpeg中的音频的主要内容,如果未能解决你的问题,请参考以下文章
使用 ffmpeg 和 python 将视频中的所有音频流提取到单独的音频文件中