FFMPEG/x264: posso usar a passagem 1 de uma sessão de codificação como passagem 2 para outra?

FFMPEG/x264: posso usar a passagem 1 de uma sessão de codificação como passagem 2 para outra?

Pergunta:

É legal usar uma codificação "passagem 1" de uma fonte de vídeo em uma resolução/taxa de bits como entrada para uma codificação "passagem 2" da mesma fonte em umdiferenteresolução/taxa de bits? Eu tentei e foivejaeeemfuncionar, mas não tenho certeza se isso acontecerá no caso geral: o perfil do fluxo (escolha do quadro I/P/B, etc.) parece diferente de usar os mesmos parâmetros para ambas as passagens, mas também parece "bom o suficiente".

Estou no ponto em que preciso de uma resposta confiável sobre este assunto.

Por queem tarnação 1Você faria isso?

Porque a codificação em duas passagens corrige um bug enlouquecedor no FFMPEG (x264, na verdade) que provavelmente não será corrigido tão cedo: dependendo da velocidade da sua máquina, o primeiro ~ 1 segundo ou mais do vídeo geralmente terá um efeito altamente inapropriado taxa de bits. Isso é facilmente reproduzido com um fluxo de origem de alta taxa de bits transcodificado para uma taxa de bits baixa em uma máquina muito rápida (como umEC2 c4.8xgrande). Um MacBook Pro quadcore i7 inativoNÃO Ésuficiente para reproduzir este bug.

Será ouEXTREMAMENTEalto:

  • CBR de passagem única semVBVEspecificadas

    (ignore o fato de que CBR sem VBVnão é CBR de jeito nenhum)

ou muito baixo:

  • CBR de passagem única comVBV
  • VBR de passagem única:Escala QcomVBVe taxa máxima

As medições de qualidade VIFp e SSIM mostram que as taxas de bits mais baixas/altas correspondem de fato a uma qualidade desnecessariamente reduzida/aumentada (ou seja, a taxa de bitsnão deveriaforam maiores ou menores).

Fazer uma codificação CBR de duas passagens funcionaótimoe resolve o problema...se você tiver tempo para isso. Infelizmente, não posso me permitir a latência de uma codificação de duas passagens para uma única resolução.

Então, o que você quer fazer?

Atualmente estou realizando uma transcodificação inicial em uma resolução mais baixa (480). Isso cobrirá o maior número possível de dispositivos de reprodução. Eu gostaria de usar isso como minha passagem 1. Como a resolução 480 é uma droga, posso simplesmente postar aquela passagem 1 como minha 480, independentemente de qualquer taxa de bits boba no primeiro segundo do vídeo.

Eu gostaria então de usaras informações da passagem 480 1e só passei 2 em minhas resoluções mais altas. No caso CBR/VBV, seria:

ffmpeg -i source.mp4 -pass 1 -vf  scale=852:480 -c:v libx264 -b:v 1000k ... 480.mp4
ffmpeg -i source.mp4 -pass 2 -vf scale=1280:720 -c:v libx264 -b:v 2500k ... 720.mp4

Barney Google

informação relacionada