76 votes

Comment accélérer une vidéo de 60X dans ffmpeg ?

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.

100voto

Gyan Points 29437

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

0.01666 es 1/60 en représentation décimale.

27voto

dopexxx Points 380

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

8voto

Jack G Points 214

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.

1voto

StefanQ Points 151

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

0voto

Seulement pour les vidéos, comme les timelapses :

ffmpeg -i input.mp4 -map 0:v -c:v copy -bsf:v h264_mp4toannexb raw.h264

ffmpeg -fflags +genpts -r 30 -i raw.h264 -c:v copy output.mp4

SistemesEz.com

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.

Powered by:

X