2

Предостережение: я не очень знаком с аудиокодеками и терминологией, поэтому может случиться так, что я не использую правильные слова для описания того, что я хочу сделать. Я пытался прояснить это.

Я использую регистратор звонков ecamm для Skype. Он записывает в файл QuickTime MOV с двумя аудиопотоками. Один - это звук, записанный с микрофона, а другой - звук, записанный с динамиков. Они предоставляют инструмент под названием "Преобразовать в Интернет", который поставляется вместе с дистрибутивом Movie Tools.

Каждую неделю я записываю собрание, и я ищу способ автоматизировать процесс "объединения" этих аудиопотоков в один поток, чтобы я мог поделиться с другими. Приложение "Преобразовать в Интернет" поддерживает преобразование только одного файла за раз, и это приложение с графическим интерфейсом, которое работает путем перетаскивания файла для преобразования в главное окно приложения.

Я хотел бы найти способ достичь того же конечного результата, который получает приложение "Преобразовать в Интернет", но используя что-то, что я запускаю в командной строке (предпочтительно из коробки 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

2 ответа2

2

Используйте 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: Управление аудиоканалами.

0

После того, как я покопался и начал больше искать, я пришел к следующей команде, которая, кажется, работает.

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

Это заняло намного больше времени, чем ответ, опубликованный LordNeckbeard, но в результате получился файл меньшего размера. Так что теперь я должен решить, что я ценю больше: время или пространство для хранения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .