Um guia rápido para usar o FFmpeg para converter arquivos de mídia

Existem muitas ferramentas de código aberto para edição, ajustes e conversão de multimídia em exatamente o que você precisa. Ferramentas como Audacity ou Handbrake são fantásticas, mas às vezes você só quer mudar um arquivo de um formato para outro rapidamente. Digite FFmpeg.

FFmpeg é uma coleção de diferentes projetos para manipulação de arquivos multimídia. É frequentemente usado nos bastidores em muitos outros projetos relacionados a mídias. Apesar de seu nome, não tem nada a ver com o Moving Picture Experts Group ou a miríade de formatos multimídia que ele criou.

Neste artigo eu estarei usando FFmpeg através da ferramenta de linha de comando ffmpeg, que é apenas uma pequena e única peça do projeto FFmpeg. Ele está disponível em muitos sistemas operacionais diferentes e está incluído em alguns sistemas operacionais por padrão. Ele pode ser baixado do site do FFmpeg ou através da maioria dos gerenciadores de pacotes.

FFmpeg é uma ferramenta poderosa que pode fazer quase tudo que você possa imaginar com arquivos multimídia. Neste artigo, estamos interessados em usá-lo para converter arquivos, assim não vamos dar um mergulho profundo em todo o seu conjunto de recursos. Antes de olharmos para o FFmpeg, primeiro precisamos dar uma olhada rápida no que é exatamente um arquivo de mídia.

Arquivos de mídia

A uma vista de alto nível, um arquivo de mídia é dividido em um container e seus streams. Os streams incluem os componentes AV reais, como o áudio ou vídeo de um filme, e são codificados usando uma determinada codificação de mídia, ou codec. Cada codec tem suas próprias propriedades, pontos fortes e fracos. Por exemplo, o codec FLAC é bom para áudio sem perdas de alta qualidade, enquanto o Vorbis foi projetado para competir com MP3 em tamanho de arquivo, oferecendo melhor qualidade de áudio. Isso significa que um arquivo com formato FLAC será muito maior que um fluxo de áudio Vorbis, mas deve soar melhor. Nenhum deles é inerentemente melhor que o outro, pois cada um está tentando fazer coisas diferentes.

O recipiente é o invólucro para os streams. Ele apresenta uma única interface com a qual os media players e ferramentas podem interagir. Alguns recipientes são altamente avançados e permitem qualquer tipo de stream, incluindo vários streams de vídeo e áudio dentro de um único recipiente. No entanto, os fluxos num contentor não têm de ser apenas áudio ou vídeo. Contêineres diferentes permitirão fluxos diferentes, por exemplo, legendas, informações de capítulos ou outros metadados. Tudo depende do que o container está configurado para permitir.

Esta é uma representação abstrata de arquivos de mídia e salta sobre muitas das diferenças entre containers. Muitos requerem certos streams e metadados ou colocam restrições nos codecs ou conteúdos permitidos. Esta explicação é suficiente para o fazer passar por este artigo. Para saber mais, clique nos links acima.

Esteja ciente de que a codificação de vídeo e áudio pode demorar muito tempo para ser executada. Você deve estar preparado para se instalar por um tempo quando você usar FFmpeg.

Basic conversion

O que mais chateia as pessoas quando se trata de conversão de áudio e vídeo é selecionar os formatos e recipientes corretos. Felizmente, o FFmpeg é bastante inteligente com suas configurações padrão. Normalmente ele seleciona automaticamente os codecs e containers corretos sem nenhuma configuração complexa.

Por exemplo, digamos que você tem um arquivo MP3 e quer que ele seja convertido em um arquivo OGG:

ffmpeg -i input.mp3 output.ogg

Este comando pega um arquivo MP3 chamado input.mp3 e o converte em um arquivo OGGG chamado output.ogg. Do ponto de vista do FFmpeg, isso significa converter o fluxo de áudio MP3 em um fluxo de áudio Vorbis e envolver esse fluxo em um recipiente OGG. Você não precisava especificar os tipos de stream ou container, porque FFmpeg descobriu isso para você.

Isso também funciona com videos:

ffmpeg -i input.mp4 output.webm

Por que WebM é um formato bem definido, FFmpeg automaticamente sabe que vídeo e áudio ele pode suportar e irá converter os streams para ser um arquivo WebM válido.

Dependente do container de sua escolha, isso nem sempre irá funcionar. Por exemplo, recipientes como o Matroska são projetados para lidar com quase todos os streams que você se importa de colocar neles, sejam eles válidos ou não. Isto significa que o comando:

ffmpeg -i input.mp4 output.mkv

