# 1 Per sfumare contemporaneamente l'audio in / out:
ffmpeg -i clip.mp4 -vf 'fade=in:0:30,fade=out:960:30'
-af 'afade=in:st=0:d=1,afade=out:st=32:d=1'
-c:v libx264 -crf 22 -preset veryfast fadeInOut.mp4
I tempi di dissolvenza sono in secondi .
# 2 automaticamente? No. Ma vedi la soluzione alternativa di seguito
Puoi prima eseguire ffprobe per ottenere la durata.
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
Otterrai qualcosa del genere:
video|13.556000
audio|13.816000
È quindi possibile utilizzare quanto sopra per posizionare le dissolvenze. Questi tempi sono in secondi.
Soluzione
ffmpeg -i clip.mp4 -sseof -1 -copyts -i clip.mp4 -filter_complex
"[1]fade=out:0:30[t];[0][t]overlay,fade=in:0:30[v];
anullsrc,atrim=0:2[at];[0][at]acrossfade=d=1,afade=d=1[a]"
-map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -shortest fadeInOut.mp4
FFmpeg ha sseof
un'opzione che consente di cercare un input dalla fine. Possiamo usarlo per raggiungere il nostro obiettivo. Quindi alimentiamo l'input due volte, con la seconda volta ingerendo solo l'ultimo secondo. Diciamo a FFmpeg di preservare i timestamp, in modo che ffmpeg preservi la posizione temporale di questa porzione di coda.
Applichiamo una dissolvenza su questa coda e quindi sovrapponiamo il risultato sull'input completo. Dal momento che sono lo stesso file multimediale, il primo piano copre completamente lo sfondo e, poiché è copyts
stato applicato, la sovrapposizione avviene sul frame identico corrispondente nell'input di sfondo.
Per l'audio, creiamo un audio fittizio vuoto della durata di 2 secondi, quindi applichiamo una dissolvenza incrociata audio dall'audio principale a questo audio fittizio. Poiché il secondo audio è vuoto, si tratta, in effetti, di una dissolvenza per l'ingresso principale. La -shortest
si aggiunge omettere porzioni di audio manichino dopo il verificarsi della dissolvenza incrociata.