Récemment je me suis retrouvé avec un très gros volume de vidéo en MKV avec une piste audio qui était nommé "Surround". Vous me direz "on s'en fout du nom de la piste audio, non ?" et bien dans mon cas non. En fait je voulais regarder ces vidéos sur ma TV (LG WebOS) en lisant les fichiers via UPnP directement sur mon ordinateur (dans mon cas c'est une machine ArchLinux avec Gnome qui intègre directement le partage mais sous Windows 10 on peut aussi faire la même chose de base aussi), sauf que ma TV (je ne sais pas si c'est le cas d'autres appareils) n'affiche plus le nom des fichiers si au moins une des pistes a un nom, dans ce cas elle affiche le nom de la première piste qui a un nom… donc autant vous dire que j'avais quelques 400 vidéos mkv dont le nom visible sur ma TV était "Surround", c'était ultra pratique… 😵

Habituellement j'ai le cas sur 2 à 3 vidéos, donc je passe par MKVToolNix GUI qui permet d'éditer facilement les propriétés. Mais là avec mes 400 vidéos, impossible de faire ça, j'y aurai passé la journée… Mais MKVToolNix c'est à la base un outil en ligne de commande et la version GUI s'appuie simplement dessus. On peut donc faire tout ce qui propose la GUI en ligne de commande. Et donc le scripté très simplement en bash ! 😀

Ce qui ça donne chez moi :

for video in **/*.mkv
do
    echo $video
    mkvpropedit $video \
      --edit track:1 --delete name \
      --edit track:2 --delete name \
      --edit track:3 --delete name
done

Dans mon cas je sais qu'il y avait 3 pistes (une vidéo, une audio et une de sous-titre) sur tout mon lot de vidéo, je supprime le nom de chaque piste – dans le doute que certaines vidéos aient un nom sur une autre piste – j'affiche avant chaque édition le nom du fichier que je traite au cas où j'aurai un souci pour connaître le fichier qui a posé souci (la sortie n'indiquant pas le nom du fichier).

À noter que les modifications sont effectuées directement sur le fichier, ce qui me va parfaitement dans mon cas, mais il faudra faire une copie des fichiers avant d'appliquer la commande si on veut faire ce traitement sans altérer l'originale. Comme il n'y a aucun encodage à faire, le traitement des 400 vidéos prend chez moi une dizaine de secondes.

Pour vérifier que les noms des différentes pistes audios ont disparus :

for video in **/*.mkv
do
    mkvinfo $video | grep Nom
done

Si on a rien en sortie c'est que tout est ok 😎

Source :

Crédit photo : https://pixabay.com/photos/pencil-eraser-notepad-write-paper-1037609/