pode resultar em um arquivo com os mesmos codecs que o input.mp4 tinha, que pode ou não ser o que você quer.

Selecionando seus codecs

Então o que você faz quando quer usar um container como o Matroska (que pode lidar com quase qualquer stream) mas ainda assim influenciar quais codecs estão na saída? FFmpeg para o salvamento! Você pode selecionar os codecs necessários usando a bandeira -c.

Esta bandeira permite que você defina o codec diferente para usar em cada stream. Por exemplo, para configurar o fluxo de áudio para ser Vorbis, você usaria o seguinte comando:

ffmpeg -i input.mp3 -c:a libvorbis output.ogg

O mesmo pode ser feito para alterar o vídeo assim como o fluxo de áudio:

ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv

Isso fará um container Matroska com um fluxo de vídeo VP9 e um fluxo de áudio Vorbis, essencialmente o mesmo que o WebM que fizemos anteriormente.

O comando ffmpeg -codecs imprimirá todos os codecs que o FFmpeg conhece. A saída deste comando irá mudar dependendo da versão do FFmpeg que tiver instalado.

Mudando um único stream

Mais frequentemente do que você gostaria, o arquivo que você tem está parcialmente correto com apenas um único stream no formato errado. Pode demorar muito tempo a recodificar o stream correcto. FFmpeg pode ajudar com esta situação:

ffmpeg -i input.webm -c:v copy -c:a flac output.mkv

Este comando copia o fluxo de vídeo de input.webm para output.mkv e codifica o fluxo de áudio do Vorbis para um FLAC. A bandeira -c é realmente poderosa.

Mudando um container

O exemplo anterior pode ser aplicado tanto ao fluxo de áudio quanto ao fluxo de vídeo, permitindo que você converta de um formato de container para outro sem ter que fazer nenhuma codificação adicional de fluxo:

ffmpeg -i input.webm -c:av copy output.mkv

Influenciando a qualidade

Agora que temos um controle sobre os codecs, a próxima pergunta é: Como definimos a qualidade de cada fluxo?

O método mais simples é alterar a taxa de bits, o que pode ou não resultar em uma qualidade diferente. A capacidade dos humanos de ver e ouvir não é tão limpa e clara como gostaríamos de pensar. Por vezes a mudança da taxa de bits faz uma enorme diferença para a qualidade subjectiva. Outras vezes, pode não fazer nada além de mudar o tamanho do arquivo. Às vezes é muito difícil dizer o que vai acontecer sem experimentar.

Para definir a bitrate de cada stream, você usa a flag -b, que funciona de forma similar à flag -c, exceto que ao invés de opções de codec você define uma bitrate.

Por exemplo, para alterar a bitrate do vídeo, você usaria assim:

ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv

Isso irá copiar o áudio (-c:a copy) da entrada.webm e converter o vídeo para um codec VP9 (-c:v vp9) com uma taxa de bits de 1M/s (-b:v), tudo embalado em um container Matroska (output.mkv).

Outra maneira de impactarmos a qualidade é ajustar a frame rate do vídeo usando a opção -r:

ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv

Isso cria um novo Matroska com o fluxo de áudio copiado e a frame rate do fluxo de vídeo forçada a 30 frames por segundo, em vez de usar a frame rate da entrada (-r 30).

Você também pode ajustar as dimensões do seu vídeo usando FFmpeg. A maneira mais simples é usar um tamanho de vídeo pré-determinado:

ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv

Isso modifica o vídeo para 1280×720 na saída, mas você pode definir a largura e a altura manualmente se quiser:

ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv

Isso produz exatamente a mesma saída que o comando anterior. Se você quiser definir tamanhos personalizados em FFmpeg, lembre-se que o parâmetro largura (1280) vem antes da altura (720).

Ajustar taxa de quadros e bitrate são duas técnicas rudimentares, mas eficazes para afetar a qualidade da mídia. Definir estes valores muito altos não pode melhorar a qualidade de uma fonte existente se sua qualidade já é baixa.

Alterar estas configurações é mais eficaz para reduzir rapidamente um fluxo de alta qualidade para fazer um arquivo de tamanho menor. Ajustar o tamanho do seu vídeo não pode melhorar a qualidade, mas pode fazê-lo caber melhor em um tablet em vez da sua TV. Alterar o tamanho de um vídeo 640×480 para 4K não irá melhorá-lo.

Alterar a qualidade dos seus ficheiros é uma questão muito subjectiva, o que significa que não há uma forma que funcione sempre. O melhor método é fazer algumas alterações e testar se parece ou soa melhor para você.

Modificar os streams

A maior parte das vezes você tem um arquivo que é quase perfeito, e você só precisa aparar algumas partes. Isso pode ser feito mais facilmente com uma ferramenta que mostra o que você está mudando, mas se você sabe exatamente onde você quer que ele seja aparado, é muito fácil fazê-lo em FFmpeg:

ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv

Isso irá copiar os streams de vídeo e áudio (-c:av copy), mas irá aparar o vídeo. A opção -t define a duração do corte em 10 segundos e a opção -ss define o ponto inicial do vídeo para o corte, neste caso em um minuto (00:01:00). Você pode ser mais preciso do que apenas horas, minutos e segundos, descendo para milissegundos se necessário.

Extraindo o áudio

Por vezes você realmente não se importa com o vídeo, você só quer o áudio. Por sorte isto é muito simples no FFmpeg com a bandeira -vn:

ffmpeg -i input.mkv -vn audio_only.ogg

Este comando extrai apenas o áudio da entrada, codifica-o como Vorbis, e guarda-o em audio_only.ogg. Agora você tem um fluxo de áudio isolado. Você também pode usar as bandeiras -an e -sn da mesma maneira para tirar o áudio e os subtítulos streams.

Fazendo um GIF dele

Recentemente, GIFs animados (com um g rígido porque eu não sou um monstro) fizeram um retorno. Pessoalmente eu acho que o GIF é o pior formato que você poderia escolher para o vídeo. Ele tem qualidade e tamanho de compressão terrível; tem limites muito difíceis em torno de cores, taxas de quadros e metadados de contêineres; e não pode suportar áudio. Mesmo assim, é bastante popular. Então, como você pode fazer um vídeo clipe em um GIF animado?

Usar a bandeira -an, semelhante ao que fizemos acima, é melhor do que criar um GIF animado se você gostaria de fazer um vídeo sem áudio, mas há muitos lugares que suportam GIFs que não suportam um formato de vídeo diferente. Para todos aqueles:

ffmpeg -i input.mkv output.gif

Este comando cria um GIF das mesmas dimensões do arquivo de entrada. Isso muitas vezes é uma má idéia, pois os GIFs não se comprimem bem em relação a outros formatos de vídeo (na minha experiência um GIF será cerca de oito vezes maior do que o vídeo de origem). Pode ser útil usar a opção -s para redimensionar seu GIF para algo um pouco menor, especialmente se a fonte de entrada for bem grande, como vídeo HD.

Outras ferramentas

Embora o FFmpeg seja a ferramenta go-to para a maioria das tarefas AV, ele não é perfeito para tudo. Existem algumas ferramentas que, usadas em conjunto com FFmpeg, podem tornar tudo um pouco mais fácil.

Grabbing videos from YouTube

Pode ser muito fácil carregar algo no YouTube, perder o vídeo original, e ter apenas a versão do YouTube que resta. Qual é a maneira mais fácil de recuperar uma cópia dos seus vídeos do YouTube?

Youtube-dl é uma pequena e elegante ferramenta que você pode usar para obter vídeos do YouTube e de vários outros serviços de streaming de vídeo. É super simples de usar:

youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0

Este comando baixa o vídeo na URL indicada e salva-o localmente.

Youtube-dl tem várias opções para controlar a qualidade e o formato do vídeo baixado, mas acho mais fácil usar o comando acima. Ele baixa áudio e vídeo da mais alta qualidade em um único arquivo, então eu uso FFmpeg para convertê-los para o formato que eu quero.

Conhecendo informações sobre a mídia

Por vezes tudo o que você precisa saber é o que está dentro do recipiente da mídia. Embora existam várias ferramentas que podem fazer isso, a minha preferida é MediaInfo. O MediaInfo mostra toda a informação dentro de um contentor de media, para cada um dos diferentes fluxos, assim como os metadados para o ficheiro de entrada. Isso lhe dá tudo que você pode querer saber – e provavelmente um monte de coisas que você não quis.

Running the command mediainfo inputFile.mkv cospe uma lista de informações sobre o arquivo de entrada em uma forma legível para humanos.

E mais….

Isso é apenas arranhar a superfície do que o FFmpeg pode fazer. Felizmente, a documentação do FFmpeg e das outras ferramentas do projeto é muito boa e vale a pena conferir. Ele vai lhe ensinar tudo sobre os muitos truques diferentes que este cão pode fazer.

Se você está atrás de uma ferramenta com uma interface gráfica para converter multimídia, Handbrake é uma ferramenta excepcionalmente boa disponível no Linux, Mac OS X, e Windows. O freio de mão usa FFmpeg (entre outras ferramentas) sob o capô.

Deixe uma resposta

O seu endereço de email não será publicado.