J'ai fait des expériences avec ffmpeg
et le mpdecimate
filtre.
La sortie est une vidéo avec uniquement les parties "actives" et j'ai utilisé quelques astuces avec le FPS.
La sortie jouera à 25 ips pour le joueur, mais sera à 5 ips en réalité (ajustez le nombre 5 dans les deux setpts
et d'abord fps
filtres pour ajuster la vitesse. Si 25 images par seconde vous convient (ma vidéo de test montre des changements trop rapides pour moi), supprimez le dernier filtre et utilisez-le. -map [c]
au lieu.
Si vous devez ajuster le seuil, regardez ici : (f.e .: mpdecimate=hi=64*12:lo=64*8:frac=0.33
)
mpdecimate
laisserait tomber les cadres, mais la longueur est conservée. Avec setpts
vous le forcez à calculer une durée fixe pour chaque cadre et le premier fps
fait correspondre la vitesse "actuelle" définie par setpts
. Dernier fps
le rend "jouable" (insère des images dupliquées pour remplir la vidéo à 25 images par seconde), (la vidéo à 5 images par seconde sur mon VLC ne fonctionne pas très bien, gelant de temps en temps)
ffmpeg -y -i input.mp4 -filter_complex "[0:v] mpdecimate [a] ; [a] setpts='N/(5*TB)' [b] ; [b] fps=5 [c] ; [c] fps=25 [d]" -map "[d]" -c:v libx264 ouput.mp4
[d]
dans-map
. En ce qui concerne le filtre, j'ai utilisé et la version actuelle de ffmpeg. Pourriez-vous essayer de mettre à jour le vôtre?-vsync 2
, vous pouvez créer un fichier de sortie VFR. (ffmpeg par défaut est le mode CFR pour mp4, VFR pour mkv). Dans ce cas, vous ne devriez pas avoir besoin de doubler les images avec le filtre fps. Bonne idée d'utiliser des setpts pour sauter des sections sans mouvement.ffmpeg in.mkv -vf "mpdecimate, setpts='N/(5*TB)' -preset slow out.mkv
devrait marcher. (vous n'avez pas besoin de -map, car ffmpeg mappe la sortie de votre filtre vidéo par défaut.)