O problema
Sua saída é silenciosa porque seu fade out faz tudo em silêncio depois de desaparecer, então não há nada para o fade trabalhar. Em seguida, o fade in torna tudo silencioso até que ocorra o fade in e, portanto, "eliminando" sua primeira falha, resultando em uma saída silenciosa.
A solução
Você pode usar a edição da linha do tempo para ativar filtros em horários específicos.
Exemplo de comando
ffmpeg -i input.asf -af "afade=enable='between(t,10,30)':t=out:st=10,afade=enable='gte(t,30)':t=in:st=30" -c:v copy output.asf
Notas
-
'between(t,10,30)'
tornará o fade ativo entre 10 a 30 segundos. -
'gte(t,30)'
ativará o desvanecimento no filtro em 30 segundos. -
-c:v copy
copiar o fluxo (re-mux) no vídeo, pois talvez você não precise filtrar e codificar novamente isso.
Entradas com vários fluxos de áudio
Sua entrada pode conter vários fluxos de áudio. No exemplo ffmpeg
saída do console abaixo de [0:0]
é o vídeo, [0:1]
é o primeiro fluxo de áudio e [0:2]
é o segundo fluxo de áudio:
Input #0, matroska,webm, from 'input.mkv':
Metadata:
ENCODER : Lavf56.4.101
Duration: 00:00:30.28, start: 0.068000, bitrate: 265 kb/s
Stream #0:0: Video: h264 (High 4:4:4 Predictive), yuv444p, 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16p, 112 kb/s
Stream #0:2: Audio: mp3, 44100 Hz, stereo, s16p, 112 kb/s
Exemplo de comando
Você terá que fazer um fade out / in para cada fluxo:
ffmpeg -i input.asf -filter_complex \
"[0:a:0]afade=enable='between(t,10,30)':t=out:st=10,afade=enable='gte(t,30)':t=in:st=30[a0] \
[0:a:1]afade=enable='between(t,10,30)':t=out:st=10,afade=enable='gte(t,30)':t=in:st=30[a1]" \
-map 0:v -map "[a0]" -map "[a1]" -c:v copy output.asf
Notas
-
Use
-filter_complex
em vez de-af
para gráficos complexos . Gráficos de filtro complexos envolvem uma ou mais entradas e uma ou mais saídas. -
[0:a:0]
refere-se ao primeiro fluxo de áudio da primeira entrada; Como alternativa, você pode usar[0:1]
como mostrado na saída do consoleffmpeg
acima, mas acho que a sintaxe é menos flexível porque, para outras entradas,[0:1]
poderia se referir a um fluxo de vídeo.[0:a:1]
refere-se ao segundo fluxo de áudio da primeira entrada; Como alternativa, você pode usar[0:2]
conforme mostrado na saída do consoleffmpeg
acima.