通过命令行方式将多通道音频 .Mov 展平为单通道音频 .Mov?

通过命令行方式将多通道音频 .Mov 展平为单通道音频 .Mov?

警告:我不太熟悉音频编解码器和术语,因此可能我没有使用正确的词语来描述我想要做的事情。我已尝试将其说清楚。

我正在使用 ecammSkype 通话记录器。它会录制到 QuickTime MOV 文件中,其中包含两个音频流。一个是从麦克风录制的音频,另一个是从扬声器录制的音频。他们提供了一个名为“转换为互联网”的工具,随他们的影片工具分配。

我每周都要录制一次会议,我正在寻找一种方法来自动将这些音频流“扁平化”为单个流,以便我可以与其他人共享。“转换为互联网”应用程序仅支持一次转换单个文件,它是一个 GUI 应用程序,通过将要转换的文件拖放到应用程序的主窗口来工作。

我想找到一种方法来实现与“转换为互联网”应用程序相同的最终结果,但是通过使用我在命令行上运行的某些东西(最好是从一个 Linux 框中运行,我可以启动它来执行该作业,然后在完成后关闭它)。

我觉得产品指南很好地解释了需要发生的过程。如果我在这里喋喋不休的话,可能不太清楚。

我深入研究了 FFmpeg 的文档,我认为它是实现这一目标的最佳选择。我找到了过滤器amerge,但文档听起来好像它只会给我一个带有 4 个通道的音频流(第一个流的左声道和右声道,第二个流的左声道和右声道)。由于这不是我想要的,我查看了过滤器amix,但它似乎适用于来自不同输入文件的流,而不是来自单个文件的多个流。

任何能指明正确方向的帮助都将不胜感激。

编辑:

ffprobe我认为我正在处理的文件的输出可能也很有用。

$ ffprobe input.mov
ffprobe version 2.8.3 Copyright (c) 2007-2015 the FFmpeg developers
  built with Apple LLVM version 7.0.0 (clang-700.1.76)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2015-09-18 17:04:00
  Duration: 01:07:51.64, start: 0.000000, bitrate: 1503 kb/s
    Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 43 kb/s (default)
    Metadata:
      creation_time   : 2015-09-18 17:04:00
      handler_name    : Apple Alias Data Handler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default)
    Metadata:
      creation_time   : 2015-09-18 17:04:00
      handler_name    : Apple Alias Data Handler
    Stream #0:2(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1381 kb/s, SAR 1:1 DAR 16:9, 19.63 fps, 14.42 tbr, 1k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2015-09-18 17:04:00
      handler_name    : Apple Alias Data Handler
      encoder         : H.264

答案1

使用amerge然后将其混合为-ac

ffmpeg -i input -filter_complex "[0:a:0][0:a:1]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -ac 1 output

另请参阅FFmpeg Wiki:音频通道操作

答案2

经过一番摆弄和搜索后,我找到了以下命令,它似乎可以工作。

ffmpeg -i input.mov -filter_complex "[0:0][0:1] amix=inputs=2[audio]" \
-map a output.mov

它比 LordNeckbeard 发布的答案运行时间长得多,但生成的文件更小。所以我想我现在必须决定我更看重哪个,时间还是(存储)空间。

相关内容