convertendo e editando com ffmpeg

Discussão em 'Dicas e tutoriais' iniciado por kodo no kami, 13 Agosto 2017.

  1. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    235
    Sexo:
    Masculino
    Avaliações:
    +312 / -0
    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 (Forge Crash):
    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 (Forge Crash):
    ffmpeg -formats
    [​IMG]

    para exibir os codecs usamos o parametro -codecs

    Código (Forge Crash):
    ffmpeg -codecs
    com o argumento -protocols exibimos os protocolos aceito tanto para entrada quanto para saida

    Código (Forge Crash):
    ffmpeg -protocols
    tambem podemos exibir os filtros aceitos com o argumento -filters

    Código (Forge Crash):
    ffmpeg -filters
    podemos exibir os dispositivos que podem ser manipulados pelo ffmpeg, para isso usamos o argumento -devices

    Código (Forge Crash):
    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 (Forge Crash):
    ffmpeg -i zero_no_tsukaima.rmvb zero.mp4
    [​IMG]

    podemos usar o argumento -f para especificar o formato

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

    Código (Forge Crash):
    ffmpeg -i "http://192.168.1.2/kodo/repositorio/anime/Spice%20and%20wolf/Spice-and-Wolf-01.mp4" spice.mkv
    [​IMG]

    é 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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    ffmpeg -i another01.rmvb -vn another01.mp4
    tambem podemos desativar o audio com o argumento -an

    Código (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    ffmpeg -i another01.rmvb -ss 1:31 -to 3:01 anotherop.mp4
    [​IMG]

    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 (Forge Crash):
    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 (Forge Crash):
    ffmpeg -i another01.rmvb -frames 3000 another.mp4
    podemos inserir uma legenda em um video usando o -i tambem

    Código (Forge Crash):
    ffmpeg -i yosuga.mp4 -i kodo.srt kodo.mp4
    [​IMG]

    pelo ffmpeg tambem podemos converter legendas srt para ass

    Código (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    ffmpeg -ss 07:21 -i toaru.mp4 -s 400x300 -frames 1 mini.png
    [​IMG]

    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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    ffmpeg -i xuxa.mp3 -af areverse dilma.mp3
    podemos aplicar esse filtro direto no video tambem para inverter o audio do video

    Código (Forge Crash):
    ffmpeg -i deathnote.mp4 -af areverse saida.mp4
    um filtro para o video é o negate que mostra o video todo em negativo

    Código (Forge Crash):
    ffmpeg -i toradora.mp4 -vf negate tigresa.mp4
    [​IMG]

    com o filtro rotate a gente rotaciona a tela

    Código (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    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 (Forge Crash):
    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]

    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 (Forge Crash):
    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]

    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
     
    • Gostei Gostei x 2
    • Útil Útil x 1
  2. D4rk
    Offline

    D4rk Veterano Veterano VIP Industrial

    Afiliado:
    1 Junho 2013
    Mensagens:
    468
    Sexo:
    Masculino
    Avaliações:
    +770 / -0
    Apelido no Minecraft:
    D4rkness_King
    Muito bom o tutorial!
    Se poder ensinar como converter um video gravado pelo Nvidia Share (2m = 300mb) pra um video que minha internet possa enviar para o yt, eu adoraria.
    PS: O video ta em 1080p60, eu sei que nessa qualidade fica maneiro ter um arquivo pequeno mas eu ja vi que tem como diminuir pelo menos um pouco.
     
    • Gostei Gostei x 1
  3. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    235
    Sexo:
    Masculino
    Avaliações:
    +312 / -0
    opa valeu mano \o, tipo qual o formato gerado pelo nvidia share? dependendo so converter para outro formato ou ate usar outro codec que pode diminuir o tamanho do video, as vezes tudo isso ate sem nenhuma perda. outra forma é diminuir a resolução do video exemplo 1024p -> 900p (uxga) com isso tera uma quantidade menor de pixel para ser armazenado no arquivo o tamanho do arquivo sera bem menor, o problema tera uma perda na qualidade e na resolução do video, mexer no bitrate tambem é uma boa para diminuir o tamanho do arquivo so que tambem tera uma perda na qualidade de transição do video, veja um exemplo aqui que eu converti

    Código (Forge Crash):
    1- nogame.mp4 -> (v: h264, a: aac, r: 360p) 13.532.792 bytes
    2- nogame.mp4 -> (v: h264, a: aac, r: 240p) 8.054.960 bytes
    3- nogame.mp4 -> (v: h264, a: aac, r: 120p) 5.102.584 bytes

    4- nogame.mp4 -> (v: h265, ac: aac, r: 360p) 7.687.907 bytes

    5- nogame.mp4 -> (v: h264, a: sem audio, r: 360p) 10.511.287 bytes
    6- nogame.mp4 -> (v: sem video, a: aac) 2.922.489 bytes
    no exemplo numero 2 o video fico numa resolução menor uns 30% menor do que o 1, no 3 video em uma resolução menor ele fico mais de 50% menor que o numero 1, então diminuindo a resolução tambem diminui o tamanho do arquivo final porem com grande perda na qualidade. outro exemplo é o video 1 que é 13mb na resolução 360p por outro lado o video 4 tambem é 360p com tamanho de 7mb, o diferencial entre eles é o codec usado, o video 1 encodei com h264 e o video 4 com h265 ficando um pouco mais da metade do 1, o problema mesmo foi o tempo que ele demoro para encodar esse video 4 chegando a 7x mais do que o video 1, outro problema que dependendo do player nao vai rodar o video 4 como tambem o nivel de compresão é alto entao dependendo da maquina nao vai conseguir processar (o vlc rodou o video 4 porem rodandno direto no navegador pelo proprio html5 como ele nao tem suporte para esse tipo de codec so escutei o som do video kkk), então depende muito
     
  4. D4rk
    Offline

    D4rk Veterano Veterano VIP Industrial

    Afiliado:
    1 Junho 2013
    Mensagens:
    468
    Sexo:
    Masculino
    Avaliações:
    +770 / -0
    Apelido no Minecraft:
    D4rkness_King
    [​IMG]
    Aqui as informações do video... Aí eu acho que so falta o tamanho que é 314mb. Adoraria poder diminuir isso sem perder tanta qualidade, sem ter que diminuir a framerate e em um formato enviavel para o youtube.
     
  5. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    235
    Sexo:
    Masculino
    Avaliações:
    +312 / -0
    vish mano eu estava lendo aqui os codecs aceito pelo yt é complcado o yt aceita poucos formatos e codecs ( Configurações recomendadas de codificação de envio - Ajuda do YouTube ), unica forma mesmo é mexendo no bitrate, tipo diminui menos de 10% dele que não deve piorar tanto a imagem do video ou vai diminuindo aos poucos conforme a taxa de bitrate atual e veja o quanto precisa diminuir ate começar perceber que ta piorando o video, outra forma é diminuir em quadros especificos exemplo a cada 100fp diminui uma quantidade de bitrate atual naquele quadro depois em outro quadro em 100fp diminui novamente e assim por diante (isso vai diminuir o video e pode passar despercebido aos olhos humanos, ja que o ser humano so consegue enxergar uma quantidade de quadros por segundo ~ o problema disso é como fazer isso, não conheço nenhum programa que faz isso e no ffmpeg vai ter que criar um script parrudo que recorta e junta o video a cada determinado trecho para conseguir esse efeito kkk)
     
    • Útil Útil x 1
    Última edição: 18 Agosto 2017
  6. Alex Argon
    Offline

    Alex Argon Novato

    Afiliado:
    28 Janeiro 2018
    Mensagens:
    5
    Sexo:
    Masculino
    Avaliações:
    +1 / -0
    Bom dia.. Preciso de ajuda no seguinte. Sou usuário básico no FFMPEG e estou tentando converter um vídeo para que fique com as configurações abaixo, mais como sou leigo ainda no assunto não estou conseguindo.. Tenho o FFMPEG instalado no windows 7 64 bits e uso ele pelo CMD. Gostaria de saber se alguém pode me ajudar a converter o vídeo com o seuinte formato.

    Format : MPEG-4
    Format profile : Base Media
    Codec ID : isom (isom/iso2/avc1/mp41)
    File size : 202 MiB
    Duration : 22 min 9 s
    Overall bit rate : 1 278 kb/s
    Writing application : Lavf57.2.100

    Video

    ID : 1
    Format : AVC
    Format/Info? : Advanced Video Codec
    Format profile : [email protected]
    Format settings : CABAC / 3 Ref Frames
    Format settings, CABAC : Yes
    Format settings, ReFrames? : 3 frames
    Codec ID : avc1
    Codec ID/Info : Advanced Video Coding
    Duration : 22 min 8 s
    Bit rate : 1 146 kb/s
    Width : 1 920 pixels
    Height : 1 080 pixels
    Display aspect ratio : 16:9
    Frame rate mode : Variable
    Frame rate : 23.976 (24000/1001) FPS
    Minimum frame rate : 23.974 FPS
    Maximum frame rate : 23.981 FPS
    Color space : YUV
    Chroma subsampling : 4:2:0
    Bit depth : 8 bits
    Scan type : Progressive
    Bits/(Pixel*Frame) : 0.023
    Stream size : 182 MiB (90%)
    Color range : Limited
    Color primaries : BT.709
    Transfer characteristics : BT.709
    Matrix coefficients : BT.709

    Audio

    ID : 2
    Format : AAC
    Format/Info? : Advanced Audio Codec
    Format profile : LC
    Codec ID : mp4a-40-2
    Duration : 22 min 9 s
    Bit rate mode : Constant
    Bit rate : 126 kb/s
    Channel(s) : 2 channels
    Channel positions : Front: L R
    Sampling rate : 44.1 kHz
    Frame rate : 43.066 FPS (1024 SPF)
    Compression mode : Lossy
    Stream size : 19.9 MiB (10%)
    Language : Portuguese
    Default : Yes
    Alternate group : 1
     
  7. Homem Bom
    Offline

    Homem Bom Veterano Veterano VIP Sabotador.com VIP Sabotador.com Ex-Staff

    Afiliado:
    18 Dezembro 2012
    Mensagens:
    2,499
    Sexo:
    Masculino
    Avaliações:
    +1,668 / -0
    Apelido no Minecraft:
    arthur_goelzer
    @kodo no kami :)
    Só postei aqui pra ninguém encher o saco falando que o cara está revivendo tópico antigo...
     
    • Gostei Gostei x 2
  8. Cael
    Offline

    Cael Moderador Sênior do Fórum Equipe GameMods Moderador do Fórum Veterano VIP Sabotador.com

    Afiliado:
    8 Setembro 2014
    Mensagens:
    1,258
    Avaliações:
    +1,770 / -4
    Apelido no Minecraft:
    Cael
    Revivendo topicos :rage:
    JK
    essa area não é livre da regra de reviver topicos?
     
  9. Alex Argon
    Offline

    Alex Argon Novato

    Afiliado:
    28 Janeiro 2018
    Mensagens:
    5
    Sexo:
    Masculino
    Avaliações:
    +1 / -0
    Não sabia que não podia postar.. desculpa
     
    • Amigável Amigável x 1
  10. Mike
    Offline

    Mike Veterano Veterano VIP Sabotador.com VIP Sabotador.com Ex-Staff

    Afiliado:
    1 Setembro 2013
    Mensagens:
    1,531
    Sexo:
    Masculino
    Avaliações:
    +1,074 / -0
    Está tranquilo, podia sim :p
     
  11. natan12_
    Offline

    natan12_ Veterano Veterano VIP Industrial

    Afiliado:
    22 Fevereiro 2014
    Mensagens:
    1,131
    Sexo:
    Masculino
    Avaliações:
    +509 / -0
    Apelido no Minecraft:
    natan12_
    • Gostei Gostei x 1
  12. Alex Argon
    Offline

    Alex Argon Novato

    Afiliado:
    28 Janeiro 2018
    Mensagens:
    5
    Sexo:
    Masculino
    Avaliações:
    +1 / -0
    Ok.. Obrigado.. Sabe de alguém que pode me ajudar?
     
  13. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    235
    Sexo:
    Masculino
    Avaliações:
    +312 / -0
    opa tenta esse comando, tipo uma parte seria essa saida ai, so que nao especifiquei a parte de dimensão do video nem nada disso

    Código (Forge Crash):
    ffmpeg -i seuarquivo -c:v h264 -b:v 1146k -b:a 126 -ar 44.1k -f mp4 saida.mp4
    kkkk
     
  14. Alex Argon
    Offline

    Alex Argon Novato

    Afiliado:
    28 Janeiro 2018
    Mensagens:
    5
    Sexo:
    Masculino
    Avaliações:
    +1 / -0
    Blz é que sou iniciante no ffmpeg, e me informaram que só conseguiria conveerter o vídeo nesse formato com ele.
     
  15. Alex Argon
    Offline

    Alex Argon Novato

    Afiliado:
    28 Janeiro 2018
    Mensagens:
    5
    Sexo:
    Masculino
    Avaliações:
    +1 / -0
    Desculpa fazer outro comentário, mais codifiquei o vídeo e ficou quase 100% igual.. só faltou color BT 709, reframes 3, frame rate mode variável e por último frame rate minimo 23.974 ee frame rate máximo 23.987. Alguma sugestão para isso? obrigado.
     
    Última edição: 29 Janeiro 2018
  16. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    235
    Sexo:
    Masculino
    Avaliações:
    +312 / -0
    foi mal a demora em responder fiquei um tempo off aqui =/

    tipo o reframe se eu nao me engano é argumento -refs:v 3, o maximo e o minimo rate é o -maxrate e -minrate, agora o bt 709 ai sei que tem haver com array de cores so nao tenho ideia como definir ela no ffmpeg kkk
     

Compartilhe esta Página