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.


samedi 31 décembre 2016

GraphEdit sous Windows 7.1 en 64 bits


J'ai déjà eu l'occasion d'évoquer le logiciel GraphEdit qui rend beaucoup de services à ceux qui font de la programmation avec l'architecture DirectShow de Microsoft.


J'ai eu depuis plusieurs jours un problème qui m'ennuie beaucoup: Quand on ouvre GraphEdit et qu'on veut y ajouter un filtre de la catégorie directshow, alors le programme se plante et ferme abruptement. Il était donc devenu impossible de composer à la main un filtre.


Pour ceux qui auraient le même problème, je donne tout de suite la solution qui a résolu le problème chez moi: c'est le filtre LAV Video Decoder qui est le responsable, comme c'est indiqué sur cette page web.  En le désinstallant tout revient à la normale. Voir ici comment faire par la méthode basique, mais on peut le faire beaucoup plus aisément avec mon logiciel Filmerit. Notons quand même que certaines pages web parlent d'un  problème identique provoqué par d'autres filtres mal installés ou non compatibles. Dans l'un d'eux le problème a été résolu en mettant à jour ffdshow. En tous cas, cela semble toujours être lié à un filtre directshow. Il est donc inutile de chercher à réinstaller graphedit, voire Windows... Si on a de la chance, une restauration système marche. Sinon, en tâtonnant il faut chercher quels sont les derniers filtres qui ont pu être installés par une application  ou une autre. Chez moi, c'est Video to Video qui avait installé les filtres LAV, y compris LavVideo.ax

Ce problème m'a conduit à effectuer diverses recherches qui m'ont permis de progresser dans la compréhension  de GraphEdit, des filtres directshow et du fonctionnement de la base de registres sous Windows 7.1 en 64 bits.


Pour commencer, j'ai découvert qu'il y avait deux versions de GraphEdit: une version 32 bits et une version 64 bits. La manière officielle de les télécharger est de télécharger tout le Windows 7.1 SDK.
En ce qui me concerne, je télécharge depuis le site de Microsoft un fichier ISO du DVD de Windows SDK 7.1, et je le grave (par exemple avec ImgBurn) sur un DVD. Ensuite pour n'installer que les appli qui m'intéressent, j'explore le DVD obtenu, pour trouver le dossier: \Setup\WinSDKWin32Tools dans lequel je double clique sur winsdkwin32tools_x86.msi
Cela crée un dossier C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin dans lequel se logent tous les outils utiles: notamment GraphEdt.exe qui est la version 32 bits du programme, et dans le sous-dossier X64, la version 64 bits qui porte le même nom.



On peut différencier les 2 en en lançant un et en ouvrant le Gestionnaire des tâches. Celui qui est 32 bits apparaît avec une mention *32, alors que l'autre reste graphedt.exe seul. Les deux peuvent fonctionner simultanément. Pour me faciliter la tache je les renomme bien sûr en graphedit32.exe et graphedit64.exe



Pour que GraphEdit puisse espionner le graphe d'une autre application, et aussi ouvrir les pages de propriétés des filtres et pins qu'il affiche, il faut aussi installer deux dll: proppage.dll et evrprop.dll. Ces deux fichiers existent aussi en versions 32 bits et 64 bits, respectivement dans le dossier Bin et son sous-dossier x64. On les installe avec regsvr32.exe qu'on trouve dans les deux dossiers C;\Windows\System32 et c:\Windows\SysWow64. C'est un peu délicat car c'est en mode ligne de commande qu'il faut travailler dans une fenêtre de commande DOS.  Pour cela je crée avec notepad un fichier install.bat qui contient le texte suivant:

C:\WINDOWS\System32\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\proppage.dll"
C:\WINDOWS\System32\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\evrprop.dll"
C:\WINDOWS\SYSWoW64\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\x64\proppage.dll"
C:\WINDOWS\SYSWoW64\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\x64\evrprop.dll"
Quand je double clique sur le fichier install.bat, j'obtiens 4 messages d'installation réussie, et alors mes deux versions de GraphEdit sont pleinement opérationnelles.



