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 .
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
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 .
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).