Morceler un fichier vidéo avec ffmpeg

Dans mon précédent article, je parlais de découper proprement et sans transcodage des fichiers vidéos afin de pouvoir les traiter séparément (et en parallèle), puis de recoller les nouveaux morceaux que l’on a fabriqué. Il y a moyen avec ffmpeg de faire cette découpe en étant précis au GOP et en une passe.

Publié le

Voici :

ffmpeg -i <fichier source> -f segment -segment_time 10 -codec:v copy -codec:a copy -reset_timestamps 1 -segment_format_options movflags=+faststart -segment_list out.ffconcat out%03d.mov

Dans les options :

  • segment_time, c’est la durée moyenne d’un segment, en secondes
  • codec:v/a copy, on ne transcode pas le fichier (sinon l’opération n’a pas trop d’intérêt). Maintenant, vous pouvez toujours changer au passage le codec et le format audio, voir retirer l’audio si besoin.
  • reset_timestamps, c’est pour que les segments soient exploitables séparément…
  • Dans segment_format_options, on spécifie que le fichier mp4 produit soit faststart. C’est totalement facultatif.
  • segment_list va produire un fichier ffconcat qui est la liste des découpes que ffmpeg va produire. Le format est très simple.
  • out%03d.mov on produit des fichiers qui s’appelleront de out000.mov à out999.mov. A adapter au besoin.

Si les fonctions de « segment » ne sont pas disponibles, vérifiez que vous avez bien une version récente de ffmpeg…

L’opération inverse pour coller des fichiers est bien plus complexe :

ffmpeg -i out.ffconcat -codec:v copy -codec:a copy -f mov out.mov

Adaptez au besoin le fichier ffconcat pour qu’il pointe sur les fichiers transcodés (ou les sources, c’est comme vous voulez), et vérifiez que tous les morceaux sont bien au même format et dans le bon ordre…

Les fonctions segment servent à produire des chunks pour du téléchargement progressif/adaptatif.

Ça devrait fonctionner avec d’autres combinaisons de codecs et de containers (ça marche bien avec du mov/mp4 + h264 + aac).

Enfin, vérifier bien qu’il n’y a pas de décalage image/son si vous faites beaucoup de morceaux et/ou avec d’autres formats. Ce genre de problème arrive vite.