Maintenant, si on ouvre graphedit32 et graphedit64 et qu'on tape CTRL+F pour charger des filtres, et qu'on clique sur Directshow Filters pour déplier le noeud et obtenir l'affichage de tous les filtres de la catégorie directshow, on n'obtient pas du tout la même liste sur les deux versions. Je suppose ici que vous n'avez pas le problème signalé au début de ce post qui empêchait chez moi  cette manip sur graphedit32.

Par exemple, dès le début de la liste on voit que graphedit64 affiche par exemple un filtre AudioRecorder WAV Dest, que graphedit32 n'affiche pas. Au contraire graphedit32 présente un filtre ATi Ticker ou toute la série des Cyberlink que graphedit64 n'affiche pas.

On peut supposer que graphedit64 n'affiche que les filtres compatibles avec des applications 64 bits, alors que graphedit32 affiche les filtres compatibles avec des applications 32 bits. Un certain nombre de filtres sont naturellement compatibles avec les deux systèmes.

Quand je lance alors mon gestionnaire de filtres Filmerit 3.1, il m'affiche exactement les mêmes filtres que graphedit32. Cela paraît finalement normal, car toutes mes applications sont faites avec un delphi 7 qui est 32 bits. Elles sont donc toutes en 32 bits, et Filmerit du coup ne gère que les filtres 32 bits. Il faudra un jour voir comment s'occuper des filtres 64 bits. En attendant, mes programmes n'utilisent tous que des filtres 32 bits.


J'en reviens au problème de LAVideo.ax qui avait bloqué l'affichage de la liste des filtres directshow dans graphedit32. Il apparaît que c'est parce que l'un des pins disposait de plus de 100 types de formats. En fait, la version installée par Video to Video comportait exactement 218 types de formats pour le Pin 00. Ils sont numérotés de 0 à 207, puis s'ajoutent encore -39 à -48. Si on considère qu'un numéro négatif est en fait à retrancher à 256, on trouve que ces numéros négatifs vont de 208=256-48 à 217=256-39. Si on veut garder LAV Video installé, soit on le laisse comme il est, car il fonctionne correctement malgré tout sauf qu' on ne peut plus utiliser Graphedit32  pour construire des graphes. L'autre solution est sans doute d'enlever un certain nombre de types qui correspondent à des formats de vidéo rarement rencontrés. Mais cela nécessiterait un bidouillage à la main que je ne recommande pas.

Tout cela m'a quand même donné envie de voir comment les filtres sont enregistrés dans le registre de Windows 7 en 64 bits.

S'agissant des filtres directshow 32 bits, comme toutes les applications 32 bits, regedit les fait apparaître sous des clés WOW6432Node.

Un filtre directshow 32 bits apparaît ainsi dans le registre sous plusieurs emplacements:

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\ est une clé où apparaît d'un part dans la sous-clé
{083863F1-70DE-11D0-BD40-00A0C911CE86}\Instance\ la liste des filtres 32 bits de la catégorie directshow , d'autre part comme une sous-clé  le GUID de chacun des filtres directshow 32 bits, et son fichier serveur sous la valeur InProcServer32.

La même chose se produit de façon dupliquée dans HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\

comme dans
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\

Un filtre directshow 64 bits apparaît pour sa part de la même façon (liste des GUID dans la catégorie des filtres directshow, et Inprocserver32) sous les clés plus simples: HKEY_CLASSES_ROOT\CLSID\ et HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\.

Enfin, si je prends un filtre qui est installé aussi bien pour 32 bits que 64 bits, par exemple avi mux, alors il apparaît en principe dans les 5 positions (et toujours deux fois dans chacune).

Il est à noter que dans delphi 7 qui ne sait lire que les fichiers 32 bits, tout cela est masqué, et qu'en croyant ouvrir la clé HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\ avec une fonction openkey on ouvre en réalité la clé HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\.

Pourquoi faire simple quand on peut faire compliqué !


