Embora a qualidade percebida seja subjetiva, você pode ajustar a qualidade geral usando a variável -quality
, por exemplo -quality good
. A taxa de bits afetará a qualidade que você definiu como 0, o que presumo ser um erro.
Estou trabalhando em um programa raw to timelapse e estou usando o ffmpeg para gerar um vídeo a partir de uma sequência de JPGs que meu programa gera.
O usuário pode selecionar diferentes codecs, como libx264, mjpeg, vp8, vp9.
Estou obtendo bons resultados com h264 e mjpeg, mas vp8 me dá alguns vídeos muito ruins, mesmo que eu tenha definido a qualidade bem alta, e o tamanho do arquivo é comparável aos de h264. / p>
Estou usando as seguintes configurações:
ffmpeg.exe -framerate 12 -i "./output/img_%05d.jpg" -dst_range 1 -color_range 2 -c:v libvpx -b:v 0 -threads 8 -speed 2 -crf 8 "./output/video.webm"
Você pode ver um exemplo de vídeo aqui: link (os problemas de codificação são visíveis principalmente após 9 segundos).
Alguém no Stack Overflow disse que o VP8 precisa de dois passes, mas isso não é prático. É possível obter bons resultados em um único passe? Algo comparável ao h264 em termos de tamanho / qualidade?
A única maneira de obter resultados de boa qualidade em uma única passagem é usar um fator de taxa constante ( CRF ). Por favor, leia o VP8 e VP9 guias para mais informações.
Ao definir -crf X
, cada quadro é codificado com esse nível de qualidade de destino X
. No entanto, uma restrição adicional é aplicada no codificador, dependendo da taxa de bits definida por -b:v
:
Se -b:v 0
for usado, a taxa de bits pode variar livremente dependendo da sequência de origem e da qualidade de destino definida. Esta é a opção que você deseja para um “modo CRF normal”, equivalente a -crf X
com x264
.
Se -b:v
for definido como uma taxa de bits positiva, essa restrição será usada como uma taxa de bits máxima.
Por exemplo, com o VP8, usar -crf 10
e -b:v 500K
para um vídeo 1080p sempre reduzirá a taxa de bits para 500 kBit / s em vez de permitir que a qualidade varie livremente, fazendo com que a saída pareça ruim, já que 1080p vídeo requer muito mais do que 500 kBit / s. A configuração de -crf 10 -b:v 5M
faria mais sentido para o VP8. Para o VP9, você geralmente deseja valores mais baixos de taxa de bits, já que é mais eficiente.
Se -b:v
não for definido, o ffmpeg escolherá um padrão de 200 kBit / s, o que provavelmente resultará em má qualidade (a menos que você tenha uma seqüência de baixa resolução, fácil de codificar). Então, não faça isso quando usar -crf
.
Você pode verificar as configurações do codificador observando a saída produzida pelo ffmpeg quando executada com a configuração -loglevel debug
.
No seu caso específico, não vejo nada de errado com as opções, exceto talvez -speed 2
. Definir isso desativará alguns recursos do codificador em detrimento da precisão do controle de taxa. Remova a opção e veja se isso melhora sua qualidade.
Observe que a opção -quality
é enganosa; é uma opção legada agora chamada -deadline
(veja ffmpeg -h encoder=libvpx
para mais informações). As únicas configurações viáveis para -quality
são good
ou best
(e realtime
, mas isso é para transmissão ao vivo). good
é o padrão, então você não precisa especificá-lo explicitamente. best
resultará em tempos de codificação muito longos.