如何从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 中选择所有aaudio 流。使用 -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 音轨提取

使用 ffmpeg 和 python 将视频中的所有音频流提取到单独的音频文件中

如何使用 ffmpeg 从 MPEG-4 文件中提取音频 [关闭]

当我使用 ffmpeg 从视频中提取音频时,出现错误

如何使用 ffmpeg 提取 8khz 的音频

FFmpeg从视频中提取音频