# 1 Pour estomper simultanément l'entrée / la sortie audio:
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
Les temps de fondu sont en secondes .
# 2 Automatiquement? Non, mais voir la solution de contournement ci-dessous
Vous pouvez d'abord exécuter ffprobe pour obtenir la durée.
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
Vous obtiendrez quelque chose comme ceci:
video|13.556000
audio|13.816000
Vous pouvez ensuite utiliser ce qui précède pour placer vos fondus. Ces temps sont en secondes.
solution de contournement
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 a une sseof
option qui permet de rechercher une entrée depuis la fin. Nous pouvons l'utiliser pour atteindre notre objectif. Donc, nous alimentons l'entrée deux fois, la deuxième fois n'ingérant que la dernière seconde. Nous demandons à FFmpeg de conserver les horodatages, afin que ffmpeg préserve la position temporelle de cette portion de queue.
Nous appliquons un fondu à cette queue, puis superposons le résultat sur l'entrée complète. Puisqu'il s'agit du même fichier multimédia, le premier plan recouvre complètement l'arrière-plan et, depuis qu'il a copyts
été appliqué, la superposition se produit sur le cadre identique correspondant dans l'entrée d'arrière-plan.
Pour l'audio, nous créons un audio factice vierge d'une durée de 2 secondes, puis appliquons un fondu audio de l'audio principal à cet audio factice. Étant donné que le 2e audio est vierge, il s'agit en fait d'un fondu sortant pour l'entrée principale. Le -shortest
est ajouté pour laisser de côté certaines parties de l'audio factice après le fondu enchaîné.
-report
ajouté et partagez le rapport.C'est un piratage terrible, mais cela pourrait fonctionner si tout ce que vous voulez faire est un fondu entrant / sortant audio mais ne savez pas exactement combien de temps le clip est:
[edit 2019-07-24: Notez que cette solution n'est pas bonne pour les solutions de streaming car elle nécessite que la piste complète soit traitée avant que le premier octet puisse être streamé]
une autre option que je dois utiliser
acrossfade
avec une piste silencieuse:la source
La réponse à la question 2 est un OUI retentissant! Je cherchais la même fonctionnalité et j'ai fini par écrire un script bash qui demande la durée du fondu en secondes et calcule la trame initiale du fondu sortant:
Les fondus nécessitent un ré-encodage, donc l'utilisation d'une
crf
valeur faible pourlibx264
donne un ré-encodage de haute qualité. Les commentaires devraient expliquer tout le reste.la source
automatically figure out the duration
utilise effectivementffprobe
, qui est installé avecffmpeg
. Qui a dit quoi que ce soit sur toute restriction du nombre de commandes ou*nix
? Il semble que l'OP utilise une version d'UNIX. Non.exe
dans laffmpeg
commande. J'utilise moi-mêmeOS X
ce qui est construitUNIX
mais qui ne l'est pasUNIX
.ffprobe
fait partie intégrante de laffmpeg
distribution. Vous vous attaquez aux lentes pour sauver la face de l'OMI.