Sequencage d'une video avec FFmpeg

A un endroit précis

Le problème exposé dans ce sujet a été résolu.

Coucou les agrumes,

Préambule

J'ai vue quelques trucs sur Internet à propos de FFmpeg et tout l'monde avait l'air satisfait de son fonctionnement. Il est visiblement capable de faire beaucoup de chose (extraction des données d'une video. J'ai besoin de décomposer un mouvement de tracking dans un film et ce de la manière la plus précise possible, alors j'me suis dit Let's go !

bon j'suis pas un pro de l'informatique et quand j'ai telechargé e *.7z, que je l'ai dépacké je me suis rendu compte qu'il n'y avait aucun executable. Là j'me suis dit "ça y est t'es tombé sur un fichier qui va te demander des efforts… pas un simple setUp". Et après moulte recherche, j'ai pu l'installer !

Démarrer > Poste de Travail [clic droit] > propriétés > Avancé > Variable d'environnement > Nouveau [Variable Administrateur] > nom: "Path" Valeur: "Chemin/Vers/Le/Dossier/Bin/De/FFmpeg/"

L'utilisation

Tout se fait par l'invite de commande windows, il faut donc écrire des lignes de codes de ce type :

1
FFmpeg -version

En suivant quelques Wiki j'arrive à comprendre ceci, pour extraire des images :

1
ffmpeg -i "film.mkv" -r 25 -f image2 "./ImageDuFilm/%10d.png"

ffmpeg : ça dit à la console ce qu'on veut utiliser -i : nous sert à déterminer le fichier d'entré -r : le nombre d'image par seconde -f : permet de lui dire qu'on impose une extension et une manière de nommer les images

C'est parfait.

Le problème

Bah la séquence que je souhaite analyser se trouve à 30 minutes, et ça c'est chiant. Alors pour inserer une unité de temps qui dise au logiciel "démarre à partir de là" il m'a fallu chercher un peu plus :

1
ffmpeg -i "film.mkv" -ss 00:00:00 -vf fps=1 "./ImageDuFilm/Fichier.png"

-ss : Le début de la prise d'image -vf : une autre manière de détermine le nombre d'image à prélever (on peut préciser FPS)

Le problème de ce nouveau code c'est qu'il ne sort qu'un fichier image et non une séquence. J'ai donc bricoler un peu, sans succès, en ajoutant -f image2 notamment.

1
ffmpeg -i "film.mkv" -ss 00:30:00 -vf fps=25 -f image2 "./ImageDuFilm/%10d.png"

Sans succès, je ne comprend pas vraiment quel est le problème. Quelqu'un aurait une solution ?

En bref :

Comment extraire une suite d'image d'un film à l'aide de FFmpeg, mais à partir d'un temps donné ? Et ce sur une page de temps un peu longue… ?

Merci de votre lecture, et pour vos futures réponses ! :)


EDIT : Ah bah en fait je ne sais pas pourquoi, au bout d'un moment ça a fonctionné, fallait juste être très patient : O_o

+0 -0

Je me permets de déterrer, car il y a pas mal de confusions et d’imprécisions qu’il me semble judicieux d’aborder.

Autres solutions

FFmpeg est un outil puissant, mais plus adapté à l’automation et aux traitements de masse en serveur ou par des applications tierces, c’est pas le plus simple à utiliser quand on n’est pas familier avec ce genre d’outils.

Il y a des programmes avec des interfaces graphiques et qui sont plus adaptés à ça:

  • Beaucoup de logiciels de montage vidéo permettent comme Openshot d’exporter des séquences d’images. Une table de montage est plus agréable à utiliser pour découper les parties qu’on veut, et peut même faire la partie tracking.
  • La suite de création 3D Blender a un séquenceur vidéo qui peut sortir des images et un système de motion tracking si ça t’intéresse.
  • Le lecteur vidéo VLC permet d'enregistrer la lecture en cours en une autre vidéo.

FFmpeg

Installation

FFmpeg n’est qu’un outil en ligne de commande, il ne s’utilise pas comme un programme avec une interface graphique. C’est entre autres pour ça qu’il n’a pas d’installation à proprement parler. On peut ouvrir l’invite de commande dans le dossier dans lequel se trouve ffmpeg.exe pour pouvoir lancer ffmpeg directement, ou alors depuis n’importe où ailleurs, mais en indiquant le chemin vers ffmpeg.exe, de la même façon que pour les fichiers d’entrée/sortie traités par ffmpeg.

Ajouter le chemin de ffmpeg dans les environnements de Windows n’est utile que pour pouvoir appeler ffmpeg depuis n’importe où, plutôt que de devoir faire les manœuvres ci-dessus

Convertir une vidéo en séquence d’image

FFmpeg est fait pour être très simple à utiliser. Une des philosophies est d’avoir des comportements par défauts "les plus probables" à partir de rien. C’est pour ça que simplement taper ffmpeg -i "entree.avi" "sortie.mp4" va simplement encoder la vidéo entree en avc et mp3 de qualité moyenne dans un mp4 : c’est ce que la plupart des gens ont besoin pour avoir une vidéo supportée sur un maximum de supports. Changer l’extension du fichier de sortie va adapter le conteneur, mais aussi les codecs et autres paramètres d’encodages possibles en fonction de la nouvelle contrainte.

Similairement, pour sortir une séquence d’image, il suffit simplement de ffmpeg -i "entree.avi" "sortie_%04d.png".

Le fait de choisir l’extension d’image PNG force le format d’image, et %04d permet d’écrite une séquence dont chaque frame sera écrite dans un fichier individuellement nommé avec son numéro indenté à quatre chiffres. Pas besoin de -f image2, le nom du fichier rend la situation non seulement possible, mais implicite. Pas besoin non-plus de -vf fps=25" ou r 25 : on sort une séquence d’image, pas une vidéo, ça n’a pas de cadence d’images en sortie donc pas besoin d’en spécifier une.

Sélectionner un temps

  • -ss permet de spécifier quand démarrer la conversion. Le temps peut être indiqué en secondes ou en horodatage [h:]min:s[.ms](h et ms facultatifs).
  • -t permet de spécifier la durée depuis le point de démarrage, en secondes ou horodatage.
  • -topermet de spécifier quand terminer la conversion indépendamment de -ss, en secondes ou horodatage.
  • -sseof permet de couper la fin de la vidéo d’une certaine durée, en secondes ou horodatage mais précédé d’un tiret (comme un chiffre négatif : -sseof -10).

À cause de la nature de certains formats, FFmpeg va par défaut seulement rejoindre le point de recherche le plus proche du temps spécifié par les commandes ci-dessus. On peut ajouter l’option -accurate_seek pour le forcer à réencoder le tout, au prix d’un temps de traitement plus long.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte