segunda-feira, 7 de maio de 2012

Duplicando o áudio de um vídeo

Na dica sobre nomalização de áudio de vídeos já embutimos recursos para duplicar o áudio de arquivos onde a trilha estéreo tem um dos lados mudos, só que agora retornamos ao assunto para tratar exclusivamente este problema e sem a utilização de programas externos.

ffmpeg -f lavfi -i "amovie=arquivo_original.flv,pan=stereo: c0=c1: c1=c1" -i arquivo_original.flv -map 0:0 -map 1:0 -vcodec copy -acodec libfaac arquivo_final.mp4

Para entender melhor a sintaxe:

A primeira parte do comando causa bastante estranheza, mas tem uma explicação. -f lavfi -i "amovie=arquivo_original.flv,pan=stereo: c0=c1: c1=c1" indica para o FFMPEG que o arquivo de entrada na verdade é um filtro do libav e logo em seguida passa as opções para o mesmo. Neste caso é a biblioteca que abre o arquivo e não o FFMPEG em si, por isso a sintaxe um pouco estranha. pan=stereo: c0=c1: c1=c1 indica como será o balanceamento do áudio, onde c0 é o canal esquerdo e c1 é o canal direito. Como queremos que o canal direito seja usado nos dois lados do áudio indicamos c0=c1 e c1=c1.

O resto é familiar. -i arquivo_original.flv abre o segundo arquivo que servirá como fonte de vídeo, -map 0:0 -map 1:0 aponta qual stream será o de vídeo e o de áudio, -vcodec copy -acodec libfaac os codecs utilizados e por fim o nome do arquivo final.

3 comentários:

  1. Olá Micael,

    Tenho uma dúvida aqui sobre um processo que me parece semelhante ao descrito:

    Tenho o seguinte material em mãos:
    Duration: 00:00:32.46, bitrate: 49561 kb/s
    Stream #0.0(eng): Audio: pcm_s16le, 192000 Hz, 2 channels, s16, 6144 kb/s
    Stream #0.1(eng): Video: h264 (Main), yuv420p, 1920x1080p, 43408 kb/s, 29.97 fps

    Gostaria de saber como á partir desta fonte gerar um container MXF ou MOV com 4 canais com a resolução de áudio em 16 bit, onde o canal 1 e 2 seriam stereo e o 3 e 4 copia do 1 e 2 e ainda, alinhar o nível de áudio destes 4 canais para -12dBfs mantendo a frequência de 48Khz

    Em paralelo o canal de vídeo manter mesma resolução (1920x1080), framerate (29.97), mas o bitrate ser 50MB/s e o -vcodec MPEG HD422 (MPEG–2-4:2:2)ou DVCPRO100

    É possível ser feito isso? Tem algum GUI para o ffmpeg ou ffmbc que me permite amigavelmente definir estas características de output? Pois no "command line" estou lendo muito sobre e não consegui compor um comando sensato, uso plataforma Windows.

    Obrigado desde já.

    ResponderExcluir
    Respostas
    1. Desculpe a demora para a resposta.

      Até tentei buscar uma solução para o problema, mas aparentemente o maior problema seria fazer o ffmpeg codificar vídeo em MPEG HD422 ou DVCPRO100.

      Porém as mesmas buscas no Google apontaram para um projeto que eu não conhecia, o ffmbc, um build do ffmpeg focado especificamente em aplicações do mercado profissional de broadcast, suportando estes formatos de vídeo e até mesmo recursos que eu procurava há um bom tempo no ffmpeg, como queimar legendas diretamente num vídeo: http://code.google.com/p/ffmbc/

      Aparentemente na seção de downloads já existem alguns builds prontos para Windows, o que facilitaria no seu caso. Eu uso OS X, o que pode ser uma dor de cabeça um pouco maior já que há a necessidade de compilar o código. Precisaria de mais algum tempo para explorar isso.

      Excluir
  2. Ola Micael,

    como posso duplicar o audio de um video MXF tipo pegar os 4 audio e replicar para que fique com 8.
    sendo C5=C1 C6=C2 C7=C3 C8=C4
    Sem interferir, alterar o video

    ResponderExcluir