/ / Por que um fluxo de traço ffmpeg webm é muito maior que os outros? - ffmpeg, webm, mpeg-traço

Por que um traço do webm ffmpeg é muito maior que os outros? - ffmpeg, webm, mpeg-dash

Durante o verão, trabalhei na montagem de umscript que pegou um fluxo de vídeo / mp3 x264 e o dividiu em diferentes fluxos para que funcionasse via MSE-DASH. (Baseado fortemente nas instruções no site webmproject.org) Esses mesmos scripts deixaram de funcionar, transformandoum vídeo de 6 GB em vários vídeos de 25 Gb. Acompanhei as atualizações do ffmpeg e, portanto, não sei quando ele parou de funcionar, mas acho que foi devido à maneira como a implementação do DASH Webm foi atualizada.

Encontrei um novo método que funciona melhor, mas ainda tem um grande problema com um fluxo. Eu esperava que alguém pudesse explicar como essa codificação funciona, para que eu pudesse entender a causa subjacente.

#!/bin/bash
COMMON_OPTS="-map 0:0 -an -threads 11 -cpu-used 4 -cmp chroma"
WEBM_OPTS="-f webm -c:v vp9 -keyint_min 50 -g 50 -dash 1"

ffmpeg -i $1 -vn -acodec libvorbis -ab 128k audio.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 500k -vf scale=1280:720 -y vid-500k.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 700k -vf scale=1280:720 -y vid-700k.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1000k -vf scale=1280:720 -y vid-1000k.webm &
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1500k -vf scale=1280:720 -y vid-1500k.webm

A transcodificação ainda não está completa, mas você pode ver para onde está indo:

-rw-r--r--  1 user  staff    87M Jan  4 23:27 audio.webm
-rw-r--r--  1 user  staff    27M Jan  4 23:42 vid-1000k.webm
-rw-r--r--  1 user  staff   285M Jan  4 23:42 vid-1500k.webm
-rw-r--r--  1 user  staff    15M Jan  4 23:42 vid-500k.webm
-rw-r--r--  1 user  staff    20M Jan  4 23:42 vid-700k.webm

A variação de 1500k é desproporcionalmente maior que os outros fluxos.

O outro problema é que, quando uso um menorvídeo, digamos oito ou nove minutos, a configuração acima é executada conforme o esperado e tudo é perfeito. Não sei onde está o limite para isso, pois cada teste custa muito tempo e poder de processamento, mas se for menos de dez minutos, funciona e se for mais de uma hora, produz grandes arquivos.

Respostas:

1 para resposta № 1

Se você deseja manter a taxa de bits do vídeo restrita a algum valor, não basta usar apenas -b:v. Dependendo da fonte (alto movimento, complexidade da cena), a taxa de bits real aumentará.

Você precisa especificar um -maxrate e -bufsize também.

Ou seja. para obter um vídeo de taxa de bits variável (VBR) restrito a cerca de 1500k - o pico pode ser maior dependendo do tamanho do VBV - você usaria:

-b:v 1500k -maxrate 1500k -bufsize 1500k

Para taxa de bits constante (CBR), o melhor resultado é alcançado com um VBV de quadro único. Exemplo para 25 qps (1500/25 = 60):

-b:v 1500k -minrate 1500k -maxrate 1500k -bufsize 60k