FFMPEG / x264: Passagem única: como aumentar as taxas de bits do horário de início?

FFMPEG / x264: Passagem única: como aumentar as taxas de bits do horário de início?

Ao usar o modo de passagem única com um tamanho VBV especificado, libx264 irá inicialmente "saco de areia" a taxa de bits, presumivelmente devido à falta de evidências (ou talvez até mesmo a um bug). (Esta é uma continuação irônica desta questão, que tratava de taxas de bits iniciais excessivamente ALTAS com codificação de passagem únicasemuma especificação VBV)

Por favor, veja os gráficos de taxa de bits na parte inferior para obter mais informações: observe a queda original, seguida por uma correção excessiva ("Ei, ainda tenho alguns bits!") antes de uma normalização. Observe que isso é corrigido na solução de duas passagens. A falta do quadro I inicial nesses dois gráficos é provavelmente um bug de ferramenta (o valor PTS do quadro I inicial é de 0,15 segundos).

Este efeito evita um processamento paralelo de “divisão, codificação e remontagem” de um ativo longo, pois você obterá uma batida de qualidade no início de cada segmento.

Isso pode ser corrigido por meio da codificação de passagem dupla, uma solução inaceitável para transmissões ao vivo (embora, se paralelizada, poder-se-ia pagar o custo da codificação de passagem dupla).

Há duas soluções que espero: qualquer assistência seria mais que bem-vinda.

  1. Uma solução de passagem única em que o codificador é instruído a armazenar muito mais quadros inicialmente antes de produzir a saída, reduzindo assim o efeito de saco de areia inicial

  2. Uma maneira de realizar a codificação limitada de duas passagens como um "pipe": a codificação completa de duas passagens como um pipe não faz sentido, mas deveria ser possível ter "micropassagens" onde o período de feedback da passagem é algo como um segundo. Isto é muito menos ideal do que uma solução de passagem única para contornar um efeito tão curto, mas seria aceitável se (1) for impossível.

    • Gráfico de taxa de bits de passagem única: observe o "mergulho do saco de areia" inicial. Gerado com:

ffmpeg -i 1080-60fps.mp4 -vf "escala = 1200:720" -b:v 1000k -bufsize 1000k onepass.mp4

insira a descrição da imagem aqui

  • Gráfico de taxa de bits de duas passagens: este é o resultado quase ideal. Observe que esta forma final não precisa ser necessária: basta evitar o saco de areia inicial. Gerado com:

ffmpeg -i 1080-60fps.mp4 -vf "escala=1200:720" -b:v 1000k -pass 1 -f mp4 /dev/null

ffmpeg -i 1080-60fps.mp4 -vf "escala = 1200:720" -b:v 1000k -pass 2 twopass.mp4

Gráfico de taxa de bits de duas passagens: este é o resultado esperado

  • Seção do primeiro quadro na codificação de passagem única

insira a descrição da imagem aqui

  • Seção do primeiro quadro na codificação de duas passagens

insira a descrição da imagem aqui

informação relacionada