Wer seinen PC zur Videobearbeitung nutzt, spielt in der Regel mehr als ein Programm auf seinen Rechner. Sind diese Programme von unterschiedlichen Herstellern, bringen diese meistens auch verschiedene Codecs mit. In der Regel verstehen sich diese Codecs auch untereinander gut. Doch manchmal kann dies auch zu unvorhergesehenen Problemen führen, denen man gar nicht so leicht auf die Schliche kommt...
In unserem Fall hatten wir auf einem Testsystem die neue Adobe Suite mit After Effects 7.0 installiert. Letzteres wirbt ja unter anderem damit, dass es auch direkt HDV-Material importieren kann. Auf unserem Test-System gelang jedoch kein Import von HDV-Files, die mit Premiere Pro 2.0 gecaptured wurden. Auf einem anderen System gelang der Import dagegen problemlos. Es war uns zwar schnell klar, dass hier irgendwas mit dem Codec faul sein musste. Aber was? Adobe bringt ja seine eigenen MPEG-2-Filter mit und diese waren offensichtlich korrekt installiert. Also wo lag das Problem?
Die Theorie
Hat man beispielsweise ein Editing-Programm und zwei Software-DVD-Player installiert, befinden sich meistens schon drei MPEG2-Codecs auf dem System. Diese Codecs bestehen aus mehreren sogenannten DirectShow-Filtern, die einzelne Aufgaben des Decodierens übernehmen. So steht vor dem eigentlichen Abspielen das Demultiplexen und anschließend die synchrone Weitergabe an einen Video- und einen Audio-Decoder. (Subtitel und andere Kleinigkeiten brauchen meistens auch noch einen eigenen Filter).
Muss nun ein Programm einen MPEG2-Strom dekodieren, so fragt es bei DirectShow an, welche installierten Filter diesen Strom entpacken können. In unserem Beispiel könnten sich also drei MPEG2-Demultiplexer mit den zugehörigen Filtern melden.
Viele Anwendungen sind dabei scheinbar filterunabhängig programmiert. Das bedeutet das Programm fordert nicht speziell den Filter an, der mit der Applikation mitgeliefert wurde. Dadurch lassen sich auch unabhängige Filter mit vielen Programmen nutzen.
Die Kehrseite der Medaille ist jedoch, dass sich nicht jeder Filter hundertprozentig gleich verhält. Gerade wenn es um das Dekodieren von HDV-Transport-Strömen geht, ist nicht jeder MPEG2-Filter dazu hundertprozentig in der Lage, auch wenn er in der Windows-Registry vorgibt, es zu können. Doch wonach entscheidet DirectShow, welchen Codec es zur Verfügung stellt, und wie kann man das Programm daran hindern einen bestimmten Codec zu verwenden?
Merrits
Nachdem wir schon ahnten, dass es sich um ein DirectShow-Problem handeln müsste, stießen wir im Netz auf die sogenannten Direct-Show Merrits. Darunter versteht man eine Präferenztabelle für Codecs, welche die gleiche Aufgabe erfüllen können. Wird kein spezieller Filter/Codec angefragt, so wählt das System einfach den mit den höchsten Merrits. Das Problem ist jedoch, dass der Codec-Hersteller selber bestimmt, welchen Stellenwert/Merrit der Codec bei der Installation hat. Dieser Wert wird bei Installation in der Registry gespeichert. Unsolidarische Codecs geben sich einfach den höchsten Merrit, und verdrängen damit die übrigen Codecs bei der Ausführung. Dass es sich dabei jedoch nicht immer um den besten Codec handeln muss, ist wohl klar. Auch später installierte Codecs können sofort im System „untergehen“ wenn bereits ein Codec mit hohem Merrit-Wert installiert ist. In unserem Fall war übrigens ein Cyberlink DVD-Player auf dem System installiert, der einen sehr hohen Merrit-Wert für seinen DVD-Decoder eingetragen hatte. Dieser verdrängte dadurch permanent den später von Adobe installierten MPEG2-Filter. Adobe konnte jedoch mit dem Cyberlink-Codec keine HDV-Files öffnen. Komisch dabei war nur, dass Premiere den eigenen Codec wohl direkt ansprach, während sich After Effects auf die Merrit-Tabelle verließ.
Was tun?
Wer bei seinem System auf ähnliche Probleme stößt, will jetzt natürlich wissen, wo man diese Merrits findet. Die platte Antwort: In der Registry. Allerdings ist es eine Sisyphus-Arbeit, jeden Merrit-Wert von Hand zu ändern und weitere Testläufe zu starten. Daher haben wir uns nach einem sinnvollen Tool für dieses Problem umgesehen und sind auch gleich fündig geworden.
Der kostenlose Zoom-Player Standard besitzt unter „Erweiterte Funktionen“ / „Verwaltung der registrierten Filter“ eine spezielle Funktion um die Merrits einzelner Codecs zu ändern. Hier kann man jeden im System installierten Filter anwählen, seinen Merrit-Wert auslesen und direkt ändern.
Allerdings ist der Merrit-Wert nicht einfach eine Zahl, sondern es gibt verschiedene Verhaltensmuster, die durch Hex-Codes beschrieben werden.
Ein neutraler Codec sollte den Wert „200000“ besitzen, was bedeutet, dass er keinerlei Bevorzugung wünscht. Will man, dass ein Codec auf jeden Fall bevorzugt wird (und sich dadurch möglicherweise unkooperativ verhält), so erhält er den Wert „80000“. Dazwischen gibt es noch von Microsoft schwammig formulierte Werte wie „Normale Bevorzugung (60000)“ oder „Wahrscheinlich keine Bevorzugung (40000)“, wobei uns niemand erklären konnte, was damit konkret gemeint ist. (Wahrscheinlich verbirgt sich dahinter Microsofts Verständnis von Fuzzy Logic). Klar scheint jedoch, dass ein höherer Merrit-Wert einen geringeren Merrit-Wert „schlägt“. Außerdem gibt es noch konkrete Merrits für Hardware-Decodierung.
![Im Zoomplayer findet man unter "Erweiterte Funktionen" / "Verwaltung der registrierten Filter" eine Merrit-Verwaltung[A]. Den Merrit-Wert trägt man unter[B] direkt ein.](https://www.slashcam.de/images/rescaled/500/8147-500.webp)
Strategie
Da die auftretenden Probleme vielfältig sein können, können wir an dieser Stelle nur einen allgemeinen Strategievorschlag geben, wie man im konkreten Fall bei der Fehlersuche vorgehen sollte.
Der leichte Weg: Man sucht den zugehörigen Codec der gestörten Applikation und setzt dessen Merrit auf 80000 hoch. Funktioniert danach alles, weiß man zumindest, dass man dem Fehler auf der Spur ist. Jetzt müsste man auch noch die zugehörigen anderen Filter (z.B. Multiplexer) nach oben setzen, damit hier nicht Filter von verschiedenen Herstellern zusammenspielen, die vielleicht andere Probleme erzeugen.
Der bessere Weg: Man sucht den „unkooperativen“ Codec. Dies ist manchmal gar nicht so leicht, denn die Namensgebung einzelner Filter lädt oft zum rätseln ein. Hat man diesen allerdings gefunden „entschärft“ man ihn (und seine Mitstreiter) durch einen Merrit-Wert von 20000. Dies ist mit Sicherheit die sauberere Lösung, denn sonst startet man leicht einen Merrit-Krieg im eigenen System. Bei uns hat es auf jeden Fall geholfen und After Effects importiert jetzt sauber unsere HDV-Files.