Découper une vidéo MP4 sans réencodage

 

J'avais initialement commencé cet article pour décrire mes tentatives de découpage de vidéo enregistrées avec mon nouveau tuner TNT HD. En réalité, les vidéos obtenues avec le tuner sont au format MPEG-TS. C'est aussi de la HD, mais pas du MP4. J'en parle dans un autre article

Ici, il s'agit bien de MP4. Comme par exemple une vidéo récupérée sur Youtube grâce à VideoDownloadHelper, ou filmée avec votre smartphone.

J'avais déjà effectué des recherches sur le sujet, qui m'avaient toujours menée à des logiciels divers, plus ou moins gratuits, et qui forçaient tous le réencodage de la vidéo, avec tous les inconvénients que cela comporte (lenteur de l'exportation, désynchronisation du son, perte de qualité de l'image).

Il existe enfin des solutions permettant la découpe directe. En voici quelques unes : Free Video Editor, Yamb, My MP4Box GUI et FFMpeg. Aucune n'est vraiment satisfaisante, à part la dernière qui nécessite la combinaison de plusieurs outils…

 

Free Video Editor

Mes recherches m'ont d'abord menée sur un tutoriel vantant les mérites de Free Video Editor. Formidable, exactement ce qu'il me faut !

A l'installation de Free Video Editor, on fait bien attention de ne pas installer les applications publicitaires.

L'interface est propre, la précision de sélection semble remarquable. Sauf que, las ! Ils se gardent bien de préciser que l'export sans réencodage n'est désormais disponible que pour la version premium !

Il faut donc aller chercher une version plus ancienne (la 1.4.13), qui nous gratifie à chaque démarrage d'un message invitant à télécharger la dernière version.

Fonctionnement :

  • Faire glisser le slider vers la 1e position (on peut affiner avec les flèches de direction pour plus de précision)
  • Cliquer sur le bouton « Commencer la sélection » (au milieu, avec la paire de ciseaux vertes).
  • Chercher la position de fin.
  • Cliquer à nouveau sur le bouton ciseaux.
  • Dans le déroulant format, choisir « format original » (sinon il propose de réencoder)
  • Cliquer sur Enregistrer vidéo

Résultat du test : après obtention de la séquence vidéo, je m'aperçois qu'elle ne commence pas là où je l'ai demandé : un petit bout du début de la vidéo est venu se coller juste avant !

Verdict : la fonctionnalité d'aperçu est super pratique (c'est le seul logiciel du test à le proposer), mais le logiciel ne découpe pas correctement la vidéo.

Yamb

Téléchargement

Yamb est en fait une interface graphique pour MP4Box. Je choisis la version 2.1.0.0_beta2, sans installation (la version 1.6 est beaucoup plus primitive). Je dois également récupérer le fameux MP4Box, et sa foule de petits logiciels dont je ne sais pas bien à quoi ils vont me servir, et indiquer à Yamb l'emplacement de MP4Box.exe.

Les non anglophones seront ravis : le logiciel a été traduit en français. Enfin presque complètement…

yamb-2-beta-accueil

On double-clique sur Edition > Cliquez sur cet item pour découper des fichiers MP4/M4A/MOV/3GP

yamb-2-beta-accueil2

Ce qui nous permet d'accéder à l'interface de découpe de fichier. On peut couper selon la taille, la durée, ou entre un début et une fin.

yamb-2-beta-decoupe-fichier

Gros inconvénient du logiciel, c'est que l'aperçu de la vidéo ne fonctionne pas ! Quand je coche la case « Activer la prévisualisation », j'obtiens ce message d'erreur :

yamb-2-beta-message-erreur-fonctionnel

On croît rêver ! Comment sélectionner une vidéo avec précision sans aperçu ???

Je sélectionne quand même ma tranche en utilisant l'aperçu sur Free Video Editor, puis je reporte le temps de début et le temps de fin (au format habituel hh:mm:mm:ss.ms). Pénible, surtout que le simple copier-coller est impossible…

Tout ça pour au final m'apercevoir que, là encore, la précision n'est pas au rendez-vous. La vidéo commence plus d'une seconde trop tôt. Je retente en changeant les temps. Mais Yamb continue à me cracher exactement le même morceau.

Je ferme le logiciel, et me fais bombarder d'une pluie de boîtes de dialogue « Access violation » dont je n'arrive à me débarrasser qu'après avoir forcé la fermeture du logiciel dans le gestionnaire de tâches (c'est sans doute lié au fait que j'avais également ouvert le fichier sous Free Video Editor pour l'aperçu).

 

My MP4Box GUI

Téléchargement

Ce logiciel nécessite une installation. On le lance, on va sur l'onglet split, on charge la vidéo avec le bouton Open à droite.

