Autor Tópico: [tutorial] convertendo e editando com ffmpeg  (Lida 2870 vezes)

kodo no kami

  • Macaquinho
  • *
  • Mensagens: 28
    • Ver perfil
    • forum eof
  • 2522
  • Itens:
[tutorial] convertendo e editando com ffmpeg
« Online: Agosto 18, 2017, 22:50:51 pm »
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)

Código: [Selecionar]
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: [Selecionar]
ffmpeg -formats
img maior -> http://i.imgur.com/DHk1qUI.png


para exibir os codecs usamos o parametro -codecs

Código: [Selecionar]
ffmpeg -codecs
com o argumento -protocols exibimos os protocolos aceito tanto para entrada quanto para saida

Código: [Selecionar]
ffmpeg -protocols
tambem podemos exibir os filtros aceitos com o argumento -filters

Código: [Selecionar]
ffmpeg -filters
podemos exibir os dispositivos que podem ser manipulados pelo ffmpeg, para isso usamos o argumento -devices

Código: [Selecionar]
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: [Selecionar]
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

Código: [Selecionar]
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: [Selecionar]
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: [Selecionar]
ffmpeg -i "steinsgate op.mp3" s.wmv
podemos converter um arquivo via stream tambem (nesse caso precisaria da url direto do arquivo)

Código: [Selecionar]
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)

Código: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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: [Selecionar]
ffmpeg -i another01.rmvb -vn another01.mp4
tambem podemos desativar o audio com o argumento -an

Código: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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

Código: [Selecionar]
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: [Selecionar]
ffmpeg -i another01.rmvb -frames 3000 another.mp4
podemos inserir uma legenda em um video usando o -i tambem

Código: [Selecionar]
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

Código: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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

Código: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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: [Selecionar]
ffmpeg -i xuxa.mp3 -af areverse dilma.mp3
podemos aplicar esse filtro direto no video tambem para inverter o audio do video

Código: [Selecionar]
ffmpeg -i deathnote.mp4 -af areverse saida.mp4
um filtro para o video é o negate que mostra o video todo em negativo

Código: [Selecionar]
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

Código: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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: [Selecionar]
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

Código: [Selecionar]
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
« Última modificação: Agosto 18, 2017, 22:59:08 pm por kodo no kami »

tvtoon

  • Macaco Adulto
  • ***
  • Mensagens: 146
    • Ver perfil
  • 1446
  • Itens:



Re:[tutorial] convertendo e editando com ffmpeg
« Resposta #1 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.

kodo no kami

  • Macaquinho
  • *
  • Mensagens: 28
    • Ver perfil
    • forum eof
  • 2522
  • Itens:
Re:[tutorial] convertendo e editando com ffmpeg
« Resposta #2 Online: Agosto 25, 2017, 15:41:21 pm »
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 =/