ffmpeg loudnorm 2pass em linha única

1

TL; DR exemplo de loudnorm 2pass em linha única usando ffpmpeg (ffmpeg-normalize é single thread / process e não consigo combinar outras opções do ffmpeg)

Não há muitos exemplos de loudnorm, pois é relativamente novo no ffmpeg, uso o ffmpeg há 10 ou mais anos. Eu sou novo em loudnorm no entanto

Eu li:

link

Como posso normalizar o áudio usando o ffmpeg?

que são úteis. no entanto, estou tentando consolidar várias entradas do ffmpeg em 1. Usar a biblioteca ffmpeg-normalize (python) limita você a um único thread / processo também. que é lento

para 2 passagens do ffmpeg x264, você pode simplesmente fazer:

ffmpeg -y -i $FILE -c:v libx264 -b:v 4000k -pass 1 -c:a aac -b:a 256k -f mkv /dev/null && \
ffmpeg -i $FILE -c:v libx264 -b:v 4000k -pass 2 -c:a aac -b:a 256k $FILE.mkv

parece não existir para loudnorm embora. Eu não vejo uma maneira de fazer isso com um único e dois passes?

Atualmente, estou codificando vídeo, depois normalizando o áudio e, finalmente, retirando dados de metadados e capítulos de arquivos, se existirem (independentemente de existirem ou não)

isso cria 3 arquivos descartáveis (incluindo o original)

poder fazer loudnorm em uma única linha me ajudaria a adicionar outras coisas a ele Também é possível fazer um 2pass de x264 e um 2pass de loudnorm simultaneamente? como em processar os dois e depois combiná-los na segunda passagem.

Se possível, eu gostaria de exemplos desses e não links para as coisas. Eu posso google links por conta própria e tenho por várias semanas. Obrigado

    
por user1654164 11.04.2018 / 02:31

1 resposta

1

Não há como executar automaticamente um filtro loudnorm de duas passagens com apenas ffmpeg, mas você pode usar o ffmpeg-normalize

  • Primeira execução: ffmpeg-normalize no vídeo original, copiando o fluxo de vídeo original.
  • Segunda execução: x264-codificação (multithreaded) do arquivo de áudio normalizado ou dos fluxos de vídeo do arquivo original.

O que você deseja alcançar simplesmente não pode ser feito apenas pelo ffmpeg. Você precisa programar sua própria solução, especialmente se você quiser lidar com vários arquivos em paralelo. Isso certamente aceleraria o processo, mesmo que uma única execução do ffmpeg esteja usando apenas um thread.

Como ponto de partida, há também um script Ruby mais simples no repositório do FFmpeg . Ele executa dois passos barulhentos, lendo as estatísticas da primeira execução. Você pode ser capaz de modificá-lo para executar adicionalmente a codificação x264 de duas passagens com multithreading, ou seja, executar o primeiro x264 pass na primeira execução, o segundo na segunda execução:

Primeira passagem:

ffmpeg -y -i $FILE -c:v libx264 -b:v 4000k -pass 1 -filter:a loudnorm=print_format=json -f mkv /dev/null

Leia as estatísticas JSON da loudnorm output (por exemplo, usando o analisador JSON do Python ou qualquer outra ferramenta como grep ou awk ) e execute a segunda passagem:

ffmpeg -i $FILE -c:v libx264 -b:v 4000k -pass 2 -filter:a loudnorm=linear=true:measured_I=$input_i:measured_LRA=$input_lra:measured_tp=$input_tp:measured_thresh=$input_thresh -c:a aac -b:a 256k $FILE.mkv

Em que $input_i , $input_lra , $input_tp , $input_thresh são os valores lidos da primeira passagem.

    
por 11.04.2018 / 09:08