Usando ffmpeg para codificar um vídeo de alta qualidade [fechado]


92

Eu tenho um conjunto de quadros de vídeo salvos como imagens em um diretório e estou tentando codificá-los em um vídeo de boa qualidade, porém cada configuração e cada formato que tento produz artefatos muito perceptíveis.

O comando básico é este:

ffmpeg -r 25 -i %4d.png myvideo.mpg

e eu tentei os sinalizadores minrate e maxrate. Qualquer um dos formatos {mpg, avi, mov, flv} serve.

Alguma sugestão de configurações? O tamanho final do arquivo não é um problema.


7
No meu Mac, eu uso o seguinte comando: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Descobri que, para forçar a taxa de quadros, tive que especificá-la para os arquivos de entrada e saída. Este codec parece funcionar para mim - talvez você não precise especificá-lo. Eu só queria incluir o que fiz porque passei muito tempo trabalhando nisso. A única desvantagem é que minhas imagens de entrada são de alto contraste (bolas azuis e vermelhas contra um fundo branco) e, mais tarde no filme, as bolas começam a ficar todas da mesma cor escura - um efeito de contraste indesejado.
jvriesem de

Obrigado @jvriesem! Isso funcionou muito bem para mim.
Dan Loewenherz

Sugiro fazer esta pergunta em StackOverflow for Multimedia Systems
Hamed

c ++ versão stackoverflow.com/a/43464269/6180077 visite este link para trabalhar com o aplicativo gravador de tela em formato FFMPEG c ++ mp4.
Abdullah Farweez

verifique este link que demonstra a gravação do arquivo de vídeo usando libs FFMPEG programaticamente: stackoverflow.com/a/43464269/6180077
Abdullah Farweez

Respostas:


64

Um par de coisas:

  • Você precisa definir a taxa de bits do vídeo. Nunca usei minrate e maxrate, então não sei exatamente como eles funcionam, mas ao definir a taxa de bits usando o -bswitch, consigo obter vídeo de alta qualidade. Você precisa encontrar uma taxa de bits que ofereça um bom equilíbrio entre compactação e qualidade de vídeo. Você pode ter que experimentar isso porque tudo depende do tamanho do quadro, da taxa de quadros e da quantidade de movimento no conteúdo do seu vídeo. Tenha em mente que o DVD tende a ser em torno de 4-5 Mbit / s em média para 720x480, então eu geralmente começo daí e decido se preciso de mais ou menos e então apenas experimento. Por exemplo, você pode adicionar -b 5000kà linha de comando para obter mais ou menos taxa de bits de vídeo DVD.

  • Você precisa especificar um codec de vídeo. Se você não fizer isso, o ffmpeg assumirá como padrão MPEG-1, que é bastante antigo e não fornece a quantidade de compactação do MPEG-4 ou H.264. Se sua versão do ffmpeg for construída com suporte para libx264, você pode especificar -vcodec libx264como parte da linha de comando. Caso contrário -vcodec mpeg4, também fará um trabalho melhor do que o MPEG-1, mas não tão bem quanto o x264.

  • Existem muitas outras opções avançadas que o ajudarão a obter a melhor qualidade com as taxas de bits mais baixas. Dê uma olhada aqui para alguns exemplos.


6
A taxa de bits constante é ruim para a qualidade. Usar o fator de taxa constante é superior (é um dos modos de operação x264). Por exemplo: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 é o CRF com perda de qualidade muito marginal, mas a taxa de bits provavelmente será baixa. E você pode tentar valores maiores de CRF se precisar de um tamanho de arquivo menor. E como você vê, isso é muito simples.
Nome de exibição

observe que -b deve estar antes do vídeo, mas após a entrada -i
mateuszb

45

Você precisa especificar a opção -vb para aumentar a taxa de bits do vídeo, caso contrário, você obtém o padrão que produz vídeos menores, mas com mais artefatos.

Experimente algo assim:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg


1
isso funciona bem para mim, obrigado;)
thiago.adriano26

15

Certifique-se de que os PNGs estão totalmente opacos antes de criar o vídeo

por exemplo, com imagemagick, dê a eles um fundo preto:

convert 0.png -background black -flatten +matte 0_opaque.png

Em meus testes, nenhuma taxa de bits ou codec é suficiente para fazer o vídeo parecer bom se você alimentar PNGs do ffmpeg com transparência


Isso resolveu o problema para mim.
Matěj Kripner

0

A menos que você faça algum tipo de trabalho de pós-processamento, o vídeo nunca será melhor do que os quadros originais. Também como um flip-book, se você tiver um grande "salto" entre os quadros-chave, ficará engraçado. Geralmente, você precisa de "interpolações" suficientes entre os quadros-chave para fornecer uma animação suave. HTH


As imagens são originalmente de uma sequência de vídeo. Eles tiveram um pouco de recorte, dimensionamento e outras coisas feitas com imagemagick. Os efeitos são definitivamente artefatos de compressão. Já vi este post, que parece ter uma resposta: stackoverflow.com/questions/3158235/…
CakeMaster

@CakeMaster Eu não mencionei a compactação com perdas porque você tem imagens ".png" em seu exemplo. .png podem apresentar perdas, mas acho que geralmente não são. .jpg's quase sempre apresentam perdas, portanto, os artefatos ao usá-los. Se puder, você pode salvar novamente seu .png com compactação sem perdas.
JustBoo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.