[tutorial] convertendo e editando com ffmpeg

Iniciado por kodo no kami, Agosto 18, 2017, 22:50:51 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

kodo no kami

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)

apt-get install ffmpeg

para a gente listar todos os formatos de arquivo que podem ser manipulados pelo ffmpeg usamos o argumento -formats

ffmpeg -formats

img maior -> http://i.imgur.com/DHk1qUI.png


para exibir os codecs usamos o parametro -codecs

ffmpeg -codecs

com o argumento -protocols exibimos os protocolos aceito tanto para entrada quanto para saida

ffmpeg -protocols

tambem podemos exibir os filtros aceitos com o argumento -filters

ffmpeg -filters

podemos exibir os dispositivos que podem ser manipulados pelo ffmpeg, para isso usamos o argumento -devices

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

ffmpeg -i zero_no_tsukaima.rmvb zero.mp4

img maior -> http://i.imgur.com/rZUjCFF.png


podemos usar o argumento -f para especificar o formato

ffmpeg -i zero_no_tsukaima.rmvb -f mp4 zero.mp4

é possivel converter para varios formatos ao mesmo tempo bastando especificar eles um a um

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

ffmpeg -i "steinsgate op.mp3" s.wmv

podemos converter um arquivo via stream tambem (nesse caso precisaria da url direto do arquivo)

ffmpeg -i "http://192.168.1.2/kodo/repositorio/anime/Spice%20and%20wolf/Spice-and-Wolf-01.mp4" spice.mkv

img maior -> http://i.imgur.com/9wYVsSq.png


é possivel converter o stream do video da webcam no sistema linux bastando ler o arquivo /dev/videoX (o X é equivalente ao numero da webcam)

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

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

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

ffmpeg -i another01.rmvb -vn another01.mp4

tambem podemos desativar o audio com o argumento -an

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

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

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

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

ffmpeg -i another01.rmvb -ss 1:31 -to 3:01 anotherop.mp4

img maior -> http://i.imgur.com/CJzZffk.png


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

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

ffmpeg -i another01.rmvb -frames 3000 another.mp4

podemos inserir uma legenda em um video usando o -i tambem

ffmpeg -i yosuga.mp4 -i kodo.srt kodo.mp4

img maior -> http://i.imgur.com/gd3HBQj.png


pelo ffmpeg tambem podemos converter legendas srt para ass

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)

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)

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)

ffmpeg -ss 07:21 -i toaru.mp4 -s 400x300 -frames 1 mini.png

img maior -> http://i.imgur.com/t6C8mes.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

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

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

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

ffmpeg -i xuxa.mp3 -af areverse dilma.mp3

podemos aplicar esse filtro direto no video tambem para inverter o audio do video

ffmpeg -i deathnote.mp4 -af areverse saida.mp4

um filtro para o video é o negate que mostra o video todo em negativo

ffmpeg -i toradora.mp4 -vf negate tigresa.mp4

img maior -> http://i.imgur.com/Kt7lda9.png


com o filtro rotate a gente rotaciona a tela

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

ffmpeg -i toradora.mp4 -vf rotate=-1.2 tigresa.mp4

outro filtro para video é o scale que permite a gente redimensionar o video

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

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

img maior -> http://i.imgur.com/7SAljKa.png


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

ffmpeg -i "no game no life.mp4" -i Seto.mp4 --filter_complex "[0] scale=300:200[kodo];[1][kodo]overlay=50:50" saida.mp4

img maior -> http://i.imgur.com/EpwQXYc.png


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

tvtoon

Só um adendo, fio de deos... Como a documentação é escassa, e seu ambiente de linha de comando uma desgraça, é preciso ter suporte para decidificação, codificação e o chamado "demux" (transição) para converter entre formatos.

kodo no kami

Citação de: tvtoon online Agosto 19, 2017, 11:18:24 AM
Só um adendo, fio de deos... Como a documentação é escassa, e seu ambiente de linha de comando uma desgraça, é preciso ter suporte para decidificação, codificação e o chamado "demux" (transição) para converter entre formatos.

verdade mano complicado achar conteudo sobre ffmpeg bastante escasso =/