FFMPEG para conversão em MP4 - Uso básico

Como converter alguns formatos de áudio e vídeo para formato MP4 de forma básica e prática.

[ Hits: 12.264 ]

Por: Saulo Barbosa Santiago dos Santos em 19/01/2018 | Blog: https://www.facebook.com/angrasbss


Conversores



No que tange à conversão, pode-se manter a qualidade do arquivo original, não mudando o tipo do codec. Se for necessário trocar o codec, mudará a qualidade do arquivo original, mas, se usar os parâmetros corretos, a mudança é tão sucinta que dificilmente verás grandes diferenças. Para fins deste artigo, o processo de conversão juntamente com os parâmetros, será feito da seguinte forma:

ffmpeg -i <arquivo-alvo> {opção} [parâmetros] {opção} [parâmetros] <arquivo-final>.mp4

Conversão de arquivos copiando os Codecs

Converter um arquivo preservando seus codecs é um procedimento rápido e simples, mas antes, só podemos mantê-los se estiverem de acordo com as especificações exigidas deste tutorial, quais sejam: codec de vídeo (MPEG-4p'XX'/AVC/h.264) e codec de áudio (AAC/AC-3). Só saberemos se o arquivo-alvo possui estas especificações com o comando mkvmerge (ver acima).

Uma vez feito o comando e o arquivo-alvo possua estas especificações, então, o procedimento de conversão preservando todos os codecs, se faz da seguinte forma:

ffmpeg -i arquivo-alvo -c:v copy -c:a copy arquivo-final.mp4

Este comando copia o codec do vídeo (-c:v copy) e o codec do áudio (-c:a copy) do arquivo-alvo e converte para o formato MP4. Vejamos o exemplo abaixo:

mkvmerge -i Kikaider\ 1.mkv
Linux: Um básico uso do FFMPEG para converção em MP4
O arquivo original "Kikaider 1.mkv" tem áudio e vídeo com os codecs exigidos, porém, o formato é Matroska (mkv) e isto não é suficiente. Podemos então executar um comando que preservaremos todos os codecs, mas o formato será convertido para MP4, com isso, se implementa-se da seguinte forma:

ffmpeg -i Kikaider\ 1.mkv -c:v copy -c:a copy Kikaider\ 1.mp4
Linux: Um básico uso do FFMPEG para converção em MP4
O arquivo-final "Kikaider 1.mp4" preservou os codecs de áudio e vídeo do arquivo-alvo com um diferença de 1MB entre eles, veja a comparação na imagem abaixo:
Linux: Um básico uso do FFMPEG para converção em MP4
Obs.: se o arquivo-alvo possuir legenda embutida, em qualquer conversão o arquivo-final não virá com legenda.

Conversão de arquivos modificando um ou mais codecs

Converter um codec demora e, dependendo do processamento do computador e parâmetros, pode durar o triplo do tempo de duração do vídeo que será convertido. Há vídeos que um codec ou mais não cumpre as características exigidas por este tutorial, veja este exemplo abaixo.
Linux: Um básico uso do FFMPEG para converção em MP4
A faixa 0 cumpre a necessidade, mas a faixa 1 não é (AAC/AC-3). Se fossemos converter as duas faixas, demoraria bastante, porém, copiando a faixa 0 e convertendo somente a faixa 1 o processo não demorará. Usaremos o exemplo acima para demonstrar a conversão de um codec e mantendo o outro sem conversão:

ffmpeg -i 2007\ -\ Sicko.avi -c:v copy -c:a aac -strict experimental 2007\ -\ Sicko.mp4

Perceba que foi dado o comando para copiar o codec de vídeo (-c:v copy) e converter o codec de áudio (-c:a aac -strict experimental) para o codec (AAC), o resultado ficou assim:
Linux: Um básico uso do FFMPEG para converção em MP4
Muitas vezes, será necessário a conversão das faixas de vídeo e áudio, veja o exemplo abaixo de um arquivo chamado "Reflexo.webm":
Linux: Um básico uso do FFMPEG para converção em MP4
ffmpeg -i Reflexo.webm -c:v libx264 - c:a aac -strict experimental Reflexo.mp4

Os parâmetros "libx264" e "aac -strict experimental", foram inseridos na conversão dos codecs e o resulto final foi este:
Linux: Um básico uso do FFMPEG para converção em MP4
Fazendo uma comparação, houve uma diminuição no tamanho do arquivo e a mudança da qualidade é imperceptível.
Linux: Um básico uso do FFMPEG para converção em MP4

Conversão de arquivos com mais de uma faixa de áudio

Muitas vezes, o arquivo possui mais de uma faixa de áudio, normalmente são dois usando o mesmo codec. Quase sempre são filmes que possuem uma faixa de áudio para a língua original e a outra faixa que se destina para a língua dublada (dual áudio). Se não especificarmos nos parâmetros que é para preservar as duas faixas de áudio, a segunda faixa de áudio não será inserida no arquivo-final, com isto, o filme somente terá um vídeo e um áudio.
Linux: Um básico uso do FFMPEG para converção em MP4
Usando o mkvmerge -i, a imagem acima informa que há duas faixas de áudio, onde preserva-se os dois áudios utilizando parâmetros específicos, ou escolhe qual áudio quer preservar. Se quiser preservar a primeira faixa de áudio somente, é só aplicar o comando demonstrado acima, em "Conversão de arquivos copiando os Codecs" deste tutorial.

Caso contrário, se houver necessidade de manipulação das faixas o comando básico será este:

ffmpeg -i <arquivo-alvo> -map x:x -map y:y -map z:z {opção} [parâmetros] {opção} [parâmetros] <arquivo-final>.mp4

