J'ai trouvé cet exemple
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
mais j'ai une vidéo que je veux accélérer de 60 fois, pas seulement de 2 fois.
J'ai trouvé cet exemple
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
mais j'ai une vidéo que je veux accélérer de 60 fois, pas seulement de 2 fois.
Il suffit de multiplier par l'inverse du facteur de vitesse.
ffmpeg -i input.mkv -filter:v "setpts=PTS/60" output.mkv
Cela n'affecte pas la vitesse de l'audio. Utilisez -an
pour ne pas inclure l'audio dans la sortie.
Une méthode plus rapide, mais qui peut avoir des résultats inattendus avec l'audio (pauses ou async) :
ffmpeg -itsscale 0.01666 -i input.mkv -c copy output.mkv
où 0.01666
es 1/60
en représentation décimale.
Si vous voulez aussi accélérer l'audio, vous devez faire ceci :
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2[a]" -map "[v]" -map "[a]" output.mkv
Docs : https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video
La commande ci-dessus fonctionne si vous voulez multiplier par 2 la vitesse. Si vous voulez multiplier par n'importe quel x
(entre 0 et 2), les paramètres deviennent :
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=<1/x>*PTS[v];[0:a]atempo=<x>[a]" -map "[v]" -map "[a]" output.mkv
Par exemple, si vous voulez multiplier par 1,15, la commande est la suivante
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.87*PTS[v];[0:a]atempo=1.15[a]" -map "[v]" -map "[a]" output.mkv
Pour un projet de stop-motion où je voulais réduire le délai entre les images (au lieu de supprimer des images), je voulais accélérer l'audio et la vidéo plusieurs fois au-delà de 2x également. Pour une vitesse de 60x, faites ce qui suit. C'est peut-être un peu verbeux, mais cela fonctionne très bien. Le problème est que atempo ne peut pas être supérieur à deux ou inférieur à 0,5, nous devons donc répéter atempo plusieurs fois pour que le son atteigne la vitesse souhaitée.
ffmpeg -i input.mkv -filter:v "setpts=PTS/60" -filter:a "atempo=2,atempo=2,atempo=2,atempo=2,atempo=2,atempo=1.875" output.mkv
Appuyez sur Ctrl+Shift+I, et cliquez sur l'onglet "console". Dans la console, pour commencer à taper/coller du texte, cliquez dans l'espace blanc juste à droite du chevron horizontal bleu (double chevron dans FireFox). Dans Firefox, tapez allow pasting
dans la console pour permettre le copier-coller, puis Ctrl+A puis retour arrière pour supprimer ce texte. Ensuite, copiez et collez ce code dans la console et appuyez sur Enter à exécuter. Le code fonctionne également avec le ralentissement de la vidéo.
var speed=eval(prompt("Enter speed up or slowdown factor (>1 is speedup, " +
"<1 is slowdown; can use 1/X for slowdown): ", "60"));
var k=speed, audio="";
while (2 < k && k === k) k /= 2, audio+="atempo=2,";
while (k < 0.5 && k === k) k *= 2, audio+="atempo=0.5,";
audio += "atempo=" + k;
prompt(
"Copy the following commandline: ",
'ffmpeg -i input.mkv -filter:v "setpts=PTS/' + speed +
'" -filter:a "' + audio + '" output.mkv'
);
Ce code vous invite à saisir une valeur et vous présente le résultat. Saisie de 60
permet une accélération de 60 fois, en entrant 0.1
donne un ralentissement de 10X, et l'entrée de 1/30
donne un ralentissement de 30X. J'espère que cela vous aidera.
Pour moi, utiliser setpts
en collaboration avec atempo
j'ai laissé le taux audio bas (et avec une faible hauteur de son). Ce qui a finalement fonctionné pour moi est :
#!/bin/sh
# Note: First use ffprobe to get the audio rate.
# Adjust below if it's not 48000.
# The example below increases the speed of audio and video
# rate by a factor of 4 (adjust as needed).
# Sources:
# https://superuser.com/questions/1261678/how-do-i-speed-up-a-video-by-60x-in-ffmpeg
# https://stackoverflow.com/questions/53374590/ffmpeg-change-tone-frequency-pitch-audio
ffmpeg -i $1 -filter:v "setpts=PTS/4" -af "asetrate=48000*4,aresample=48000" out.mp4
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.