Comme ma carte d’acquisition vidéo est minimale et que mon premier PC de salon était peu puissant, mes enregistrements ont toujours été réalisés dans un format aussi minimaliste (et volumineux) que possible : un flux vidéo MJPEG et de l’audio brut, encapsulés dans un conteneur AVI. Un post-traitement en deux passes transformait ensuite ces enregistrements dans un format plus compact. J’ai globalement utilisé 3 formats :

  • quelques films au format SVCD, en général destinés à être gravés sur CD,
  • quelques films au format DVD (notamment mes vieilles VHS, que j’ai numérisées), en général destinés à être gravés sur DVD,
  • la majorité de mes enregistrements dans le format MPEG2, plus compact et moins contraint mais que je savais n’être lisible que sur ordinateur.

Bien sûr, c’est ce troisième format que mon nouveau lecteur DLNA de salon ne sait pas lire… D’où la nécessité de « transcoder ». Et comme le format Matroska permet d’ajouter des sous-titres, je peux même prendre en compte les vidéos familiales pour lesquelles les « sous-titres » sont en fait mes notes sur les lieux et personnes présentes ;-)

Après de multiples essais, il s’avère que créer un fichier compatible avec un lecteur matériel (et non un logiciel) est assez ardu. D’un côté, la norme DivX Plus HD n’est pas toujours respectée, d’un autre côté, certains aspects de cette norme sont parfois observés strictement sur des détails qui peuvent paraître insignifiants.

J’ai finalement réussi à trouver une combinaison d’outils et de paramètres qui font que le résultat est 100 % compatible (avec avance et retour rapide, etc.) à coup sûr. Le script est disponible dans mon dépôt Git.

Ce script est en principe interactif : il pose des questions sur les flux à intégrer au fichier final. Normalement, les réponses par défaut conviennent et il suffit de valider chaque réponse. Si c’est effectivement ce que vous constatez, le paramètre -y permet de rendre le script automatique en prenant systématiquement les réponses par défaut.

Notez que ce script part de quelques hypothèses :

  • Le flux vidéo de départ est supposé ne pas être déjà au format x264 avec les caractéristiques requises pour DivX Plus HD, et est donc systématiquement transcodé.
  • Les fichiers produits ne dépassent jamais 25 images par seconde, d’une part parce que moins d’images impliquent moins d’octets, plus utilement utilisés pour augmenter la qualité ; d’autre part parce qu’au-delà de 30 images par seconde, les dimensions maximales d’image acceptées par la norme changent, et que je n’avais pas envie de devoir gérer cette dualité.
  • ffmpeg est supposé supporter le codec fdk_aac ; si tel n’est pas le cas, il faut modifier le script pour remplacer « -c:a libfdk_aac » par « -c:a aac ».

Ce script se veut aussi éducatif. Non seulement il peut fonctionner comme un simple outil de transcodage, mais il peut aussi assister dans un transcodage manuel.

Par défaut, le script affiche chaque commande avant de l’exécuter. On peut se contenter de l’affichage (paramètre -n) pour voir quelles commandes auraient été exécutées sans que rien ne soit modifié sur le disque dur. On est alors libre d’adapter ces commandes et les exécuter manuellement.

On peut aussi simplement demander quelles informations ont été détectées (paramètre -h) dans les fichiers donnés en entrée (paramètre -i) : flux vidéo, audio, sous-titres, chapitres.

Comme indiqué dans le script lui-même, les sites qui m’ont beaucoup apporté pour atteindre ce résultat sont :

Mises à jour :

  • 2017-11-06 — Le script est maintenant hébergé dans Git.
  • 2015-04-04 — J’ai découvert par hasard que le filtre crop de x264 n’accepte que des valeurs paires ; ainsi, si je dois enlever 6 pixels, je dois en enlever 2 d’un côté et 4 de l’autre et non 3 de chaque côté. Script corrigé.