mardi 27 décembre 2016

Stabiliser Vegas Movie Studio HD Platinum 11.0


J'utilise depuis plusieurs années l'excellent logiciel Sony Vegas Movie Studio HD Platinum 11.0, très précisément son build  322, ce qui est la dernière mise à jour de la version 11.


Depuis quelque temps, le programme est cependant devenu très instable sur mon ordinateur sous Windows 7, et il envoie alors un message d'erreur dont on ne peut sortir qu'en quittant toute l'application. On perd tout le travail fait, et par la même occasion ses nerfs. L'erreur se produisait surtout quand on zoomait ou dézoomait la time-line. Il était en particulier devenu impossible de l'étirer pour qu'elle affiche chaque frame individuellement. Le programme se plantait systématiquement avant. Le programme n'était  presque plus utilisable, et devenait un cauchemar.


J'ai dans ce genre de cas le réflexe de voir s'il y a une mise à jour qui aurait pu traiter ces problèmes de stabilité. On constate que depuis la version 11, Sony a publié une version 12 puis une version 13. En mai 2016 en outre Sony a vendu ses produits à la société allemande Magix. Le nom de la version la plus actuelle est maintenant simplement Vegas Movie Studio Platinum 13, sans que je sache très bien si Magix a opéré des modifications autres que le changement de nom. En tous cas, s'il y a prochainement une version 14, comme c'est déjà le cas pour le logiciel professionnel Vegas Pro, elle sera due à Magix et non plus à Sony via sa filiale Sony Creative Software. Elle semble annoncée pour février 2017.

En lisant les blogs et évaluations consacrés à la version 13 de Vegas Movie Studio, je me rends compte qu'elle suscite exactement les mêmes commentaires que la version 11, notamment sur le plan de l'instabilité que rencontrent certains utilisateurs. Comme les principales nouveautés, du genre édition de films en 4K, ne me concernent pas vraiment, je deviens réticent à dépenser une soixantaine d'euros pour une mise à jour qui apportera uniquement des fonctionnalités qui ne me servent pas et qui risquent de ne pas régler mon problème.


C'est là que je découvre toute une série de sites web, notamment sur Youtube, qui donnent des solutions à ce genre de problème, par exemple ci-dessus quand on insère un texte. En général ce sont des utilisateurs qui ont rencontré un problème particulier et qui trouvent une astuce pour le contourner, par exemple en supprimant certains plugs-ins, ce qui n'est pas sans effets secondaires possibles.

Un site web a plus particulièrement retenu mon attention, car il semble traiter des crashs génériques de Sony Movie Studio 13, et non pas seulement donner une astuce pour contourner une manip particulière qui fait crasher le logiciel. On y recommande 3 choses:

1) mettre à jour les drivers de sa carte graphique
2) réinitialiser le logiciel Sony Movie Studio
3) tout réinstaller

Pour moi, le plus simple a été de procéder directement à l'étape 2, c'est-à-dire réinitialiser le logiciel, ce qui revient à le reparamétrer à toutes ses valeurs par défaut. C'est d'ailleurs une solution extrêmement rationnelle à laquelle j'aurai pu penser depuis longtemps: si pendant plusieurs années le logiciel m'a donné toute satisfaction et qu'il se plante depuis peu, alors il est probable qu'un ou plusieurs paramètres se sont déréglés au cours du temps et revenir aux paramètre initiaux ne peut que lui faire du bien.


Pour réinitialiser le logiciel, rien de plus simple: on enfonce les touches CTRL et SHIFT, et tout en les gardant enfoncées, on lance l'application (par exemple en double-cliquant sur son icone). Elle commence alors par un message initial demandant si on veut remettre tous les paramètres à leur valeur par défaut. On répond oui, après avoir éventuellement coché la case pour détruire les données dans le cache, et c'est tout.

Je l'ai fait sur ma version 11, et depuis je n'ai plus connu de plantage. Pourvu que cela dure ! En tous cas j'ai retrouvé une application très performante.