Maneira de linha de comando para achatar um .mov de áudio multicanais em um .Mov de áudio de canal único?

2

Advertência: Eu não estou muito familiarizado com os codecs de áudio e terminologia, então pode ser que eu não esteja usando as palavras corretas para descrever o que eu quero fazer. Eu tentei deixar isso claro.

Estou usando o Gravador de chamadas do Skype da ecamm. Ele grava em um arquivo MOV do QuickTime com dois fluxos de áudio. Um é o áudio gravado no microfone e o outro é o áudio gravado nos alto-falantes. Eles fornecem uma ferramenta chamada "Converter para Internet" que eles acompanham com suas Ferramentas de filme distribuição.

Eu tenho uma reunião toda semana que estou gravando, e estou procurando uma maneira de automatizar o processo de "achatamento" desses fluxos de áudio em um único fluxo para que eu possa compartilhar com os outros. O aplicativo "Converter em Internet" suporta apenas a conversão de um único arquivo por vez, e é um aplicativo GUI que funciona arrastando e soltando o arquivo para convertê-lo na janela principal do aplicativo.

Eu gostaria de encontrar uma maneira de obter o mesmo resultado final que o aplicativo "Convert to Internet" obtém, mas usando algo que executo na linha de comando (de preferência de uma caixa do Linux que eu possa fazer o trabalho e, em seguida, girar para baixo quando for feito).

Acho que o guia de produtos faz um bom trabalho ao explicar o processo que precisa acontecer. No caso em que meu divagar aqui não é tão claro.

Eu pesquisei a documentação do FFmpeg, que achei que seria o melhor candidato para isso. Eu encontrei o filtro amerge , mas os documentos fazem parecer que vai me dar apenas um único fluxo de áudio com 4 canais (esquerda e direita do primeiro fluxo e esquerda e direita do segundo fluxo). Como não é isso que quero, examinei o filtro amix , mas parece que funciona com fluxos de arquivos de entrada diferentes e não com vários fluxos de um único arquivo.

Qualquer ajuda que seja apontada na direção certa é muito apreciada.

Editar:

Eu achei que a saída de ffprobe para o arquivo com o qual estou trabalhando também pode ser útil.

$ 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
    
por M. Scott Ford 30.12.2015 / 22:35

2 respostas

2

Use amerge e faça o downmix com -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

Veja também FFmpeg Wiki: Manipulação de Canais de Áudio .

    
por 30.12.2015 / 23:16
0

Depois de pesquisar e fazer mais pesquisas, descobri o seguinte comando que parece funcionar.

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

Levou muito mais tempo para ser executado do que a resposta postada por LordNeckbeard, mas resultou em um arquivo menor. Então eu acho que agora tenho que decidir qual valor eu mais, o tempo ou o espaço (armazenamento).

    
por 31.12.2015 / 07:04