O filtro de segmento é ignorado

0

Estou tentando capturar áudio e uma imagem parada e criar segmentos de vídeo de 30 minutos criados a partir dessa imagem parada, além desses 30 minutos de áudio.

Isso é o que eu tentei usar:

find audio/ -name '*.ogg' -execdir bash -c '\ ffmpeg -i ../white-144p.png -i {} \ -acodec libvorbis \ -af silenceremove=0:0:0:-1:0.7:-30dB \ -segment_time 1800 \ -f segment ../video/$(basename {} .ogg)_%03d.mp4' \;

O ffmpeg felizmente ultrapassa a marca dos 30 minutos e escreve o vídeo criado a partir da imagem fixa e do arquivo de áudio inteiro. O que estou fazendo errado?

    
por Priter Icepol 31.05.2018 / 06:43

1 resposta

0

O muxer do segmento, por padrão, ao operar em uma saída de vídeo + áudio, cria apenas um novo segmento quando encontra um quadro-chave de vídeo após o transcurso do segmento_time. O FFmpeg é principalmente um programa para manipular mídia temporizada, isto é, vídeo e áudio. Uma única imagem é tratada como um vídeo de 25 quadros por segundo de um quadro. No seu caso, você precisa mudar isso da seguinte forma:

find audio/ -name '*.ogg' -execdir bash -c '\
ffmpeg -loop 1 -framerate 8 -i ../white-144p.png -i {} \
-acodec libvorbis \
-force_key_frames "expr:gte(t,n_forced*1800)" \
-af silenceremove=0:0:0:-1:0.7:-30dB \
-segment_time 1800 -shortest \
-f segment ../video/$(basename {} .ogg)_%03d.mp4' \;

-loop 1 -framerate 8 gera um fluxo de vídeo infinito de 8 fps para fora da imagem.

-force_key_frames "expr:gte(t,n_forced*1800)" obriga o ffmpeg a gerar um quadro-chave a cada 1800 segundos para que os segmentos possam ser cortados em intervalos precisos.

-shortest é adicionado para que o comando termine quando o áudio é executado - o fluxo de vídeo é infinitamente longo.

    
por 31.05.2018 / 08:46

Tags