Combine vídeo h.264 e fluxo de áudio opus em um único arquivo de vídeo

3

Eu tenho um arquivo de vídeo codificado como H.264 em um arquivo mp4 e áudio codificado como Opus em um arquivo webm. Qual seria a melhor maneira de combinar esses arquivos em um mp4? Não quero codificar novamente os arquivos e perder qualidade.

    
por Qwertie 07.05.2016 / 04:55

2 respostas

3

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:

  1. 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)...
    
  2. 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:

  1. -c copy copia os codecs sem transcodificação
  2. -map 0:0 selecione o primeiro arquivo de entrada: 1º fluxo = o fluxo h.264 desejado
  3. -map 1:1 seleciona o segundo arquivo de entrada: 2º fluxo = o fluxo de Opus desejado
  4. -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:

por andrew.46 07.05.2016 / 09:15
1

Como o Opus não está em conformidade com o padrão de contêineres MP4 e o H.264 está fora de lugar nos contêineres WebM (um MKV restrito), é necessário usar o MKV e esperar que os players suportem faixas de áudio Opus.

Remuxing pode ser tão simples quanto abrir a GUI do Mkvmerge arrastando ambos os arquivos e selecionando as faixas específicas que você deseja ter na saída. Mas ninguém impede que você pesquise todas as opções envolvidas no utilitário de linha de comando (a nova GUI ainda deve ter a opção de copiar o comando inteiro) ou aprender a usar o ffmpeg.

    
por LiveWireBT 07.05.2016 / 13:55