F30 Kommandozeile - Aufruf und Parameterübergabe

  • .


    Wie "bastle" ich mir eine Kommandozeile?


    Teil 1


    Vorbemerkung


    Eine Kommandozeile ist eine Textzeile, die direkt (über die Konsole) oder indirekt (über eine Scriptdatei) den Start des VLC, verbunden mit der Übergabe eines Auftrages, ermöglicht. Viele Aufgaben lassen sich über die Kommandozeile einfacher erledigen, vor allem dann, wenn ein Vorgang nicht nur einmalig auszuführen ist, oder wenn man ohne langes Einstellen mit einem Mausklick etwas ausführen will. Manches kann nur über eine Kommandozeile gelöst werden.


    Von diesem Beitrag darf man sich keine Einführung in die Möglichkeiten einer Scriptdatei erwarten. Er soll lediglich den Zugang zur Verwendung von Kommandozeilen erleichtern. Er soll und kann aber keine komplette Behandlung dieses Themas mit seinen schier unerschöpflichen Möglichkeiten bieten.


    Wichtig: Ein Kommandozeilenstring, oder kurz eine Kommandozeile ist immer EINE Zeile, auch wenn dies in den Beispielen zu diesem Thema hin und wieder anders erscheint. Wird hier ein Kommandozeilenstring auf mehrere Zeilen umgebrochen gezeigt, dann macht dies der Browser, ohne dass im so umgebrochenen Kommandozeilenstring Zeilenumbrüche vorhanden sind. Kopiert man einen hier umgebrochen gezeigten Kommandozeilenstring und fügt ihn in einen Texteditor ein, wird man feststellen, dass der String keine Zeilenumbrüche aufweist.



    Aufruf des VLC über die Kommandozeile


    Der Aufruf des VLC per Kommandozeilenstring ist einfach und besteht für alle Betriebssysteme aus den beiden Hauptteilen


    [VLC-Aufruf] [Parameterübergabe]


    Im Aufruf, der hier zunächst einmal behandelt werden soll, gibt es allerdings Unterschiede.



    a) Aufruf unter Windows


    Unter Windows könnte die Kommandozeile für die Wiedergabe eines Videos zum Beispiel so aussehen:

    C:\Program Files (x86)\VideoLAN\VLC\vlc.exe D:\Videos\Wildlife.mp4

    Mit dem Teil "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" wird der VLC aufgerufen. Das muss nicht immer so aussehen. Standardmäßig ist eigentlich der Ordner "C:\Program Files\VideoLAN\VLC\vlc.exe" der Installationsordner für den VLC. Nur bei 64-Bit Windows Versionen werden 32-Bit VLC Versionen im Ordner "C:\Program Files (x86)\VideoLAN\VLC" installiert.


    Es gibt Möglichkeiten, den langen Pfadnamen für den Aufruf des VLC durch kürzere zu ersetzen, vor allem durch Pfadnamen ohne Leerstellen. Eine davon sind die guten alten DOS-Bezeichner.


    605-DOS-Bezeichner-png


    Für "Program Files" wird "PROGRA~1" geschrieben und für "Program Files (x86)" einfach "Progra~2". Um zu diesen DOS-Bezeichnern zu kommen öffnet man die Konsole für den Ordner, in dem die gewünschten Bezeichner zu finden sind. Das geht am einfachsten über den Windows-Explorer. In ihm klickt man bei gedrückter Shift-Taste mit der rechten Maustaste auf den Ordner, für den die Eingabeaufforderung geöffnet werden soll und wählt im sich öffnenden Kontextmenü die Option "Eingabeaufforderung hier öffnen". Bei der Erstellung dieses Bildes habe ich dies für den Boot-Ordner (C:) gemacht.


    Nun gibt man an der Eingabeaufforderung ">_", auch Prompt genannt, den Befehl "dos" mit dem Parameter "/x" ein und bestätigt mit der Eingabetaste. Der Befehl "dir" oder "DIR" listet die Dateien und Unterverzeichnisse eines Verzeichnisses auf. Wird er mit dem Parameter "/X" aufgerufen, werden auch die Kurznamen für Dateien mit Nicht-8Punkt3-Namen gezeigt, also Namen mit mehr als acht Buchstaben, einem Punkt und/oder mehr als drei Buchstaben für die Namenserweiterung. Diese Kurznamen können ohne Einschränkung an Stelle der Langnamen verwendet werden. Das Beispiel für die Syntax würde damit so aussehen:


    C:\Progra~2\VideoLAN\VLC\vlc.exe D:\Videos\Wildlife.mp4

    Eine weitere Möglichkeit wäre, die Umgebungsvariable "Path" um den Installationspfad des VLC zu erweitern. Damit reduziert sich der Aufruf des VLC auf "vlc".


    Dafür, wie man die Umgebungsvariable Path um den Installationspfad des VLC erweitert, gibt es mehrere Möglichkeiten. Die meiner Ansicht nach einfachste geht über die Konsole, also dem Fenster für die Eingabeaufforderung. Hier ein Bild davon:


    604-Umgebungsvariable-png


    Die Konsole muss mit administrativen Rechten geöffnet werden. Wenn man nach dem Start an der Eingabeaufforderung den Befehl "path" eingibt, wird die aktuelle Belegung der Umgebungsvariable "Path" gezeigt (siehe Rahmen 1).


    Gibt man an der Eingabeaufforderung "Path /?" ein, bekommt man eine kurze Hilfe zu diesem Befehl (siehe unter Rahmen 1).


    Gibt man an der Eingabeauforderung "path %path%;Program Files\VideoLAN\VLC" beziehungsweise "path %path%;Program Files (x86)\VideoLAN\VLC" ein, wird der Installationspfad des VLC dem aktuellen Pfad hinzugefügt (siehe Rahmen 3 letzter Eintrag). Die Änderung wirkt sich jedoch erst nach einem Neustart aus.


    Die einzelnen Pfade werden durch ein Semikolon voneinander getrennt. Hier sollte man darauf achten, dass man keine zuviel setzt. Es kann sein, dass zum Beispiel die aktuelle Belegung mit einem Semikolon abschließt, dann darf bei der Eingabe von "path %path%" keines mehr hinzugefügt werden, denn "%path% steht für den aktuellen Inhalt. Wenn dieser am Ende ein Semikolon hat und man setzt nach "%path%" nochmals eines, dann hat man zwischen dem letzten ursprünglichen Eintrag und der Erweiterung zwei Semikolons.


    Hat man alles richtig gemacht, dann genügt nach einem Neustart die Eingabe von "vlc" (ohne Anführungszeichen) an der Eingabeaufforderung der Konsole, um den VLC zu starten und man kann künftig in einem Kommandozeilenstring statt der langen Pfadangabe für den Installationsorder des VLC sich doch wesentlich kürzer fassen. Das Beispiel für die Syntax würde damit so aussehen:


    vlc D:\Videos\Wildlife.mp4



    Aufruf über START


    Der Aufruf des VLC kann direkt oder indirekt über den CMD-Befehl START erfolgen. Bei einem Aufruf über START würde das vorstehende Beispiel so aussehen:


    START vlc D:\Videos\Wildlife.mp4


    Der Aufruf über START hat den Vorteil, dass das Kommandozeilenfenster sofort nach dem Aufruf des VLC wieder geschlossen wird und nicht während der gesamten Laufzeit des VLC zu sehen ist.


    Hinweis:
    Wird dem Befehl START als erster Parameter ein in Anführungszeichen gesetzter Text (String) übergeben, wird dieser String als Titel für das kurzzeitig aufblitzende Kommandozeilenfenster interpretiert. In Fällen, in denen als erster Parameter ein Text in Anführungszeichen übergeben werden soll, meistens der Aufrufpfad für den VLC, muss auch der Parameter Titel übergeben werden, damit nicht der Aufrufpfad für den VLC als Titel interpretiert wird und damit der Aufruf nicht funktioniert. Der Titel selbst, kann, muss aber nicht eingetragen werden, es genügen die beiden Anführungszeichen.


    Soll also der Aufrufpfad des VLC, welcher Leerstellen enthält und deshalb in Anführungszeichen gesetzt werden muss, direkt übergeben werden, dann sähe der Aufruf so aus:


    START "" "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" D:\Videos\Wildlife.mp4


    Ohne die beiden Anführungszeichen nach START würde der in Anführungszeichen stehende Aufrufpfad für den VLC als Titel interpretiert.



    b) Aufruf unter Linux/Unix


    Als Windows-User sage ich einmal, dass der Aufruf unter den -Systemen sehr einfach ist und eigentlich dem Aufruf unter Windows entspricht, wenn dort der Installationspfad für den VLC in die Umgebungsvariable "Path" aufgenommen wurde. Unter Linux/Unix könnte die Kommandozeile für die Wiedergabe eines Videos zum Beispiel so aussehen:

    vlc D:\Videos\Wildlife.mp4

    Sollte die Form für die Dateibezeichnung nicht richtig sein, so bitte ich, dies einem Windows-User zu entschuldigen und mich von der korrekten Darstellung zu informieren.



    c) Aufruf unter Mac OSX


    Von diesem Betriebssystem habe ich noch weniger Ahnung, als von Linux/Unix und muss mich deshalb ausschließlich an das halten, was ich dazu im VideoLAN-Wiki dazu gefundenen habe. Danach könnte die Kommandozeile für die Wiedergabe eines Videos unter Mac OSX zum Beispiel so aussehen:

    ../VLC.app/Contents/MacOS/VLC D:\Videos\Wildlife.mp4

    Auch hier gilt, was ich zum Aufruf unter Linux/Unnix gesagt habe. Falls die Form für die Dateibezeichnung nicht richtig ist, so bitte ich, dies zu entschuldigen und mich zu informieren, wie es richtig wäre.


    Damit ist der Aufrufteil für einen Kommandozeilenstring behandelt. Im folgenden Teil 2 wird beschrieben, wie man sich die Parameter für einen Aufruf des VLC erarbeiten kann.



    Wichtig: Für alle folgenden Beispiele von Kommandozeilenstrings wird für den Aufrufteil nur "vlc" gezeigt". Dieser Aufrufteil muss abhängig vom jeweiligen Betriebssystem und der verwendeten Version des VLC wie vorstehend beschrieben individuell angepasst werden.



    .

  • .



    Wie "bastle" ich mir eine Kommandozeile?


    Teil 2


    Die Parameterübergabe
    Während im Teil 1 der Aufruf des VLC per Kommandozeilenstring behadnelt wurde, soll nun auf den Parameterteil eingegangen werden, also den Teil, der dem VLC beim Aufruf übergeben wird. Parameter sind nichts anderes, als Übergabewerte, die sehr vereinfacht gesagt festlegen, was der VLC zu tun hat. Wird der VLC ohne eine Parameterübergabe aufgerufen, befindet er sich nach dem Aufruf gewissermaßen im Wartezustand.


    Ganz anders verhält sich der VLC, wenn man ihm bereits beim Aufruf durch die Übergabe von Parametern mitteilt, was er tun soll. So kann im einfachsten Fall der VLC zum Beispiel durch die Übergabe des Pfades für eine Videodatei aufgefordert werden, diese Videodatei wiederzugeben. Es könnte nun aber sein, dass die Wiedergabe in einer ganz bestimmten Weise erfolgen soll. Auch das und vieles mehr kann man durch die Übergabe entsprechender Parameter festlegen.


    Hinweis:


    Zu diesem Thema gab es das Problem, zwischen Optionen und Parameter zu unterscheiden. Da ich in der Dokumentation zum VLC hierzu keine klare Festlegung fand, habe ich mich wie folgt entschieden:


    Wenn es darum geht, was dem VLC mitgeteilt werden kann, um ein bestimmtes Verhalten zu erreichen, spreche ich von Optionen. Geht es aber um die Übergabe von Werten, dann bezeichne ich diese als Parameter.


    Eine Parameter-Option ist eine Option, die allein durch ihr Vorhandensein eine Wertübergabe bewirkt und damit ein Parameter ist. Ein Beispiel dafür ist fullscreen. Dieser Option kann kein Wert zugewiesen werden. Es reicht das bloße Anführen.




    Die Syntax der Parameterübergabe
    Die zu übergebenden Parameter können nun nicht wahllos aneinandergereiht übergeben werden. Damit sie vom VLC auch richtig ausgewertet werden können, müssen einige Regeln eingehalten werden. Diese Regeln zusammengefasst bezeichnet man als die Syntax für einen Parameterstring. Etwas vereinfacht sieht diese so aus:


    Eingabe --sout "#moduleA{optionA=Wert{parameter-optionA},optionB=Wert}:moduleB{optionC=...,optionD=...}:..."


    Die ehemalige Streaming HowTo-Dokumentation, in der auch alle Module aufgelistet waren, wurde durch zwei neue, Streaming HowTo und Streaming HowTo New ersetzt.



    a) Eingabe oder der Input-String


    Mit dem Input-String wird die vom VLC zu verwendende Mediaquelle (auch MRL für Media Resource Locator) definiert. Das kann eine Mediadatei, ein Media-Stream oder ein Media-Gerät sein. Eine genaue Beschreibung dazu, allerdings in Englisch, findet man im VideoLAN-Wiki unter Media resource locator.


    Der Input-String ist in der Regel der erste Parameter und hat kein Präfix, also weder einen Bindestrich, doppelten Bindestrich oder Doppelpunkt. Grundsätzlich muss ihm ein Spezifizierer vorangestellt sein. Solche Spezifizierer sind zum Beispiel dshow:// für Direktshow, rtp:// für einen RTP-Stream, dir:/// für einen Ordner oder dvb:// für einen DVB-Stream. In der Regel stehen nach dem Doppelpunkt zwei Schrägstriche, bei Dateien und Ordner sind es drei. Für letztere kann man auf den Spezifizierer auch verzichten. Der VLC erkennt auch so, was damit gemeint ist.


    Ein Input-String muss nicht zwingend vorhanden sein. Wichtig ist es zu wissen, dass der VLC auch mit mehreren Input-Strings aufgerufen werden kann, jeder mit seinen eigenen Parametern für die Art der Bearbeitung. Ein besonderer Input-String ist vlc. Zum Beispiel gibt vlc -H eine Infodatei aus und nach vlc://quit wird der VLC beendet.



    b) --sout oder der Output-String


    Der Output-String definiert, was der VLC mit der Eingabe machen soll. Er wird für die reine Wiedergabe nicht benötigt, da weiß der VLC, was er als Player zu tun hat. Nach der einleitenden Kennung --sout und einer Leerstelle folgt nach einem Doppelkreuz das für die Aufgabe benötigte Modul. An Stelle von --sout #modulA kann auch geschrieben werden: --sout=#modulA oder :sout=#modulA. Ich verwende die erstgenannte Schreibweise.


    Hier die Module für den Output-String:

    • standard (alias: std)
      ermöglicht einen Stream über ein nicht spezialisiertes Ausgangsmodul, zum Beispiel UDP, file, HTTP, zu senden. Es wird eigentlich nie als erstes Modul für den Output-String verwendet.
    • transcode
      ist für eine Umcodierung zuständig. Das betrifft jede Codeänderung, auch bedingt durch eine andere Skalierung, Bitrate oder einen Filter. Da eine Umcodierung sehr viel Rechenleistung benötigt, kann sie zumindest auf schwächeren Systemen in Echtzeit zu Problemen führen.
    • duplicate
      erzeugt ein Duplikat. Damit kann der Input-Stream auf zwei unterschiedliche Weisen behandelt werden. Der häufigste Anwendungsfall ist wohl die Ausgabe als Stream und die gleichzeitige Wiedergabe auf dem Monitor.
    • display
      wird wie das standard-Modul nicht als erstes Modul für den Output-String eingesetzt. Es ermöglicht den Input-Stream innerhalb des duplicate -Moduls wiederzugeben.
    • rtp
      Streamt über RTP und ermöglicht auch RTSP-Unterstützung.
    • es
      ermöglicht aus einem Eingabestrom seperate Elementar-Streams (ES) zu machen, zum Beispiel um Audio-und Video-Streams, in eigenen Dateien zu speichern.

    c) globale Optionen


    Neben den Optionen, die sich ausschließlich auf ein bestimmtes Modul beziehen, gibt es auch eine große Anzahl globaler Optionen. Ihnen werden eine Leerstelle und zwei Bindestriche oder einen Doppelpunkt vorangestellt. "oder" bedeutet hier nicht, dass man frei wählen könne, ob man den Doppelpunkt oder die zwei Bindestriche verwendet. In den allermeisten Fällen kann man das zwar, aber es gibt auch Fälle, bei denen Optionen mit vorangestelltem Doppelpunkt nicht erkannt werden, mit zwei Bindestrichen jedoch schon. Das gilt nach meinen Beobachtungen vor allem dann, wenn einen Option vom Programm nicht am erwarteten Ort gefunden wurde. Auf jeden Fall ist mit zwei Bindestrichen nach meinen Feststellungen näher an der sicheren Seite. Das gilt auch für die Fälle, bei denen der VLC generierte Ein- und Ausgabestrings anzeigt. In diesen werden grundsätzlich keine zwei Bindestriche sondern der Doppelpunkt verwendet.


    Die globalen Optionen alle zu beschreiben, ist mir nicht möglich und wäre auch nicht sehr sinnvoll, es sind mehr als 1600! Nach meinen Feststellungen gibt es keine zwingende Regel, an welcher Stelle eines Kommandozeilenstrings globale Optionen zu stehen haben. Trotzdem sollte man sie nicht willkürlich verstreuen, sondern sie dort platzieren, wo sie sachlich hingehören.


    Hier ein Beispiel für die Wiedergabe des TV-Senders Das Erste (im süddeutschen Bereich) im Vollbildmodus:


    vlc dvb-t://frequency=666000000 --program=32 --fullscreen


    Über die Option program mit dem Wert 32 soll von den vier Sendern auf der Frequenz 666000 kHz Das Erste wiedergegeben werden und die Option fullscreen soll den VLC veranlassen, die Sendung im Vollbildmodus wiederzugeben. Beides funktioniert mit vorstehender Kommandozeile.


    vlc --program=32 --fullscreen dvb-t://frequency=666000000


    Aber auch dann, wenn die beiden Parameter vor dem Input-Stream platziert werden, wertet der VLC diese Kommandozeile in gleicher Weise aus.


    Setzt man vor fullsreen an Stelle der beiden Bindestriche einen Doppelpunkt, dann erfolgt keine Vollbildausgabe, unabhängig davon, wo diese Parameter-Option steht.


    Setzt man vor program einen Doppelpunkt, dann kommt es darauf an, wo dieser Parameter übergeben wird. Bei einer Übergabe vor dem Input-Stream ignoriert der VLC diesen Parameter und zeigt an Stelle von Das Erste den Sender arte. Wird dieser Parameter allerdings mit Doppelpunkt nach dem Input-Stream übergeben, dann wird er ausgewertet und Das Erste gezeigt.



    Beispiel zum Verständnis der Syntax


    Mit diesem Beispiel, bei dem eine Videodatei ins Heimnetz gestreamt werden soll, will ich in drei Varianten zeigen, wie man den allein auf Grund seiner Länge meist relativ unübersichtlichen Kommandozeilenstring in etwas übersichtlicher Weise konstruieren kann.


    Variante 1:
    Das Video soll so wie es ist, also ohne Transkodierung, für alle Netzteilnehmer mit SAP-Ankündigung ins Heimnetz gestreamt werden und gleichzeitig auch auf dem Server-PC angezeigt werden.


    Code
    1. vlc file:///D:/Ordner/TestVideo.mp4 --sout #duplicate{dst=display,dst=rtp{dst=224.1.1.1,port=5004,mux=ts,sap,name=TestStream}}


    Dieser Kommandozeilenstring, mit dem die Aufgabe gelöst werden kann, ist noch relativ kurz, aber trotzdem nicht gerade übersichtlich. Versuchen wir, ihn etwas anders darzustellen:


    Code
    1. vlc file:///D:/Ordner/TestVideo.mp4
    2. --sout #duplicate{
    3. dst=display,
    4. dst=rtp{
    5. dst=224.1.1.1,port=5004,mux=ts,sap,name=TestStream
    6. }
    7. }
    • In der Zeile 1 haben wir den Aufruf des VLC und die Übergabe des Input-Streams.
    • Mit der Zeile 2 beginnt der Output-String. Da das Test-Video einmal wiedergegeben und einmal ins Netz gestreamt werden soll, benötigt man das Modul duplicate. Diesem Modul müssen eine Reihe von Informationen (Parameter) übergeben werden, die wir in einen Block mit geschweiften Klammern packen wollen. Die erste Klammer ist bereits am Ende der Zeile 2 gesetzt. Zur besseren Übersichtlichkeit rücke ich jeden untergeordneten Block um eine Tab-Stelle ein.
    • In Zeile 3 wird die Option dist mit dem Parameter display übergeben. dist steht für das Englische destination, also dem Ziel und das ist in diesem Beispiel einmal die Wiedergabe.
    • Auch die Zeile 4 beginnt mit der Option dst mit dem Parameter rtp, bei dem es sich um ein Modul handelt, über das das Test-Video ins Heimnetz gestreamt werden soll. Dafür müssen ihm ebenfalls Parameter übergeben werden, auch hier in einem geschweiften Klammern-Block.
    • In der Zeile 5 haben wir mit dst die zu verwendende IP-Adresse, mit port den Port, über den der Stream laufen soll und mit mux die anzuwendende Verkapselungsmethode. Bei dem nächsten Parameter sap handelt es sich um eine Parameter-Option, der kein Wert zu übergeben ist. Die letzte Option name bezieht sich auf die SAP-Ankündigung. Der damit übergebene Werte wird vom VLC gefunden und unter Lokales Netzwerk - Netzwerkstreams (SAP) angezeigt. Damit kann durch einen Klick der Stream von jedem Clent aus zur Wiedergabe aufgerufen werden.
    • In den Zeilen 6 und 7 stehen nur geschweifte Klammern, die jede einen Parameter-Block abschließen, die Klammer in Zeile 6 den für das Modul rtp und die in Zeile 7 für das Modul duplicate.

    Zumindest solange man die Erstellung von Kommandozeilenstrings nicht aus dem ff beherrscht, ist diese Darstellung deutlich übersichtlicher als ein Bandwurm-String. Man sieht hier ganz deutlich, was das Modul duplikate erledigt, es dupliziert die Eingabe und gibt das Ergebnis einmal für die Wiedergabe (display) und einmal für das Streaming (rtp) aus. Das Modul rtp streamt an eine Multicast-Adresse mit einer SAP-Ankündigung.


    Selbstverständlich muss der Code in der strukturierten Form, bevor er als Kommandozeile verwendet wird, durch Entfernen der Zeilenschaltungen und der Einrückungen wieder auf eine Zeile reduziert werden.


    Variante 2:


    Um eventuelle Übertragungsprobleme auszuschließen soll nun das Test-Video, bevor es in das Netz eingespeist wird, auf halbe Größe reduziert werden. Dafür muss es transcodiert werden. Da sich sonst nichts geändert, nehmen wir den strukturierten Code der Variante 1 und ergänzen ihn.



    Bis zur Zeile 3 hat sich nichts verändert. In Zeile 4 wurde aber vor den Block des rtp-Moduls ein Block für das transcode-Modul eingefügt.


    Mit vcodec werden die für die Videocodierung und mit acodec für die Audiocodierung zu verwendenden Codecs festgelegt. Mit scale wird das Video auf halbe Größe (und damit auf ein Viertel an Daten) skaliert. Mit vb wird die Video- und mit ab die Audio-Bitrate reduziert. Ausserdem soll der Parameter-Option deinterlace das Zeilenflimmern verhindern.


    Hier der daraus entstehende Kommandozeilenstring:


    Code
    1. vlc file:///D:\Ordner/TestVideo.mp4 --sout #duplicate{dst=display,dst={transcode{vcodec=mp4v,scale=0.5,acodec=mpga,vb=800,ab=64,deinterlace}:rtp{dst=224.1.1.1,port=5004,mux=ts,sdp=sap,name="TestStream"}}}


    Variante 3:


    Angenommen, wir sind mit dem Ergebnis noch nicht ganz zufrieden und möchten die Wiedergabe des Videos auf dem Server-PC in der selben Größe haben, wie bei den Clients, dann müssen wir eine Umstellung vornehmen, die uns sicherlich über die strukturierte Darstellung des Codes am leichtesten gelingt. Und so könnte das aussehen:


    Code
    1. vlc file:///D:\Ordner/TestVideo.mp4
    2. --sout #transcode{
    3. vcodec=mp4v,scale=0.5,acodec=mpga,vb=800,ab=64,deinterlace
    4. }:duplicate{
    5. dst=display,
    6. dst=rtp{
    7. dst=224.1.1.1,port=5004,mux=ts,sdp=sap,name="TestStream"
    8. }
    9. }


    Da beide Ausgaben transcodiert werden sollen muss die Transcodierung der Duplizierung vorausgehen. Mehr ist dazu eigentlich nicht zu sagen. Der Kommandozeilenstring sieht damit so aus:


    Code
    1. vlc file:///D:\Ordner/TestVideo.mp4 --sout #transcode{vcodec=mp4v,scale=0.5,acodec=mpga,vb=800,ab=64,deinterlace}:duplicate{dst=display,dst=rtp{dst=224.1.1.1,port=5004,mux=ts,sdp=sap,name="TestStream"}}


    Zum Schluss noch eine Anmerkung: Wenn Parameter verwendet werden, denen ein Text zu übergeben ist, zum Beispiel Pfade, und diese Texte entahlten Leerstellen, dann müssen sie in Anführungszeichen gesetzt werden.



    Zusammenfassung


    Eine wirkliche Syntax für die Übergabe der Parameter in einem Kommandozeilenstring ist dies nicht geworden. Es ist aber vielleicht ein kleine Hilfe für das Verständnis der nachfolgenden Beispiele.



    .

  • .


    Wie "bastle" ich mir eine Kommandozeile?


    Teil 3


    Wie der VLC bei dem Zusammenstellen einer Kommandozeile hilft


    Zum Aufruf über einen Kommandozeilenstring gehört neben dem Aufruf selbst mindestens ein Parameter, der dem VLC zu übergeben ist. In dem Beispiel für die Aufrufe unter den verschiedenen Betriebssystemen habe ich schon einmal auch einen solchen Parameter gesetzt, den Pfad für die Wiedergabe einer Videodatei. Zugegeben, das ist sehr simpel und wenn es durchgehend so einfach wäre, wäre dieses Thema sicher nicht geschrieben worden.


    Zum Glück ist der VLC dabei behilflich, eine Kommandozeile zusammenzustellen. Man muss, sehr vereinfacht gesagt, eigentlich im GUI-Interface-Fenster nur das tun, was der VLC machen soll, wenn man ihn von der Kommandozeile aus startet.


    a) einfache Wiedergabe


    Ich greife dafür auf das simple Beispiel mit der Wiedergabe einer Videodatei zurück. Wenn die wiederzugebende Datei über die Menüoption Medien - Datei öffnen... geöffnet wird, landet diese sofort in der Wiedergabeliste und wird abgespielt. Das war also nichts. Man kann aber auch anders vorgehen.

    • Man öffnet über die Menüoption Mehrere Dateien öffnen... (vor der Version 2.1.0 nannte sich diese Option noch Öffnen (erweitert)..., was sicherlich glücklicher war) das Dialogfenster Medien öffnen und fügt in die Dateiauswahl über die Taste Hinzufügen... die wiederzugebende Videodatei ein.
    • Nun aktiviert man unten links die Auswahl Mehr Optionen zeigen. Daraufhin wird das Dialogfenster nach unten erweitert und man sieht einige weitere Einstellmöglichkeiten. Im Augenblick interessiert nur die Zeile mit dem MRL (Media Resource Locator), also eine Angabe zur Identifizierung und Lokalisierung einer Multimedia-Quelle. Der Eintrag in dieser Zeile könnte so aussehen: file:///D:\Videos\Wildlife.mp4
    • Man notiert (kopiert) den Inhalt dieser Zeile und hat damit den ersten Parameter für die Kommandozeile.
    • Unter der Zeile mit dem MRL ist die Zeile zum Optionen bearbeiten. In ihr ist der Eintrag :file-caching=300. Die Leerstelle vor dem Doppelpunkt bitte beachten! Auch diesen Eintrag notiert man für die Kommandozeile.
    • Zuletzt startet man über die Taste Wiedergabe die Wiedergabe der gewählten Videodatei. Wenn es mit der Wiedergabe klappt, hat man alle Teile für die Kommandozeile, über die der VLC aufgerufen und eine bestimmte Videodatei wiedergeben soll.

    Das wäre also die Kommandozeile:


    vlc file:///D:\Videos\Wildlife.mp4 :file-caching=300


    Sie sieht etwas anders aus, als das oben verwendete Beispiel. Vor dem Dateipfad steht nun noch "file:///" und dahinter der Parameter " :file-caching=300". Ich habe in dem Beispiel auf diese Teile verzichtet, weil sie nicht zwingend erforderlich sind. Warum?


    Nun, der VLC erkennt zum einen, dass es sich bei dem Textteil "D:\Videos\Wildlife.mp4" um eine Datei handelt, die wiedergegeben werden soll. Er braucht durch das Voranstellen von "file:///" nicht besonders darauf hingewiesen werden.


    Zum anderen ist der Wert für "file-caching" standardmäßig bereits auf 300 eingestellt. Solange man diese standardmäßige Vorgabe nicht explizit geändert hat, wird der VLC diesen Wert auch verwenden, ohne dass er dafür einen gesonderten Auftrag benötigt.


    Es ist aber natürlich nicht falsch, ja, im Zeifelsfalle sogar richtig, die Einträge für die MRL und die Optionen ungekürzt zu übernehmen.



    b) Mikrofonaufnahme


    Angenommen, es soll per Kommandozeile über einen Mausklick eine Mikrofonaufnahme gestartet werden. Zum Herausfinden, wie die Parameterteil der Kommandozeile aussehen sollen, verwendet man wieder erst einmal das GUI-Interface des VLC und geht wie folgt vor:

    • Über die Menüoption Medien - Stream... kommt man zum Dialog Medien öffnen und selektiert dort die Registerseite Aufnahmegerät öffnen.
    • Hier stellt man den Aufnahmemodus DirecShow ein, für Video-Gerätename - None und für Audio-Gerätename - Mikrofon. Danach selektiert man die Option Mehr Optionen zeigen.
    • Aus dem sich öffnenden Bereich übernimmt man den Eintrag für die MRL und der Zeile für Optionen bearbeiten und bildet damit nach dem VLC-Aufruf den ersten Teil der Kommandozeile. Die könnte nun zum Beispiel so aussehen:
      vlc dshow:// :dshow-vdev=none :dshow-adev=Mikrofon (Realtek High Definiti :live-caching=300
    • Über die Taste Stream gelangt man zum Dialog Streamausgabe. Dort wird der MRL für die Quelle angezeigt und man geht über die Taste Next weiter zur Zieleinstellung.
    • Hier geht man über die Taste Hinzufügen für die Bestimmung der Datei, in die die Aufnahme geschrieben werden soll, zur nächsten Seite, von der aus man über die Taste Durchsuchen... den Dateidialog öffnen und dort die Zieldatei bestimmt. Man gibt ihr die Namenserweiterung "mp3" und geht danach über die Taste Next zur Seite mit den Umkodierungsoptionen.
    • Hier stellt man das Profil Audio - MP3 ein und überprüft dafür über den Taster mit dem gekreuzten Werkzeug rechts der Profilliste auch die Einstellungen, MPEG-TS für die Verkapselung, Video deaktiviert, für Audio den MP3 Codec, 2 Kanäle und mindestens 20050 Hz Abtastrate. Danach geht man über die Taste Next zur Seite Optionen einstellen.
    • Genau wegen dieser Seite wurde zu Anfang die Option Stream... gewählt, denn nur dafür wird der generierte Stream-Ausgabe-String gezeigt. mit ihm hat manr das letzte Teilstück für die Kommandozeile. Und so könnte dieser aussehen:
      :sout=#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100}:file{dst=D:\\VLC\\Aufnahmen\\MikroAufnahme.mp3,no-overwrite} :sout-keep

    Fügt man diesen Stream-Ausgabe-String der bisherigen Kommandozeile hinzu, dann sieht diese so aus:


    vlc dshow:// :dshow-vdev=none :dshow-adev=Mikrofon (Realtek High Definiti :live-caching=300 :sout=#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100}:file{dst=D:\\VLC\\Aufnahmen\\MikroAufnahme.mp3,no-overwrite} :sout-keep


    Bevor man sich weiter mit dem Kommandozeilenstream beschäftigt, sollte man aber über die Taste Stream die Mikrofonaufnahme starten. Funktioniert sie nicht, hat man einen Fehler gemacht. Erst wenn dieser gefunden ist, kann man sich wieder der Kommandozeile zuwenden.


    Indem man Zeichen für Zeichen dieser Kommandozeile an der Eingabeaufforderung der Konsole (am Prompt) eingibt, könnte man prüfen, ob sie auch das macht, was von ihr erwartet wird. Einfacher ist es aber, wenn man die zusammengestellte Kommandozeile in eine leere Textdatei kopiert und dieser einen Namen mit der Namenserweiterung "cmd" oder "bat" gibt, zum Beispiel "Mikrofonaufnahme.cmd". Ein Doppelklick auf diese Datei bewirkt, dass ihr Inhalt, also die Kommandozeile, von dem Windowsprogramm "cmd.exe", dem Kommandozeileninterpreter, abgearbeitet wird.


    Es wird nicht funktionieren, denn bisher wurde nicht berücksichtigt, dass es ist ein Unterschied ist, ob eine Eingabe direkt im VLC oder indirekt über eine Kommandozeile erfolgt. Für den Kommandozeileninterpreter von Windows werden verschiedene Eingaben anders interpretiert, als dies der VLC macht. in einem Kommandozeilenstring werden zum Beispiel Leerzeichen als Trennzeichen zwischen zwei Parameter interpretiert. Damit würden die ersten Parameter, die dem VLC bei dessen Aufruf übergeben werden (ich habe jeden in eckige Klammern gesetzt) diese sein:


    [dshow://], [:dshow-vdev=none], [:dshow-adev=Mikrofon], [(Realtek], [High], [Definiti], [:live-caching=300] ...


    Wie man unschwer sehen kann, handelt es sich bei "(Realtek", "High" und "Definiti" nicht um eigenständige Parameter, sondern um Teile des Parameter ":dshow-adev=Mikrofon (Realtek High Definiti".


    Der VLC kann mit diesen Parametern nichts anfangen. Indem man Parameterteile mit Leerstellen in Anführungszeichen setzt interpretiert der Kommandozeileninterpreter solche Leerstellen nicht mehr als Trennzeichen zwischen zwei Parametern. Also setzt man den Wert für die Option dshow-adev in Anführungszeichen. Damit sieht unsere Kommandozeile jetzt so aus:

    vlc dshow:// :dshow-vdev=none :dshow-adev="Mikrofon (Realtek High Definiti" :live-caching=300 :sout=#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100}:file{dst=D:\\VLC\\Aufnahmen\\MikroAufnahme.mp3,no-overwrite} :sout-keep


    So geändert müsste dieser Kommandozeilenstring auch funktionieren.


    Genau so, wie es hier für diese beiden Fälle beschrieben wurde, geht man für alle anderen ebenfalls vor und bekommt damit die generierten Strings für den Input- und, sofern es sich nicht nur um eine Wiedergabe handelt, auch für den Output-Teil einer zu bildenden Kommandozeile.


    Auf jeden Fall hat man über dieses hier beschriebene Vorgehensweise schon einmal ein Grundgerüst für eine Kommandozeile, das sicher noch ausbaufähig ist.



    .

  • .


    Wie "bastle" ich mir eine Kommandozeile?


    Teil 4


    Wie man benötigte Parameter findet


    Es gibt viele Einstellungen, die man vom VLC kennt, die aber über die bisher beschriebene Vorgehensweise nicht herauszufinden sind. Der VLC gibt zwar auf Anforderung eine umfassende Liste zu den zur Verfügung stehenden Parameter aus, auf die man nicht verzichten sollte, aber alleine über diese Liste findet man meistens nur schwer, was man sucht.


    Hier eine Beschreibung für die Beschaffung der benötigten Hilfsmittel unter Windows:


    a) Datei vlc-help.txt erzeugen lassen


    Um sich die vorstehend erwähnte Liste vom VLC ausgeben zu lassen muss man unter administrativen Rechten von der Eingabeaufforderung aus zum Installationsverzeichnis des VLC wechseln und dort folgende Kommandozeile eingeben: vlc --longhelp --advanced


    Dazu dieses Bild:


    617-Erweiterte-Hilfe-png


    Nach dem Öffnen der Eingabeaufforderung wechselt man über die erste der grün markierten Zeilen zum Installationsverzeichnis des VLC (32 Bit-Version). An Stelle von "progr~2" müsste füreine 64 Bit-Version "progra~1" eingegeben werden. Danach wird das Kommando so eingegeben, wie es in der zweiten grün markierten Zeile zu sehen ist. Danach meldet der VLC in einem eigenen Fenster, dass die Datei "vlc-help.txt" gespeichert worden sei. Speicherort ist das Installationsverzeichnis des VLC.


    Wer es sich etwas einfacher machen will bekommt diese Liste auch über diese Seite von VideoLAN, allerdings mit englischen Kommentaren und keiner Gewähr für absolute Aktualität.


    b) Programm "WinMerge" besorgen


    Diese kostenlose Programm von Microsoft ist hervorragend geeignet, die Unterschiede in zwei Dateien anzuzeigen. Für die Datei WinMerge.exe legt man eine Verknüpfung auf den Desktop. Damit lässt sich das Programm sehr leicht mit zwei zu vergleichenden Dateien starten.



    Und nur das unmittelbare Vorgehen, um zum Beispiel herauszufinden, welchen Parameter man in einer Kommandozeile setzen muss, um die Anzeige eines Videos ohne Rahmen zu erreichen:


    c) Kopie von der Konfigurationsdatei "vlcrc" erstellen


    Diese Datei findet man im Verzeichnis %APPDATA%\vlc. Für die Anzeige des Inhalte braucht %APPDATA%\vlc nur in der Adresszeile des Explorers eingegeben und bestätigt zu werden. Mit Strg+C kopiert man die Datei vlcrc und mit Strg+V fügt man die Kopie ein.


    d) Einstellung vornehmen


    Nun startet man den VLC, nimmt die Einstellung vor, die man auch für die Kommandozeile verwenden will, in diesem Beispiel soll es die Wiedergabe des Videos ohne Rahmen sein (Einfache Videoeinstellungen - Fendsterdekoration deaktivieren), speichert die Änderung und beendet den VLC. Man hat nun die Konfigurationsdatei mit dieser Änderung und die Kopie dieser Konfigurationsdatei ohne diese Änderung.


    e) Konfigurationsdateien vergleichen


    Man öffnet den Ordner %APPDATA%\vlc, markiert die beiden Dateien vlcrc und vlcrc - Kopie und zieht sie mit gedrückter linken Maustaste auf das Verknüpfungssymbol für WinMerge. Das Programm lädt beide Dateien und vergleicht sie und stellt sie nebeneinander dar. Gibt es mindestens einen Unterschied, sind in der Symbolleiste einige Symbole aktiviert, so auch das Symbol mit einem grünen nach unten weisenden Pfeil für "Nächster Unterschied". Hat man im VLC die Fensterdekoration deaktiviert, so wird mit einem Klick darauf für beide Dateien die Zeile gezeigt, in der sich die Dateien unterscheiden.


    Für die Datei vlcrc wird video-deco=0 angezeigt, für vlcrc - Kopie dagegen #video-deco=1


    Grundsätzlich hat man damit den gesuchten Parameter, den man für die Kommandozeile übernehmen kann. Das gilt jedoch nicht für sogenannte boolsche Parameter. Boolsche Parameter sind solche, die nur zwei Zustände haben können, ja-nein, richtig-falsch, wahr-nicht wahr oder 0-1.


    Der Parameter video-deco ist ein solche boolscher Parameter. Eigentlich ist dies logisch, denn der Rahmen wird entweder angezeigt oder nicht. In der Datei vlcrc wird in der Überschrift zu diesem Pareter auch darauf hingewiesen, sie lautet: "# Window decorations (boolsche (logisch))".


    Für alle solche Parameter gilt, dass der Bezeichner alleine (hier video-deco) führ wahr steht. Soll er für falsch stehen, wird ihm ein "no-" voraus gesetzt. Soll also der Rahmen nicht gezeigt werden, muss der Parameter in dieser Form übergeben werden: "no-video-deco". Dies entspricht der Form "video-deco=0" in der Konfigurationsdatei.


    f) Testlauf


    In den meisten Fällen ist man nun schon am Ziel. Probiert man es aus und setzt für die Kommandozeile den Parameter --no-video-deco, dann müsste das Video in diesem Beispiel eigentlich ohne Rahmen angezeigt werden.


    g) Suche in der VLC-Hilfe-Datei


    Wird der Parameter aus der Datei vlcrc vom VLC nicht akzeptiert, so ist er doch ein guter Anhaltspunkt für die Suche in der VLC-Hilfe-Datei. Man öffnet sie mit einem Texteditor und sucht nach dem in der Konfigurationsdatei gefundenen Bezeichner. Eventuell findet man hier ja noch weitere Hinweise dazu.


    .


  • .


    Wie "bastle" ich mir eine Kommandozeile?


    Teil 5


    Beispiele


    Mikrofonaufzeichnung 2


    Als erstes Beispiel soll noch einmal auf die Kommandozeile für die Mikrofonaufzeichnung zurückgegriffen werden. Diesmal aber mit zwei interessanten Erweiterungen. Zum einen soll während der Aufzeichnung weder das Fenster der Konsole noch das des VLC geöffnet sein und zum anderen soll die Datei, in die die Aufzeichnung erfolgt, einen Zeitstempel im Namen bekommen. Damit soll verhindert werden, dass durch eine neue Aufzeichnung eine frühere überschrieben wird. Hier die "bereinigte" Ausgangsfassung:


    vlc dshow:// --sout=#transcode{acodec=mp3,ab=128,channels=2,samplerate=44100}:file{dst=D:/VLC/Aufnahmen/MikroAufnahme.mp3}


    Wie man sieht, ist einiges weggefallen. Mit etwas "Fingerspitzengefühl" und einem Test nach jeder Änderung kann schrittweise an eine solche "Verschlankung" herangehen. Nun aber zur erweiterten Kommandozeile mit den neuen Eigenschaften:


    vlc --qt-start-minimized dshow:// --sout-file-format --sout=#transcode{acodec=mp3,ab=128,channels=2,samplerate=44100}:file{dst=D:/VLC/Aufnahmen/MikroAufnahme_%%d.%%m.%%y_%%H.%%M.%%S.mp3}


    Nach dem Start einer Batchdatei mit diesem Kommandozeilenstring sieht man nur für den Bruchteil einer Sekunde ein Aufblitzen des sofort wieder geschlossenen Konsolenfensters. Das VLC-Fenster wird nicht angezeigt. Dafür ist im Infobereich der Taskleiste der VLC-Kegel zu sehen. Ein Klick darauf mit der linken Maustaste öffnet das VLC-Fenster. Auf einen Klick mit der rechten Maustaste öffnet sich das Kontextmenü. Von den hier angebotenen Optionen solche, die sich auf eine Wiedergabe, zum Beispiel "Pause" nicht verwendet werden.


    Hinweis


    Für die Darstellung von Datums- und Zeitwerten werden einzelne Buchstaben als Variable verwendet, denen das Prozentzeichen als Präfix vorangestellt ist (z.B. %D für den Tag). Werden solche Varible in einer Scriptdatei verwendet, muss ihnen ein zweites Prozentzeichen vorangestellt werden. Bei einer direkten Übergabe einer Kommandozeile an den VLC, zum Beispiel über eine Verknüpfung auf dem Desktop, darf nur eines verwendet werden.



    Desktopaufzeichnung


    a) Einfache Aufnahme ohne Cursor


    Es gibt die verschiedensten Gründe, von dem, was auf dem Desktop geschieht, eine Aufzeichnung zu machen. Mit dieser Kommandozeile ist das zum Beispiel möglich:


    vlc screen:// :screen-fps=25 :screen-left=0 :screen-top=0 :screen-width=960 :screen-height=540 :sout=#transcode{vcodec=h264,vb=1600}:file{dst=D:/VLC/Aufnahmen/DesktopAufnahme_01.mp4}


    Über die der MRL (screen://) folgenden Parameter kann man die Bilder pro Sekunde, für eine gute Aufnahme sollten es mindestens 15 sein, den linken oberen Punkt des Aufzeichnunsbereiches und dessen Größe festlegen. Im Output-Teil legt man über die Bitrate (vb) die Qualität der Aufnahme fest. 800 sollten es mindestens sein.


    Da gerade bei einer Aufzeichnung des Desktop das Fenster der Konsole meistens stört, kann man vorstehenden Kommandozeilenstring noch etwas verbessern, indem der Aufruf des VLC nicht direkt, sondern über den START-Befehl erfolgt. Das sähe dann so aus:


    START vlc screen:// :screen-fps=25 :screen-left=0 :screen-top=0 :screen-width=960 :screen-height=540 :sout=#transcode{vcodec=h264,vb=1600}:file{dst=D:/VLC/Aufnahmen/DesktopAufnahme_01.mp4}


    Wenn aber der VLC nicht so einfach über "vlc" aufgerufen werden kann, weil die dafür erforderliche Umgebungsvariable nicht gesetzt ist, muss der VLC über die vollständige Pfadangabe aufgerufen werden. Dies kann zu einem Problem führen, wenn der Pfad in Anführungszeichen gesetzt wird, zum Beispiel weil er Leerzeichen enthält. Der Startbefehl interpretiert nämlich den ersten Parameter, wenn er in Anführungszeichen steht, als Titel und nicht als den Aufrufpfad. Wie an anderer Stelle hier bereits darauf hingewiesen wurde, muss in solchen Fällen vor dem Aufrufpfad der Titel in Anführungszeichen übergeben werden. Der Titel muss aber keinen Text enthalten, es genügen die beiden Anführungszeichen. Das sähe dann so aus:


    START "" "C:/Program File/VideoLAN/VLC/vlc.exe" screen:// :screen-fps=25 :screen-left=0 :screen-top=0 :screen-width=960 :screen-height=540 :sout=#transcode{vcodec=h264,vb=1600}:file{dst=D:/VLC/Aufnahmen/DesktopAufnahme_01.mp4}



    b) Aufnahme mit Cursor


    Will man über eine Desktop-Aufnahme zeigen, wie man vorgeht, um zum Beispiel einen Kommandozeilenstring zu basteln, dann braucht man dafür fast zwingend auch den Mauszeiger, damit später der Betrachter genau sehen kann, was gemacht wurde. Mit dieser Kommandozeile wir der Mauszeiger mit aufgenommen.


    vlc --qt-start-minimized screen:// --screen-mouse-image=maus5.png :screen-left=0 :screen-top=0 :screen-width=1280 :screen-height=720 :screen-fps=15.000000 --sout=#transcode{vcodec=h264,vb=1600,acodec=none}:file{dst=D:/VLC/Temp/DAufnahme.mp4}


    Damit dies auch wirklich funktioniert, braucht man auch einen Mauszeiger, denn es wird nicht der Systemmauszeiger sondern ein Mauszeiger aus einer Bilddatei aufgenommen. Diese Bilddatei wird dem VLC über den Parameter "screen-mouse-image" bekannt gemacht; korrekt wäre dafür diese Form: "--screen-mouse-image=fille:///C:/Ordner/maus5.png". Die aktuellen VLC-Versionen haben allerdings ein Problem, dieses Bild zu finden, wenn man den Pfad dafür syntaktisch richtig angibt. Gefunden wird ein Bild nur dann, wenn es im selben Verzeichnis liegt, wie die Batchdatei, über die die Kommandozeile gestartet wird. Dafür sieht die Bekanntmachung so aus: "--screen-mouse-image=maus5.png".


    Man sollte darauf achten, dass die Größe des Aufnahmebereiches proportional der Größe des Monitors entspricht, da es ansonsten bei der Bewegung des Mauszeigers in manchen Fällen zu Streifenbildung kommen kann. Hat der Monitor eine Auflösung im Format 16:9, dann sollte auch der Aufnahmebereich in diesem Format definiert werden.


    Das Bild für einen Mauszeiger sollte etwa die Größe von 30x30 Pixel haben und die Pfeilspitze in der linken oberen Ecke liegen und der Hintergrund transparent sein. Hier sechs verschiedene Mauszeiger zum Herunterladen: Mauszeiger.zip. Weitere kann man sich leicht selbst machen.



    c) Aufnahme mit Ton


    Zumindest unter Windows ist es mir nicht gelungen, gleichzeitig Bild und Ton aufzunehmen. Wenn es überhaupt möglich ist, dann nur über zwei Instanzen, von denen eine den Ton und die andere das Bild aufzeichnet. Indem ich von einer Batchdatei aus gleichzeitig zwei Instanzen des VLC mit diesen Aufgaben startete, wurde für jede der beiden Instanzen das Interfacefenster geöffnet und dem Anschein nach (bei beiden Fenstern lief die Fortschrittsanzeige) zeichneten auch beide auf. Der Ton wurde auch aufgenommen, das Bild der Dateigröße nach auch, aber die Videodatei wurde weder vom VLC noch von MediaInfo als solche erkannt.


    Es ist allerdings möglich, beide Aufnahmen getrennt zu erstellen und im Anschluss Audio- und Videodatei zusammenzuführen. Ein mögliches Vorgehen dafür wäre, zuerst das Bild aufzuzeichnen. Im Anschluss daran über eine Batchdatei eine Instanz des VLC für die Wiedergabe der Bildaufzeichnung aufrufen und ein zweite Instanz für die Tonaufnahme. Nun kann man während der Wiedergabe des Videos den Handlungsablauf kommentieren und nach dem Ende des Videos auch die Tonaufzeichnung beenden.


    Das Zusammenführen von Bild und Ton übernimmt folgende Kommandozeile:


    vlc file:///D:/VLC/Temp/VideoAufnahme.mp4 :input-slave=file:///D:/VLC/Temp/AudioAufnahme.mp3 --sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=41000}:file{dst=D:/VLC/Temp/VideoAudioMix.mp4} :sout-all


    Besitzt man Videos, von denen sich auf die übliche Weise keine Sicherung erstellen lässt, kann man ähnlich wie hier beschrieben eine sehr brauchbare Sicherung erstellen. Zweckmäßigerweise extrahiert man dafür erst einmal das Tonsignal. Dafür eignet sich zum Beispiel diese Kommandozeile:


    vlc bluray:///G:/ :disc-caching=300 --sout=#transcode{vcodec=none,acodec=s16l,ab=128,channels=2,samplerate=48000}:file{dst=D:\\VLC\\Temp\\DVD-AudioAufnahme.wav}


    Anschließend nimmt man das Video vom Monitor auf und führt schließlich die beiden Teile zusammen. Damit die Desktop-Aufnahme genau mit dem Videostart beginnt, kann man über eine Batchdatei zwei Instanzen des VLC starten. Die eine für die Wiedergabe des Videos, die andere für die Aufzeichnung vom Desktop.


    Damit der Start der Wiedergabe und der der Aufzeichnung zeitlich zusammenfällt, kann man zum Beispiel in eine Batchdatei beide Kommandozeilen zur Abarbeitung eintragen. Das könnte dann so aussehen:


    Code
    1. @echo off
    2. rem Start für das Videoobjekt:
    3. START vlc --no-video-deco --zoom=0.5 --video-x=0 --video-y=0 bluray:///G:/
    4. rem Start der Desktop-Aufzeichnung:
    5. START vlc screen:// :screen-fps=25 :screen-left=0 :screen-top=0 :screen-width=960 :screen-height=540 :sout=#transcode{vcodec=h264,vb=7000}:file{dst=D:/VLC/Temp/DesktopAufnahme.mp4}


    In meinem Beispiel hatte das Quell-Video eine Auflösung von 1920x1080. Bei einem Zoomfaktor von 0.5 ergibt sich eine Größe von 960x540. Die Wiedergabe erfolgt ohne Rahmen in der linken oberen Ecke. Für die Desktop-Aufzeichnung habe ich einen deckungsgleichen Bereich festgelegt.


    Man kann natürlich den Zoomfaktor auf 1.0 setzen. Das hat bei mir während der Aufzeichnung recht gut ausgesehen. Die Prozessorauslastung lag zwischen 30 und 40%. Das Ergebnis war aber nicht überzeugend. Da half auch kein Experimentieren mit der Bitrate.


    Wesentlich einfacher geht dies mit dem freien Programm Open Broadcaster Software.



    TV-Sendung aufzeichnen


    Mit diesem Kommandozeilenstring wird ein DVB-T-Sendung mit einer vorgegebenen Aufnahmezeit gespeichert:


    vlc --run-time=3605 dvb-t://frequency=666000000 :program=32 --sout=#file{dst="D:/VLC/Test/Das Erste.ts"} vlc://quit


    Mit run-time wird die Aufnahmezeit in Sekunden (Differenz von +/- 5 Sekunden möglich) und mit vlc://quit ein zweites Objekt übergeben. Dieses wird in die Wiedergabeliste mit aufgenommen und nach Ablauf der Wiedergabezeit für das erste Objekt "wiedergegeben" und bewirkt dabei die Beendigung des VLC.


    Dieser Kommandozeilenstring eignet sich auch sehr gut für die Aufnahme über einen Scheduler, wie zum Beispiel dem aborange Scheduler.



    Rundfunk aufzeichnen


    Wie vorstehend beschrieben, jedoch für einen Rundfunksender, könnte der Kommandozeilenstring so aussehen:


    vlc --run-time=3600 http://br-mp3-bayern1obb-m.akacast.akamaistream.net/7/273/142690/v1/gnl.akacast.akamaistream.net/br_mp3_bayern1obb_m --sout=#file{dst=D:/VLC/Aufnahmen/BR1.mp3} :sout-keep vlc://quit



    Stream aus dem Netz aufzeichnen


    Das Netz ist schier (auch) eine unerschöpfliche Quelle für Audios und Videos. Dieses Angebot über den Browser zu nutzen, also anzuhören oder anzusehen, ist kein Problem. Anders sieht es aus, wenn man sich, aus welchen Gründen auch immer, das "Objekt der Begierde" auf den eigenen Rechner downloaden will. Die erste und meist größte Hürde ist, den richtigen MRL zu bekommen, als die Internetadresse, über die man direkt auf das gewünschte Objekt zugreifen kann. Das dafür erforderliche Vorgehen soll und kann hier nicht beschrieben werden. Hier geht es nur um den Download selbst.


    Grundsätzlich braucht man für einen solchen Download keine Kommandozeile, das geht über das VLC-Programmfenster relaiv einfach. Trotzdem soll hier an zwei Beispielen gezeigt werden, wie solch eine Kommandozeile aussehen könnte.



    a) Download mit Transkodierung


    Gleich vorweg, die hier verwendete MRL kann vom Anbieter jederzeit geändert und damit für diese beiden Beispiele unbrauchbar werden. Ausßerdem ist diese MRL verschlüsselt und muss vom VLC erst entschlüsselt werden. Auch dies muss nicht immer funktionieren.


    Außerdem sollte man wissen, dass durch eine Transkodierung, also einer Umkodierung, sich niemals die Qualität verbessern kann, bestenfalls vielleicht erhalten. Trotzdem kann es Gründe geben, für einen Download den Weg über die Transkodierung zu bevorzugen. Hier ein Beispiel für einen Kommandozeilenstring mit Transkodierung, wobei die Qualitätseinbuße möglichst gering gehalten werden soll:


    vlc https://youtu.be/0qHloLgGlio --sout=#transcode{vcodec=h264,vb=2400,scale=1,acodec=mpga,ab=128,channels=2,samplerate=44100}:file{dst=D:/VLC/Test/A5.mp4} :sout-keep


    Wesentliches Kriterium für die Bildqualität ist die Bitrate, also die Anzahl der Bits, die für die Information der Videobilder einer Sekunde verwendet werden dürfen. Standardmäßig verwendet der VLC dafür weit weniger, 800 Bits pro Sekunde. Das Quellvideo hat eine Bitrate von über 2300 B/s. Deshalb wurde hier für vb die Bitrate auf 2400 gesetzt.



    b) Download ohne Transkodierung


    Lädt man ein Objekt so herunter, wie es ist, kann man keinen Qualitätsverlust haben. Mit folgendem Beispiel einer Kommandozeile wird ein Video zwar nicht unverändert heruntergeladen, denn für den Download wird der TS-Container (Transportstream) verwendet, aber der Inhalt, also Audio- und Video-Stream bleiben unangetastet. Hier das Beispiel:


    vlc https://youtu.be/0qHloLgGlio :network-caching=1000 --sout=#file{dst=D:/VLC/Test/A5.ts} :sout-keep


    Welche Verkapselung (Container) verwendet werden soll, wird dem VLC über die Namenserweiterung mitgeteilt.



    c) Download mit gleichzeitiger Wiedergabe - Verwendung einer nicht installierten Version


    D:\Tools\VLC\vlc-2.0.8\vlc.exe --config="C:/Users/Rudi/AppData/Roaming/vlc/vlcrc208" https://youtu.be/0qHloLgGlio --sout="#duplicate{dst=std{access-file,mux=mp4,dst='D:/VLC/Test/Test.mp4'},dst=display}"


    Diese Kommandozeile zeigt nicht nur den Download ohne Transkodierung und die gleichzeitige Wiedergabe über die Option duplicate, sie zeigt auch, wie man auf eine nicht installierte Version des VLC über die Kommandozeile so zugreifen kann, dass die aufgerufene Instanz des VLC auf ihre eigene Konfigurationsdatei zugreift.


    Es gibt unterschiedliche Gründe, warum man nicht immer auf die aktuell installierte Version des VLC zugreifen kann oder will. Es gibt zum Beispiel Videoformate, die seit der Version 2.0.6 nicht mehr unterstützt werden. Will man solche Formate wiedergeben, dann kann man sich eine ältere Version als ZIP-Datei besorgen und in einen beliebigen Ordner entpacken (hier im Beispiel die Version 2.0.8. Da die Konfigurationsdateien der einzelnen Versionen nicht zu 100% kompatibel sind, sollte man für jede Version eine eigene Konfigurationsdatei verwenden. Das ist bei mir die Datei vlcrc208, die bei diesem Aufruf auch verwendet wird.



    In das Heimnetz streamen


    Es geht hier nur um das Streamen in das heimische Netzwerk. Dabei ist selbstverständlich die Leistungsfähigkeit des Netzwerkes, aber auch die der Geräte zu berücksichtigen, die den Stream als Clients empfangen und wiedergeben sollen.


    a) Streamen einer Videodatei


    In diesem Beispiel soll das gestreamte Video von allen zum Netz gehörenden Geräten empfangbar sein. Es soll außerdem im Loop-Modus permanent wiederholend gestreamt werden.


    vlc --loop file:///D:/VLC/Test/Testvideo.mp4 --sout=#transcode{vcodec=h264,vb=1200,scale=0.5,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{dst=224.1.1.1,port=5004,mux=ts,sap,name=Test} :sout-keep


    Bei der verwendeten IP-Adresse handelt es sich um eine sogenannte Multicast-Adresse, über die alle Geräte im Netz Zugriff auf den Stream haben. Um Empfangsprobleme zu vermeiden, wird das Video auf halbe Größe skaliert (scale=0.5). Außerdem wurde die SAP-Erkennung integriert. Damit können Clients auf sehr einfache Weise auf den Stream zugreifen (Lokales Netzwerk - Netzwerkstreams (SAP)).


    Ist der Stream nur für ein bestimmtes Empfangsgerät bestimmt, ist an Stelle der Muldicast-Adresse die IP-Adresse des Empfangsgerätes einzutragen.



    b) Streamen eines TV-Senders


    Selbstverständlich können auch TV-Sender und alle anderen Mediaquellen sowohl per Multicast- als auch per Unicast-Adresse gesendet werden. In diesem Beispiel kommt wieder die praktische Multicast-Adresse zum Einsatz:


    vlc dvb-t://frequency=666000000:bandwidth=0 :dvb-adapter=0 :live-caching=300 :program=32 --sout=#transcode{vcodec=h264,vb=1600,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{dst=224.1.1.1,port=5004,mux=ts,sap,name="Das Erste"} :no-sout-all :sout-keep


    Damit nicht alle Sender eines Transponders übertragen werden, muss dies durch den Parameter "no-sout-all" ausdrücklich ausgeschlossen werden.



    c) Streamen eines Internet-Radioprogramms


    Für dieses Beispiel wird der Stream eines Internet-Radio-Senders im Raw-Modus, also ohne Transcodierung ins Heimnetz gestreamt:


    vlc http://streams.br.de/bayern3_2.m3u --sout=#rtp{dst=224.1.1.1,port=5004,mux=ts,sap,name="Bayern 3"} :sout-keep




    .


  • .


    Wie "bastle" ich mir eine Kommandozeile?


    Teil 6


    Weitere Beispiele in Verbindung mit Scriptdatei


    Die in diesem Teil vorgestellten Script-Dateien können nur hinsichtlich der Kommandozeile erläutert werden. Wer sich für die Funktionsweise der Batch-Kommandos interessiert, muss sich anderweitig informieren.



    a) Konvertierung aller MP4-Dateien in einem Verzeichnis zu MKV-Dateien



    Diese Script-Datei muss im selben Verzeichnis liegen wie die zu konvertierenden MP4-Dateien.


    Der Parameter " -I dummy" bewirkt, dass für den VLC kein Interface-Fenster ausgegeben wird. Durch Entfernen bzw. Austauschen der REM-Kommentierung kann zwischen einer Transkodierung und einer unveränderter Übernahme der Videodaten eingestellt werden. Außerdem könnte eine MP4-Datei nach ihrer Konvertierung gelöscht werden.



    b) CD Ripper



    Anzupassen sind die Eintragungen zum

    • Quelllaufwerk (Zeile 24, bei mir G:\) und
    • Zielpfad (Zeile 20, bei mir D:\VLC\Musik\Neu\).

    Außerdem muss die nicht gewünschte Form der Konvertierung, WAV oder MP3, durch ein "REM " am Zeilenanfang auskommentiert werden.


    Die Konvertierung für MP3 erfolgt in den Zeilen 53 und 54, die für WAV in den Zeilen 58 und 59.


    Hier im Beispiel wird nach MP3 konvertiert. Deshalb steht in den Zeilen 58 und 59 zum Auskommentieren der WAV-Konvertierung am Anfang der Zeilen 58 und 59 ein "REM ".


    Zugegeben, der VLC ist kein Spezialist für das Rippen einer Audio-CD, aber mit dieser Batchdatei kann man ihn doch dazu überreden, dies leidlich gut zu erledigen. Legt man sich für diese Batchdatei eine Verknüpfung auf den Desktop an, dann kann man das Rippen einer Audio-CD mit einem Doppelklick ausführen, vorausgesetzt man hat einen festen Zielordner eingetragen, der vor jedem neuen Rippen leer gemacht wird.




    Hilfe wird benötigt


    Sicher wird es mit den Kommandozeilen nicht immer so funktionieren, wie man sich das vorstellt und Ursachensuche ist angesagt. Dafür gibt es verschiedene Möglichkeiten.



    a) Hilfe über die Konsole


    Startet man eine Kommandozeile über eine Batchdatei und die sieht man nur kurz aufblitzen, ohne dass etwas geschieht, sollte man in der Zeile nach der Kommandozeile den Befehl PAUSE eintragen. Die Schreibweise (groß, klein oder gemischt) spielt wie bei allen Befehlen für die Konsole keine Rolle.


    Dieser Befehl bewirkt, dass die Abarbeitung der Scriptdatei angehalten wird. Jetzt kann man auch sehen, welche Meldung der Kommandozeileninterpreter ausgegeben hat. In vielen Fällen wird diese lauten:


    Das System kann den angegebenen Pfad nicht finden.
    Drücken Sie eine beliebige Taste . . .


    Nun weiß man, dass mit dem angegebenen Aufrufpfad etwas nicht stimmt.



    b) Fehlermeldung des VLC


    Kommt vom VLC die Meldung:


    VLV media player could not start.
    Eiter the command line options were invalid or no plugins were found.


    Dies ist die Standardfehlermeldung des VLC, wenn er mit den übergebenen Parametern nichts anzufangen weiß. Also muss man Parameter für Parameter prüfen, eventuell testhalber einen Parameter entfernen.



    c) Die Konsole ist einfach nur schwarz

    Hier liegt mit großer Wahrscheinlichkeit ein Fehler bei den übergebenen Parameter vor und einer dieser Parameter ist --qt-start-minimized. Dieser verhindert, dass das Interfacefenster der VLC angezeigt wird. Entfernt man ihn, wird beim nächsten Versuch das Interface-Fenster des VLC angezeigt und man kann über den Meldungen-Dialog weiter forschen.



    d) Hilfe über den Meldungen-Dialog


    Wird das Fenster des VLC gezeigt und das Objekt für den übergebenen MRL ist in der Wiedergabeliste eingetragen, ohne dass etwas geschieht, dann ist vermutlich einer der mit den Parametern übergebenen Werte nicht korrekt. Man sollte nun wie folgt vorgehen:

    • Über Menü - Werkzeuge -Meldungen den Meldunge-Dialog öffnen.
    • Im Register Meldungen links unten die Option Ausführlichkeit auf 2 (debuggen) setzen.
    • Den Meldungen Dialog offen lassen, zur Wiedergabeliste wechseln und auf den Eintrag in der Wiedergabeliste einen Doppelklick machen. Damit wird erneut der Versuch gemacht, den Auftrag aus der Kommandozeile auszuführen.

    Wenn jetzt eine Meldung kommt, zum Beispiel, dass die Ausgabedatei bereits existiere, dann hat man seinen Fehler gefunden. Kommt jedoch keine Meldung, dann muss man sich das mittlerweile im Meldungen-Dialog angezeigte Ablaufprotokoll mit Schwerpunkt auf die "errors" näher ansehen.



    Unterhalb des Protokolls in der Eingabezeile für Filter kann man solche auch setzen. Damit werden nur Zeilen angezeigt, in denen der Suchtext vorkommt. Nicht vergessen, den Filter vor dem Schließen zu entfernen, damit man bei einer späteren Prüfung überrascht feststellen muss, dass nichts angezeigt wird. Grund, ein früher einmal gesetzter Filter.


    Das Protokoll kann man auch in einer Datei speichern und zum Beispiel hier im Forum als Anhang zu einer Anfrage hinzufügen.



    e) Generelles Logging


    Als letzte Möglichkeit bleibt, den Programmablauf des VLC von allen Anfang an zu verfolgen. Hierfür kann ein Kommandozeile um folgende Parameter erweitert werden:


    --extraintf=logger --verbose=2 --logmode=text --file-logging --logfile=D:\VLC\Test\vlc.log


    Diese Parameter können dem VLC auch ohne sonstigen Auftrag beim Start übergeben werden. Die Kommandozeile dafür sähe dann so aus:


    vlc --extraintf=logger --verbose=2 --logmode=text --file-logging --logfile=D:\VLC\Test\vlc.log


    Damit würde der VLC geöffnet und alles was nach dem Start des VLC geschieht, wird nun protokolliert. Man könnte bei diesem Aufruf aber auch einen kompletten Auftrag mit übergeben. Das könnte dann so aussehen:


    vlc --extraintf=logger --verbose=2 --logmode=text --file-logging --logfile=D:\VLC\Test\vlc.log dvb-t://frequency=666000000 :program=32 :bandwidth=8 :dvb-adapter=0 :live-caching=1000 --sout=#transcode{vcodec=h264,vb=2930,acodec=mp4a,ab=192,channels=2,samplerate=48000}:std{access=file,mux=mkv,dst="D:/VLC/Test/Das_Erste.mkv"}


    Wenn man sich seinen Rechner nicht zumüllen will, dann sollte man solche Sitzungen möglichst kurz halten, denn schon nach wenigen Minuten kann man eine Log-Datei mit einer Million und mehr Zeilen haben.




    Interessante Links


    Informationen zum Aufruf des VLC über die Kommandozeile im VideoLAN-Wiki (Englisch) mit Beschreibung möglicher Parameter


    Informationen zum Parameterteil der Kommandozeile im VideoLAN-Wiki (Englisch)


    Dokumentation zum Streaming über die Kommandozeile im VideoLAN-Wiki (Englisch) mit vielen Beispielen


    Dokumentation zu erweiterten Streaming-Möglichkeiten über die Kommandozeile im VideoLAN-Wiki (Englisch)