my-mp4box-gui

Mais là encore il n'y a pas d'aperçu, ce qui rend l'application totalement inutile. Et si je veux m'appuyer sur l'aperçu de Free Video Editor, je me fais enguirlander par My MP4Box GUI car il ne peut pas accéder à la vidéo déjà ouverte dans Free Video Editor.

Le fichier généré va se mettre dans le même répertoire que le fichier source (il suffit de le savoir). Mais là encore, la précision de découpe est vraiment insuffisante. Et sans aperçu, on perd un temps fou à tâtonner…

 

En ligne de commande avec FFMpeg

Téléchargement

Ne pas télécharger les sources mais la version build, à moins que vous ayez envie de vous taper le processus de compilation (bon courage). Pas d'installation, on dézippe où on veut. Moi je l'ai placé là : C:\Program Files (x86)\ffmpeg-3.0.1

Afin de ne pas avoir à naviguer à chaque fois vers le répertoire sous DOS, je rajoute à la fin de la variable d'environnement Path

;C:\Program Files (x86)\ffmpeg-3.0.1\bin

Le souci, c'est que les paramètres à passer sont le temps de début et la durée. Or, si on utilise l'aperçu de Free Video Editor, c'est le temps de fin que nous obtenons. C'est pénible !

Avec Microsoft Excel, on arrive à réaliser ce calcul assez facilement. Utiliser un format de cellule personnalisé pour conserver les millisecondes (Format > Cellule > onglet Nombre > catégorie Personnalisée sous Excel XP).

Format de temps personnalisé sous Excel

Saisir le temps de début dans une cellule, le temps de fin dans celle d'à-côté, et la formule =B1-A1 dans la 3e cellule…

Calcul de la durée du morceau avec Excel

La commande est sur le modèle :

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

Exemple pour une vidéo intitulée Sylver – Hate You Now.mp4 :

E:\Musique\Videos>ffmpeg -ss 00:00:21.100 -i "Sylver - Hate You Now.mp4" -t 00:00:50.500 -c copy out.mp4

Au moins, on peut garder la vidéo ouverte dans Free Video Converter pour l'aperçu, ffmpeg ne hurle pas à la violation de droits. C'est rapide, quasi-instantané même, et plutôt précis.

decoupe-video-ffmpeg

C'est juste qu'à chaque fois qu'on veut extraire une vidéo, il faut avoir :

  • Free Video Editor pour l'aperçu et le scan fin au clavier (un simple logiciel de lecture vidéo n'est pas aussi précis) afin d'obtenir le temps de début et de fin
  • Excel (ou équivalent) pour calculer la durée à partir du temps de début et de fin
  • Une fenêtre en ligne de commande DOS pour taper la ligne de commande

Bref, il ne faut pas en avoir souvent à extraire, sinon ça devient vite fastidieux. Mais c'est finalement la solution que j'ai choisie.

Et, si on veut découper le fichier de sous-titres associé, c'est exactement la même commande avec les mêmes temps…

ffmpeg -ss 00:24:28.000 -i "Sylver - Hate You Now.srt" -t 00:03:51.000 -c copy out.srt

Quelques remarques :

  • On n'oublie pas les guillemets si le nom de la vidéo comporte des espaces !
  • -i précède le nom du fichier source (input)
  • -ss : précède la position de départ. Dans mon exemple j'ai formulé mon point de départ en hh:mm:ss.millisecondes mais ça prend aussi les secondes (ne pas indiquer un nombre de vframes)
  • -t précède la durée de la séquence qu'on veut extraire
  • -c sert à spécifier le codec. Comme ici on ne réencode pas, on le fait juste suivre de « copy »

 

Pour être plus précis, travailler à la frame près, il n'y a pas le choix, il faut réencoder. On calcule le point de départ en multipliant la frame à laquelle on veut commencer par le framerate (ici on veut commencer à la 133e frame donc 133 / 25 = 5.32). Je n'ai pas testé cette solution, car je travaille avec des durées.

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a libfaac out.mp4

Conclusion

Si on veut découper une vidéo sans réencodage, la précision ne sera jamais très bonne. En effet, le découpage se faire au niveau des I-Frames (groupe d'images de la vidéo, encore appelé intraframe ou keyframe) et non plus à la milliseconde près ! Combien dure une I-Frame ? Cela dépend du framerate (nombre de fps) de la vidéo en question… Plus il y aura d'I-Frames, meilleure sera la qualité de la vidéo, donc plus elle sera grosse.

Aucune solution, comparée au génialissime MPEG2Cut, n'est hélas réellement satisfaisante. La moins nulle est encore la dernière, à condition d'aimer les maths et la ligne de commande.

Karine SANCHE

Partager cet article