Isso pode ser feito de maneira relativamente fácil com o FFmpeg. Se você estiver usando o Xenial Xerus LTS, simplesmente execute o seguinte:
sudo apt-get install ffmpeg
Se, no entanto, você estiver executando o Trusty Tahr LTS, seria melhor criar o seu próprio usando essas instruções simples de copiar e colar.
Para demonstrar a técnica, criei dois arquivos de teste:
-
Este arquivo chamado
test.mp4
tem o fluxo h.264 que você deseja e está no seguinte formato, anote cuidadosamente os identificadores de fluxo:Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661) ... Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D)...
-
Esses arquivos chamados
test1.webm
tem o fluxo Opus que você deseja e está no seguinte formato, mais uma vez, observe cuidadosamente os identificadores de fluxo:Stream #0:0: Video: vp9 (Profile 0)... Stream #0:1: Audio: opus, 48000 Hz, stereo, fltp (default)
Observação: No seu exemplo, o contêiner de webm pode ter apenas um fluxo de áudio sem nenhum fluxo de vídeo . Neste caso, seu fluxo de áudio Opus teria o identificador Stream #0:0
.
Lembre-se também de que no momento você não pode colocar o Opus Audio em um contêiner mp4, mas ele fica muito feliz em um contêiner mkv. O seguinte é o método mais simples:
ffmpeg -i test.mp4 -i test1.webm -c copy -map 0:0 -map 1:1 -shortest out.mkv
Isso realiza o seguinte:
-
-c copy
copia os codecs sem transcodificação -
-map 0:0
selecione o primeiro arquivo de entrada: 1º fluxo = o fluxo h.264 desejado -
-map 1:1
seleciona o segundo arquivo de entrada: 2º fluxo = o fluxo de Opus desejado -
-shortest
interrompe a codificação quando o fluxo de entrada mais curto termina
Para métodos mais elaborados que serão necessários com arquivos multi-stream , veja o link em minhas referências ...
Referências: