e ae galera o ffmpeg é um conversor de audio e video não grafico que é muito usado no sistema linux muito robusto e extremamente flexivel (embora ele exista para diversas outras plataformas tambem como windows e mac). pelo ffmpeg podemos converter um arquivo em um formato para outro com diversos tipos de codecs diferentes, podemos converter ou ate armazenar stream via rede ou enviar via stream por ele, podemos aplicar filtros especificos por ele ou seja ele tambem pode ser usado para edição de video via comando, podemos capturar tanto o audio quanto o video do computador, podemos manipular tanto o audio quanto o video dos arquivos separadamente. o ffmpeg vem instalado em boa distros linux, caso não venha instalado basta baixar ele direto pelo repositorio da sua distro (no caso das distros baseadas em debian podemos utilizar o apt-get)
para a gente listar todos os formatos de arquivo que podem ser manipulados pelo ffmpeg usamos o argumento -formats
para exibir os codecs usamos o parametro -codecs
com o argumento -protocols exibimos os protocolos aceito tanto para entrada quanto para saida
tambem podemos exibir os filtros aceitos com o argumento -filters
podemos exibir os dispositivos que podem ser manipulados pelo ffmpeg, para isso usamos o argumento -devices
para a gente converter um video de um formato para outro usamos o argumento -i indicando o arquivo de entrada que seria o video que vamos converter, seguido do arquivo de saida com a extensão do formato para qual vamos converter aquele video, exemplo um video em rmvb para mp4
podemos usar o argumento -f para especificar o formato
é possivel converter para varios formatos ao mesmo tempo bastando especificar eles um a um
lembrando que o mesmo pode ser feito com audio, não necessariamente precisa ser um video
podemos converter um arquivo via stream tambem (nesse caso precisaria da url direto do arquivo)
é possivel converter o stream do video da webcam no sistema linux bastando ler o arquivo /dev/videoX (o X é equivalente ao numero da webcam)
no linux podemos gravar o desktop usando o formato x11grab e na entrada passamos o display da nossa janela atual
podemos converter de um formato de video para formato de audio para extrair apenas o audio daquele video
é possivel desativar o video usando o argumento -vn, com isso vai gerar o formato de video apenas com audio dele
tambem podemos desativar o audio com o argumento -an
com o argumento -ss a gente inicia apartir daquele ponto, no proximo exemplo ele vai gerar o video mp4 apartir do 5:00
temos que nos atentar a uma coisa dependendo da onde voce coloca o -ss ou qualquer outro argumento voce vai esta manipulando o arquivo de entrada ou o arquivo de saida, se voce colocar o -ss antes do -i no exemplo anterior vai iniciar apartir daquele ponto quase instantaneamente porem se colocar o -ss depois do -i como no exemplo anterior o ffmpeg vai ler todo o video ate aquele determinado momento e apartir dele que vai começar a converter
para especificar o tempo que ele vai parar usamos o argumento --to, no proximo exemplo ele vai gerar o video ate o 1:00 do video de entrada
outro exemplo agora recortando a opening do anime another que começa em 1:31 e termina em 3:01
tambem existe o parametro -t que seria a duração para parar, como eu sei que a opening do anime another tem 1:30 e começa em 1:31, posso recortar ela especificando 1:30 no -t e 1:31 no -ss, com isso vai comçear em 1:31 e ter como duração 1:30 de video/audio
outra forma de parar o video é por frames convertido, a cada segundo de video existe uma quantidade de frames (os famosos fps), para a gente parar o video em uma quantidade de frames especifica, usamos o argumentos -frames seguido da quantidade frames maxima que ffmpeg ira converter
podemos inserir uma legenda em um video usando o -i tambem
pelo ffmpeg tambem podemos converter legendas srt para ass
para inserir legendas ass temos que fazer via filtro de video usando o argumento -vf ass (a vantagem das legendas ass que podemos customizar fonte, tamanho, cor, posição e ate efeito)
podemos especificar a dimensão da tela com o argumento -s seguido da dimesão da tela para qual vamos converter, o bom que isso diminui o tamanho final do arquivo o problema que isso vai diminuir tambem a qualidade do video ja que a quantidade de pixeis para ser manipulado sera menor (outro problema que não é possivel fazer o oposto aumentando a tela para melhorar a qualidade ja que é impossivel recuperar os dados originais perdido tendo como resultado final um video mais pixelado)
combinando a dimensão da tela junto com o frame e com o tempo inicial, podemos pegar uma imagem do video que pode ser usado para criar aqueles thumbnail (podemos tambem colocar outro numero no frames para pegar varias imagens em sequencia de video)
podemos juntar um arquivo de video com um arquivo de audio usado o argumento -i nos dois, para que funcione corretamente temos que especificar a saida com o video e o audio usando o argumento -map, sendo que no argumento map a gente passa a ordem que entramos com os arquivos pelo -i, seguido de dois pontos e a letra "a" para indicar que a saida sera o audio daquele arquivo ou "v" caso seja o video daquele arquivo
se no exemplo anterior a ordem do arquivo fosse a musica antes do video a ordem no map seria invertida sendo o 0 para o audio e o 1 para o video
tambem podemos junta um video com o audio de outro video
podemos aplicar alguns filtros com o ffmpeg tanto em audio quanto em video, para aplicar um filtro no video usamos o argumento -vf, para aplicar um filtro no audio usamos o argumento -af, um filtro que podemos aplicar no audio é o areverse que inverte o som
podemos aplicar esse filtro direto no video tambem para inverter o audio do video
um filtro para o video é o negate que mostra o video todo em negativo
com o filtro rotate a gente rotaciona a tela
se a gente passar um numero negativo para o rotate sera rotacionado para outro lado
outro filtro para video é o scale que permite a gente redimensionar o video
podemos escrever um texto com o filtro drawtext, alguns dos argumentos dele são text para especificar o texto, x e y para a posição, box seria uma caixa, boxcolor a cor da caixa, font seria o nome da fonte, fontcolor seria a cor da fonte, fontsize o tamanho da fonte, enable='between' seria o tempo que vai aparecer e desaparecer
podemos inclusive juntar dois ou mais videos rodando ao mesmo tempo dividindo a mesma tela, para fazer isso temos que usar um filtro complexo, pegamos o primeiro video redimensionamos ele com scale, depois juntamos ele com o segundo usando o overlay
bom galera como podemos ver que o ffmpeg é uma excelente ferramenta que alem de permitir a conversão do video tambem permite a edição dele, tudo direto pelo terminal. como são comandos podemos imprementar eles em qualquer linguagen seja bash script ou ate mesmo linguagens que permite o uso do terminal como a função system em C, Perl ou ate PHP (embora tambem exista bibliotecas e libs proprias do ffmpeg). bom galera esse tutorial mostra apenas o basico do uso dessa ferramenta sendo que tem muito mais coisas que poderia ser feito por ela que não daria para citar nesse tutorial, tambem existe o ffplay que é um player que vem junto com o ffmpeg que permite aplicar filtros, o ffserver que é um servidor que permite enviar stream de videos e audios aplicando filtro e encodando ele, ffprobe exibe que informações de determinado video ou audio entre outros ^^
by kodo no kami
- Código:
apt-get install ffmpeg
para a gente listar todos os formatos de arquivo que podem ser manipulados pelo ffmpeg usamos o argumento -formats
- Código:
ffmpeg -formats
para exibir os codecs usamos o parametro -codecs
- Código:
ffmpeg -codecs
com o argumento -protocols exibimos os protocolos aceito tanto para entrada quanto para saida
- Código:
ffmpeg -protocols
tambem podemos exibir os filtros aceitos com o argumento -filters
- Código:
ffmpeg -filters
podemos exibir os dispositivos que podem ser manipulados pelo ffmpeg, para isso usamos o argumento -devices
- Código:
ffmpeg -devices
para a gente converter um video de um formato para outro usamos o argumento -i indicando o arquivo de entrada que seria o video que vamos converter, seguido do arquivo de saida com a extensão do formato para qual vamos converter aquele video, exemplo um video em rmvb para mp4
- Código:
ffmpeg -i zero_no_tsukaima.rmvb zero.mp4
podemos usar o argumento -f para especificar o formato
- Código:
ffmpeg -i zero_no_tsukaima.rmvb -f mp4 zero.mp4
é possivel converter para varios formatos ao mesmo tempo bastando especificar eles um a um
- Código:
ffmpeg -i zero_no_tsukaima.rmvb zero.mp4 zero.mkv
lembrando que o mesmo pode ser feito com audio, não necessariamente precisa ser um video
- Código:
ffmpeg -i "steinsgate op.mp3" s.wmv
podemos converter um arquivo via stream tambem (nesse caso precisaria da url direto do arquivo)
- Código:
ffmpeg -i "http://192.168.1.2/kodo/repositorio/anime/Spice%20and%20wolf/Spice-and-Wolf-01.mp4" spice.mkv
é possivel converter o stream do video da webcam no sistema linux bastando ler o arquivo /dev/videoX (o X é equivalente ao numero da webcam)
- Código:
ffmpeg -i /dev/video0 nudes.mp4
no linux podemos gravar o desktop usando o formato x11grab e na entrada passamos o display da nossa janela atual
- Código:
ffmpeg -s 1280x1024 -f x11grab -r 20 -i :0.0 desktop.mp4
podemos converter de um formato de video para formato de audio para extrair apenas o audio daquele video
- Código:
ffmpeg -i another01.rmvb another01.mp3
é possivel desativar o video usando o argumento -vn, com isso vai gerar o formato de video apenas com audio dele
- Código:
ffmpeg -i another01.rmvb -vn another01.mp4
tambem podemos desativar o audio com o argumento -an
- Código:
ffmpeg -i another01.rmvb -an another01.mp4
com o argumento -ss a gente inicia apartir daquele ponto, no proximo exemplo ele vai gerar o video mp4 apartir do 5:00
- Código:
ffmpeg -i another01.rmvb -ss 5:00 another01.mp4
temos que nos atentar a uma coisa dependendo da onde voce coloca o -ss ou qualquer outro argumento voce vai esta manipulando o arquivo de entrada ou o arquivo de saida, se voce colocar o -ss antes do -i no exemplo anterior vai iniciar apartir daquele ponto quase instantaneamente porem se colocar o -ss depois do -i como no exemplo anterior o ffmpeg vai ler todo o video ate aquele determinado momento e apartir dele que vai começar a converter
- Código:
ffmpeg -ss 5:00 -i another01.rmvb another01.mp4
para especificar o tempo que ele vai parar usamos o argumento --to, no proximo exemplo ele vai gerar o video ate o 1:00 do video de entrada
- Código:
ffmpeg -i another01.rmvb -to 1:00 another01.mp4
outro exemplo agora recortando a opening do anime another que começa em 1:31 e termina em 3:01
- Código:
ffmpeg -i another01.rmvb -ss 1:31 -to 3:01 anotherop.mp4
tambem existe o parametro -t que seria a duração para parar, como eu sei que a opening do anime another tem 1:30 e começa em 1:31, posso recortar ela especificando 1:30 no -t e 1:31 no -ss, com isso vai comçear em 1:31 e ter como duração 1:30 de video/audio
- Código:
ffmpeg -i another01.rmvb -ss 1:31 -t 1:30 anothermusica.mp3
outra forma de parar o video é por frames convertido, a cada segundo de video existe uma quantidade de frames (os famosos fps), para a gente parar o video em uma quantidade de frames especifica, usamos o argumentos -frames seguido da quantidade frames maxima que ffmpeg ira converter
- Código:
ffmpeg -i another01.rmvb -frames 3000 another.mp4
podemos inserir uma legenda em um video usando o -i tambem
- Código:
ffmpeg -i yosuga.mp4 -i kodo.srt kodo.mp4
pelo ffmpeg tambem podemos converter legendas srt para ass
- Código:
ffmpeg -i kodo.srt kodo.ass
para inserir legendas ass temos que fazer via filtro de video usando o argumento -vf ass (a vantagem das legendas ass que podemos customizar fonte, tamanho, cor, posição e ate efeito)
- Código:
ffmpeg -i yosuga.mp4 -vf ass=kodo.ass yosuga.mp4
podemos especificar a dimensão da tela com o argumento -s seguido da dimesão da tela para qual vamos converter, o bom que isso diminui o tamanho final do arquivo o problema que isso vai diminuir tambem a qualidade do video ja que a quantidade de pixeis para ser manipulado sera menor (outro problema que não é possivel fazer o oposto aumentando a tela para melhorar a qualidade ja que é impossivel recuperar os dados originais perdido tendo como resultado final um video mais pixelado)
- Código:
ffmpeg -i toaru.mp4 -s 300x200 toaru300x200.mp4
combinando a dimensão da tela junto com o frame e com o tempo inicial, podemos pegar uma imagem do video que pode ser usado para criar aqueles thumbnail (podemos tambem colocar outro numero no frames para pegar varias imagens em sequencia de video)
- Código:
ffmpeg -ss 07:21 -i toaru.mp4 -s 400x300 -frames 1 mini.png
podemos juntar um arquivo de video com um arquivo de audio usado o argumento -i nos dois, para que funcione corretamente temos que especificar a saida com o video e o audio usando o argumento -map, sendo que no argumento map a gente passa a ordem que entramos com os arquivos pelo -i, seguido de dois pontos e a letra "a" para indicar que a saida sera o audio daquele arquivo ou "v" caso seja o video daquele arquivo
- Código:
ffmpeg -i video.mp4 -i "Trip-Innocent Of D.mp3" -map 0:v -map 1:a amv.mp4
se no exemplo anterior a ordem do arquivo fosse a musica antes do video a ordem no map seria invertida sendo o 0 para o audio e o 1 para o video
- Código:
ffmpeg -i "Trip-Innocent Of D.mp3" -i video.mp4 -map 1:v -map 0:a amv.mp4
tambem podemos junta um video com o audio de outro video
- Código:
ffmpeg -i video1.mp4 -i video2.mp4 -map 0:v -map 1:a saida.mp4
podemos aplicar alguns filtros com o ffmpeg tanto em audio quanto em video, para aplicar um filtro no video usamos o argumento -vf, para aplicar um filtro no audio usamos o argumento -af, um filtro que podemos aplicar no audio é o areverse que inverte o som
- Código:
ffmpeg -i xuxa.mp3 -af areverse dilma.mp3
podemos aplicar esse filtro direto no video tambem para inverter o audio do video
- Código:
ffmpeg -i deathnote.mp4 -af areverse saida.mp4
um filtro para o video é o negate que mostra o video todo em negativo
- Código:
ffmpeg -i toradora.mp4 -vf negate tigresa.mp4
com o filtro rotate a gente rotaciona a tela
- Código:
ffmpeg -i toradora.mp4 -vf rotate=0.6 tigresa.mp4
se a gente passar um numero negativo para o rotate sera rotacionado para outro lado
- Código:
ffmpeg -i toradora.mp4 -vf rotate=-1.2 tigresa.mp4
outro filtro para video é o scale que permite a gente redimensionar o video
- Código:
ffmpeg -i toradora.mp4 -vf scale=400:300 tigresa.mp4
podemos escrever um texto com o filtro drawtext, alguns dos argumentos dele são text para especificar o texto, x e y para a posição, box seria uma caixa, boxcolor a cor da caixa, font seria o nome da fonte, fontcolor seria a cor da fonte, fontsize o tamanho da fonte, enable='between' seria o tempo que vai aparecer e desaparecer
- Código:
ffmpeg -i "no game no life.mp4" -vf drawtext="text=by kodo no kami: x=5: y=10: box=1: boxcolor=white: font=arial: fontcolor=black: fontsize=18: enable='between(t,10,1200)'" nogame.mp4
podemos inclusive juntar dois ou mais videos rodando ao mesmo tempo dividindo a mesma tela, para fazer isso temos que usar um filtro complexo, pegamos o primeiro video redimensionamos ele com scale, depois juntamos ele com o segundo usando o overlay
- Código:
ffmpeg -i "no game no life.mp4" -i Seto.mp4 --filter_complex "[0] scale=300:200[kodo];[1][kodo]overlay=50:50" saida.mp4
bom galera como podemos ver que o ffmpeg é uma excelente ferramenta que alem de permitir a conversão do video tambem permite a edição dele, tudo direto pelo terminal. como são comandos podemos imprementar eles em qualquer linguagen seja bash script ou ate mesmo linguagens que permite o uso do terminal como a função system em C, Perl ou ate PHP (embora tambem exista bibliotecas e libs proprias do ffmpeg). bom galera esse tutorial mostra apenas o basico do uso dessa ferramenta sendo que tem muito mais coisas que poderia ser feito por ela que não daria para citar nesse tutorial, tambem existe o ffplay que é um player que vem junto com o ffmpeg que permite aplicar filtros, o ffserver que é um servidor que permite enviar stream de videos e audios aplicando filtro e encodando ele, ffprobe exibe que informações de determinado video ou audio entre outros ^^
by kodo no kami