lundi 30 janvier 2017

mkvToolNix et les codes de langage


Je n'avais jusqu'ici pas vraiment travaillé avec des fichiers Matroska, d'extension .mkv, sauf occasionnellement. J'ai cependant récemment cherché à travailler sur des fichiers téléchargés depuis la freebox. Ces derniers sont des fichiers au format m2ts comportant souvent plusieurs pistes audio et des pistes de sous-titres en télétexte. Jusqu'ici aucun des programmes que j'avais essayés ne savait récupérer et traiter les pistes de sous-titres télétextes.


Seule l'application vlc les reconnaissait et savait les afficher, ce qui n'est pas surprenant car le freebox player se base sur vlc pour lire des fichiers vidéos, mais aucun éditeur de vidéo, permettant de découper ou modifier les pistes ne savait même lire ces pistes de sous-titres.

C'est là que j'ai découvert les fichiers mkv, et la collection d'outils appelée MKVToolNix.

MKVToolNix est essentiellement une interface graphique qui permet d'utiliser des programmes prévus seulement en ligne de commandes. J'utilise surtout deux d'entre eux: MKVMerge.exe, et MKVExtract.exe.

MKVMerge permet de créer un fichier MKV à partir de pistes video, audio ou textes (et aussi d'autres choses comme des chapitres) issues d'autres fichiers, en les remultiplexant sans recompression. Il s'agit simplement de les intégrer dans le conteneur mkv sans altérer les flux d'entrée. On peut aussi les découper pour ne garder que les portions utiles des fichiers d'entrée. L'intérêt énorme que j'ai trouvé dans MKVMerge, est que si on part d'un fichier m2ts de la freebox contenant des sous-titres en télétexte, il sait les lire et les intégrer comme de vraies pistes de texte dans le fichier MKV produit. Cette fonctionnalité, inexistante dans tous les autres programmes de conversion que j'ai essayés, par exemple pour convertir de m2ts en mp4, m'a convaincu que le format Matroska (MKV) et son outil MKVToolNix devenait un must pour traiter les fichiers téléchargés depuis  la freebox, d'autant que une fois enregistré sur un disque dur connecté à la freebox ou sur le disque dur interne, un fichier mkv est relu par la freebox et donc affiché sur la télé sans problèmes avec toutes ses fonctions et sa navigabilité, dans la même qualité que l'original, souvent une qualité de niveau Blu-Ray s'il a été enregistré depuis une chaîne en HD.

Il y a toutefois une difficulté avec les fichiers mkv: mon application Sony Vegas Movie Studio HD Platinum 11.0 ne les prend pas en charge. Si on veut les éditer avec cette application, le mieux est de les convertir en mp4 grâce à avidemux par exemple, qui fait cela rapidement et sans perte de qualité, sauf qu'on perd les pistes de sous-titres, ce qui n'est pas grave car Sony Vegas Movie ne sait de toutes façons pas les traiter en version 11.

MKVExtract fait un peu l'inverse de MKVMerge: il permet d'extraire une piste audio, video ou texte d'un fichier MKV. Je l'utilise surtout pour extraire les fichiers de sous-titres des fichiers MKV produits avec MKVMerge. Ce sont de vrais fichiers textes au format srt que l'on peut ensuite utiliser avec tout gestionnaire de vidéos qui sait lire des sous-titres au format srt.

Manipuler en ligne de commandes ces  programmes est assez ardu, et beaucoup se décourageront rien qu'en regardant leurs modes d'emploi respectifs que l'on trouve sur les sites suivants: comment utiliser MKVMerge en ligne de commandes;  comment utiliser MKVExtract en ligne de commandes.

Mais l'interface graphique MKVToolNix rend l'utilisation beaucoup plus aisée, même si le grand nombre d'options et de fonctions reste sans doute au départ un peu déroutant.

Jusqu'à début janvier 2017, j'avais cependant un reproche à faire à la gestion des langues dans MKVToolNix.

En effet, quand y on ouvre un fichier m2ts issu de la freebox, on a souvent plusieurs pistes audio. Typiquement les films que je télécharge sur Arte ont une piste audio en Français marquée fre, une piste audio en Allemand marquée ger, une piste marquée qaa qui est en fait la version originale du film (souvent l'Anglais, mais pour un film Français ce serait une seconde piste en Français) et une piste marquée qad, qui est l'Audio Description, c'est-à-dire une piste audio qui raconte ce qui se passe à l'image pour les mal voyants. Cette dernière piste est aussi en Français.


Or quand on ouvrait ce fichier dans MKVToolNix, il ne savait pas reconnaître les pistes qaa et qad. Il les marquait indifféremment comme und, c'est-à-dire  une langue indéterminée. D'où une difficulté pour identifier quelle piste était la version originale et quelle piste était l'audiodescription.

J'ai eu quelques échanges à ce sujet avec Moritz Bunkus, l'auteur de MKVToolNix. Il apparaît que dans ces fichiers de vidéo en haute définition, les pistes audio sont marquées selon le code iso 639-2.
Chaque langue y est dotée d'un ou plusieurs codes à 3 caractères, comme fre ou fra pour le Français, ger pour l'Allemand. ou eng pour l'Anglais. Mais on y trouve même des codes comme gsw pour l'Alsacien, epo pour l'esperanto, vol pour le Volapük, ou fro pour l'ancien Français du Moyen-âge . C'est dire que la liste des codes de langage, longue d'environ 500 codes, est très complète.

Néanmoins pour faire face à encore plus de situations, la norme iso 639-2 a réservé tous les codes de qaa à qtz pour un usage local qui n'est pas défini par la norme. Cela fait encore 20x26=520 codes possibles. Moritz Bunkus qui a déjà implementé tous les codes normaux de langage dans chacun des executables pilotés par MkvToolNix, a estimé inutile de rajouter ces 520 codes d'usage local, croyant qu'ils étaient inutiles pour le multiplexage des fichiers vidéos.


J'ai réussi à le convaincre de rajouter  les deux codes qaa et qad  très utilisés par la télévision française, sans doute sur une consigne du CSA. Il les a donc introduits dans la version 9.8.0 publiée le 22 janvier 2017 dont les nouveautés sont décrites sur son blog.


Désormais quand vous ouvrez le fichier issu de la freebox  dans les  versions les plus récentes de MKVToolNix, vous verrez ces codes et pourrez identifier la piste en version originale et la distinguer de la piste en audio description. Bien sûr la piste video reste marquée und ce qui signifie que sa langue est indéterminée. Dans le standard iso 639-2 existe cependant le code zxx qui signifie qu'il n'y a pas de contenu linguistique, ce qui aurait été plus approprié encore.


vendredi 6 janvier 2017

Retirer un lecteur USB de la Freebox en toute sécurité


J'ai connu un grave incident avec un lecteur de disque externe que j'ai branché via la prise USB sur le Freebox Server de ma Freebox Revolution. Lorsque je l'ai débranché  le fichier vidéo que j'y avais enregistré s'est corrompu et est devenu illisible.


C'est le même symptôme que lorsqu'on branche une clé USB sur l'ordinateur et qu'on la retire brutalement sans activer l'icône cachée dans la barre d'état (en bas à droite du "Bureau" de Windows) qui permet de débrancher la clé en toute sécurité. Il arrive alors que tout ou partie des fichiers deviennent illisibles et laissent des morceaux de fichiers corrompus sur le lecteur.

Si donc la solution pour retirer en toute sécurité de son ordinateur une clé usb est bien connue, je ne connaissais pas la procédure pour retirer en toute sécurité un lecteur de la freebox. Rappelons qu'on peut connecter des lecteurs usb aussi bien sur le freebox player que sur le freebox server.


Voici celle que j'ai trouvée, et que depuis je pratique systématiquement:

Depuis un ordinateur connecté en réseau à la freebox, mais cela marche aussi bien depuis une tablette ou un smartphone qui y est connecté, il faut se rendre sur freebox OS à l'adresse internet: http://mafreebox.freebox.fr. Notez que pour les tablettes et smartphone, il existe en fait une application Freebox Compagnon plus pratique à utiliser, si on arrive à surmonter les complexités de sécurité qui demandent  des mots de passe et des manipulations un peu fastidieux au début.


Quand on a lancé la page d'accueil du freebox OS, ce qui nécessite la première fois de connaître son mot de passe, mais les fois suivantes on peut l'avoir enregistré sur son PC, on clique sur Paramètres de la Freebox, puis sur l'onglet Mode avancé, et on clique ensuite sur l'icone Disques dans la rubrique Partage de Fichiers.

Là apparaissent les différents lecteurs ou disques branchés en usb, après le disque dur interne auquel il ne faut évidemment pas toucher.


Quand vous cliquez sur l'un des lecteurs connectés pour le sélectionner, apparaissent 3 boutons en bas de le fenêtre d'information sur le Disque. Ne touchez évidemment pas au bouton Formater le disque! Par contre le bouton Éjecter est la solution. Un clic dessus et on peut retirer le lecteur de la prise usb en toute sécurité.

Avant de respecter cette petite précaution, on a donc pu laisser des morceaux de fichiers corrompus sur un lecteur brutalement retiré. Pour les enlever, je branche le lecteur sur mon ordinateur et j'effectue une vérification du système de fichiers.


Dans Windows 7, on clique avec le bouton droit sur l'icone du lecteur, et on clique sur Propriétés/Outils puis le bouton Vérifier maintenant. Je déconseille de cocher en plein jour la case: Rechercher tous les secteurs défectueux, car cela prend des heures. On pourra éventuellement le faire le soir avant de se coucher... Par contre l'autre case, Réparer automatiquement les erreurs du système de fichiers est celle qui nous intéresse.


Une fois la vérification effectuée (c'est en fait le bon vieux chkdsk qui le fait), on reçoit éventuellement un message disant que des morceaux de fichiers défectueux ont été trouvés et ont été placés dans un dossier found.xxx (a priori en commençant par found.000).


Ce dossier, créé sur votre lecteur, est en fait considéré comme un dossier système. En général, il n'est pas affiché dans Windows Explorer. Pour l'afficher il faut changer les options d'affichage des dossiers, en décochant la case Masquer les fichiers protégés du système d'exploitation (recommandé), qu'on obtient en cliquant sur le menu Organiser/ Option des dossiers et de recherche puis sur l'onglet Affichage.

On peut alors sans dommage supprimer les fichiers found.xxx en prenant soin de ne pas toucher aux autres fichiers qui sont des fichiers système indispensables au fonctionnement de Windows.