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
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
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:
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.
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:
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":
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:
Fazendo uma comparação, houve uma diminuição no tamanho do arquivo e a mudança da qualidade é imperceptível.
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.
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
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.