Agora, vemos um novo item para o comando: -map. Ele serve para indicar qual faixa tem determinado codec e que ela será convertido. Caso queira manter as duas faixas de áudio o procedimento é este do exemplo abaixo
Linux: Um básico uso do FFMPEG para converção em MP4
ffmpeg -i Kamen\ Rider\ Black\ -\ 01.avi -map 0:0 -map 0:1 -map 0:2 -c:v copy -c:a copy teste.mp4

Simplesmente, indiquei que é para copiar os codecs que estão nas faixa 0, 1 e 2.

As duas primeiras são de áudio e a última de vídeo. Normalmente nos arquivos originais, o "-map" é seguido do 0 e depois diz o número da posição. Assim, se o mkvmerge informa que há um ID da faixa 0: video, então, diremos ao "-map" que a posição é 0:0, se informar que há um ID da faixa 1: áudio, diremos ao "-map" que a posição é 0:1, e se houver um ID da faixa 0: áudio, diremos ao "-map" que a posição é 0:2 e assim vai sucessivamente. Mas isto pode ser mudado de acordo com a conveniência de cada.

Converter um arquivo dando um tamanho desejado

É normal encontrar arquivos multimídia de 4 GB ou mais, muitas vezes precisamos diminuí-los para preservar mais espaço ou porque alguns aparelhos não suportam a leitura e execução de arquivos tão grandes. Converter com os comando mostrados não diminuirá muito, dependendo do arquivo-alvo, em arquivos formato MKV a diminuição é pouca, mas, em arquivos AVI a diminuição é razoável.

Mas, há meios para diminuir muitos formatos para o tamanho que se queira. É compreensível que você queira, por exemplo, diminuir 4 GB para somente 2 GB, claro, influenciará na qualidade, mas muitas vezes é imperceptível a mudança.

O processo de informar qual tamanho que se quer para o arquivo-alvo é relativamente fácil, mas dispendioso, exige cálculo de Bitrate juntamente com outros parâmetros e esto não é o foco deste artigo. De qualquer forma, postarei um script (que não foi feito por mim, dentro dele há o link dos desenvolvedores) com uma pequena modificação de minha parte, mas aviso com antecedência que demora bastante, seria interessante deixar este tipo de conversão para ser feito na madrugada.

Para executá-lo, faça o download: videosize.sh

Siga: videosize.sh → "arquivo-alvo" → informe o tamanho do "arquivo-final" em MB

Script

Quando se tem uma pasta com dezenas de arquivos para se converter, fazer o procedimento um a um se tornará cansativo, com isso, há um método que realiza a conversão de todos eles com a execução de um script. Copie e cole estas linhas abaixo em um arquivo de texto, salve com o nome que quiser, desde que a extensão seja ".sh", por exemplo, "converso.sh", "format2mp4.sh", etc e execute dentro da pasta onde estão os arquivos. Será gerado um novo arquivo no formato ".mp4" com o mesmo nome do arquivo original.

Se quiser deixar a coisa mais prática, salve o script em /usr/bin e dê permissão para qualquer executar com:

chmod 744 script.sh

Com o terminal, vá para a pasta onde está todos os arquivos, digite o nome do script que salvo em /usr/bin e aperte Enter:

#!/bin/bash
for i in *.xxx; # AQUI TROQUE O "xxx" PARA O FORMATO DOS ARQUIVOS-ALVO, PODE SER "AVI", "MKV", ETC (SEM ASPAS)
do
    name=`echo $i | cut -d'.' -f1`;
    ffmpeg -i "$i" -vcodec libx264 -acodec aac -strict experimental "$name.mp4";
done

Conclusão

Trabalhar com o conversor FFMPEG é algo extenso, complexo e exige tempo.

O que se foi tratado neste texto despretensioso, foi somente um pequeno aspecto de como usá-lo basicamente, ainda tem outras maneiras de manipular o formato MP4, dependendo da necessidade e conveniência, melhorar ou piorar a qualidade do arquivo, adicionar ou remover um ou mais arquivos de áudio, legendas e imagens, não dá para explicar cada um deles, seria necessário um gigante texto ou livro, o que traria um trabalho hercúleo.

Certamente, há muitos problemas técnicos neste artigo, não sou da área de TI, minha formação é em Filosofia, porém, gosto muito de desenvolver algumas coisas mais práticas de uso doméstico e no GNU/Linux é muito mais fácil do que no OS da Microsoft.

Não sou o tipo de pessoa que guarda ideias, sejam elas inovadoras ou não, prefiro compartilhar, minha dúvida ou necessidade pode ser a mesma de outra pessoa. Por isso, peço desculpas nos erros conceituais e básico, mas a grosso modo dá para entender o que quero passar.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Conversores
Outros artigos deste autor

Bootsplash nos kernels 2.6.17.13 e 2.6.18 no Slackware 11

Leitura recomendada

Habilitar a aceleração por hardware AMD AMF no OBS

Kdenlive - Como desfocar/borrar rosto, área ou objetos em um vídeo

Como está o meu bebê?

Rakarrack - Uma pedaleira virtual no Fedora 21

Como monitorar Câmera IP e/ou USB no Ubuntu utilizando o MontionPlus

  
Comentários
[1] Comentário enviado por fermartins em 03/03/2018 - 19:32h

Otimo artigo, tens alguma dica para conversão de fluxo ou transcoding com ffmpeg, pegar um fluxo HTTP e transcodificar para UDP?, abraço!

[2] Comentário enviado por edps em 24/05/2018 - 19:36h

Ótima dica, favoritada!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts