Ok, da ich nicht viel über die Verwendung der meltBefehlszeile herausfinden kann , hier ein paar Hinweise. (Und danach diese Antwort. Verwenden der Prozessersetzung, um Programme auszutricksen, die Dateien mit bestimmten Erweiterungen als Argument erwarten? - Unix & Linux Stack Exchange für ein Skript Beispiel via bash)
Zu Beginn - gibt es ein Ubuntu / Debian-Paket für melt(ich habe Ubuntu 11.04 mit MLT Melt 0.6.2); Der von @Ielton angegebene Link bezieht sich auf das "Media Lovin 'Toolkit" (MLT) Wiki, das meltTeil von (aber auch openshotund kdenlive) ist. Hier ist der Link zu den Dokumentationstextdateien von ihrem Git: mltframework.org/mlt.git/tree - docs / ; Beachten Sie, dass das Wiki eine Seite über BuildScripts enthält .
Das größte (einzige) Problem, das ich derzeit habe, ist, dass ich keine Möglichkeit finde, eine unkomprimierte Videokomposition (entweder als pngFrames oder als unkomprimiertes Videoformat) zu exportieren .
Erstens können Sie in der Befehlszeile meltdie Wiedergabe über Frames steuern. meltVerwenden Sie beispielsweise, um ein weißes Leerzeichen mit einer Länge von 15 Frames zu erstellen und mit dem integrierten Player anzuzeigen
melt -blank 15
Wenn Sie mit anzeigen melt, erhalten Sie auch eine Befehlszeileninformation stderrfür den eingebauten Player:
$ melt -blank 15
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
|1=-10| |2= -5| |3= -2| |4= -1| |5= 0| |6= 1| |7= 2| |8= 5| |9= 10|
+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+
+---------------------------------------------------------------------+
| H = back 1 minute, L = forward 1 minute |
| h = previous frame, l = next frame |
| g = start of clip, j = next clip, k = previous clip |
| 0 = restart, q = quit, space = play |
+---------------------------------------------------------------------+
Current Position: 15
Sobald meltdie Wiedergabe abgeschlossen ist, wird sie nicht mehr beendet. Geben Sie qdaher Folgendes ein, um sie zu beenden.
Wir sollten beachten, dass es sogenannte "Produzenten" und "Konsumenten" gibt melt. Wenn nichts angegeben ist, ist der Standard-Consumer ein SDL- Fenster (Simple DirectMedia Layer) , in dem das Video wiedergegeben wird. Der obige Befehl ist also der gleiche wie:
melt -blank 15 -consumer sdl
Wenn wir also speichern möchten, was meltangezeigt wird, sollten wir den Consumer auf etwas ändern, das ein Dateiformat unterstützt. So erhalten Sie eine Liste der Verbraucher:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
Der libdvVerbraucher gibt DV-formatierte Daten direkt an aus stdout. So speichern Sie das Video in einer von .dvIhnen erstellten Datei:
melt -blank 15 -consumer libdv > test.dv
Beachten Sie, dass von den aufgelisteten Verbrauchern das einzige Format, das ich ausprobiert habe und das auch in einer anderen Anwendung geöffnet werden kann, ist libdv(ich habe es vlcals andere Anwendung verwendet). Dies kann jedoch bei einer anderen Art der Transcodierung fehlschlagen ( z. B. wenn ich anstelle eines Leerzeichens versuche, ein Snippet aus einer .flvDatei zu konvertieren , wird die resultierende .dv-Datei geöffnet und abgespielt vlc, ist jedoch beschädigt ).
Nun zum Bearbeitungsteil ; Im Wesentlichen können Sie eine Reihe von Dateinamen- / Ein- / Ausgabe-Zeilengruppen direkt in der Befehlszeile angeben . Angenommen, Sie haben eine Datei. video.aviDann könnten Sie Folgendes tun:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
oder etwas besser formatiert:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Dies bedeutet, dass video.avivon seinem Bild 30 bis zu seinem Bild 79 abgespielt wird; dann ein 15-Frame-Rohling; und dann die video.aviSequenz von Bild 30 zu Bild 79 erneut.
So verwenden Sie Bilder (z. B. .png) in einer Videobearbeitungskomposition:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Beachten Sie, dass für test.png, in=Parameter nicht 0 sein muss - jedoch wird das Bild für angezeigt out- inZeit; In diesem Fall ist es am einfachsten, den in=0Parameter ganz wegzulassen.
Die gute Sache ist , dass diese Bearbeitung Sequenz gespeichert werden - oder wie sie meltnennt, serialisiert - in eine Datei; Beachten Sie, dass es zwei Möglichkeiten für eine solche Serialisierung gibt: "simple" oder XML. Um zum Beispiel den obigen Befehl als "einfache" serialisierte Datei zu speichern, können wir einfach den -serialise [filename]Schalter zum Befehl hinzufügen :
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Nun file.meltenthält das:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Scheinbar enthält dieses "einfache" serialisierte Dateiformat kein "kommentierendes" Zeichen. Wenn ich versuche, eine " # comment" Zeile hinzuzufügen , meltbeschwert ich mich mit: "# comment" konnte nicht geladen werden (aber ansonsten scheint das so Eine Zeile wird ignoriert und die Wiedergabe wird trotzdem fortgesetzt. " .melt" scheint eine Erweiterung zu sein, meltdie eine einfache serialisierte Datei erkennt.
Um diese serialisierte Datei erneut abzuspielen, können wir im Prinzip nur aufrufen melt file.melt- eine vollständigere Befehlszeile wäre jedoch:
melt melt_file:file.melt -consumer sdl
... was bedeuten würde: Verwenden Sie den melt_file"Producer" file.melt, um seine Frames auf dem "Consumer" sdl(Fenster) zu öffnen und zu rendern .
Beachten Sie, dass ich die Erfahrung habe, dass (sagen wir) .flvVideos problemlos über die Befehlszeile abgespielt werden - jedoch einen Segmentierungsfehler verursachen, wenn sie in der file.meltserialisierten Datei angegeben sind! .dvSelbst produzierte Videos meltscheinen in file.melt...
Der XML-Serialisierungstyp kann mithilfe des -consumer xml:Schalters ( anstelle von-serialise ) erreicht werden. Das obige Beispiel lautet nun:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Um die neu erzeugte file.mltXML-Datei "abzuspielen" , kann man sie jetzt direkt ausführen melt file.mlt- oder eine vollständigere Befehlszeile wäre:
melt xml:file.mlt -consumer sdl
... was bedeuten würde: Verwenden Sie den xml"Producer" ( Hinweis, zuvor war es ein Consumer ) file.mlt, um seine Frames im "Consumer" sdl(Fenster) zu öffnen und zu rendern .
Beachten Sie, dass ich in diesem Fall .flvfestgestellt habe, dass die gleichen Videos, die bei einer einfachen Serialisierungsdatei zu Segfault geführt haben, auch bei einer XML-Serialisierungsdatei einwandfrei funktionieren.
In diesem Fall enthält die resultierende file.mltXML-Datei viel mehr Einstellungen wie Auflösung, Bildrate, Codec-Informationen usw. - es ist jedoch auch schwieriger, direkt in einem Texteditor zu arbeiten:
<?xml version="1.0" encoding="utf-8"?>
<mlt root="/path/to" title="video.avi">
<profile description="automatic" width="320" height="240" progressive="1" sample_aspect_num="1" sample_aspect_den="1" display_aspect_num="320" display_aspect_den="240" frame_rate_num="25" frame_rate_den="1" colorspace="601"/>
<producer id="producer0" in="30" out="79">
<property name="mlt_type">producer</property>
<property name="aspect_ratio">1.000000</property>
<property name="length">125</property>
<property name="eof">pause</property>
<property name="resource">video.avi</property>
<property name="meta.media.nb_streams">2</property>
<property name="meta.media.0.stream.type">video</property>
<property name="meta.media.0.stream.frame_rate">25.000000</property>
<property name="meta.media.0.stream.sample_aspect_ratio">0.000000</property>
<property name="meta.media.0.codec.frame_rate">25.000000</property>
<property name="meta.media.0.codec.pix_fmt">yuv420p</property>
<property name="meta.media.0.codec.sample_aspect_ratio">1.000000</property>
<property name="meta.media.0.codec.colorspace">601</property>
<property name="meta.media.0.codec.name">mpeg4</property>
<property name="meta.media.0.codec.long_name">MPEG-4 part 2</property>
<property name="meta.media.0.codec.bit_rate">0</property>
<property name="meta.media.1.stream.type">audio</property>
<property name="meta.media.1.codec.sample_fmt">s16</property>
<property name="meta.media.1.codec.sample_rate">22050</property>
<property name="meta.media.1.codec.channels">1</property>
<property name="meta.media.1.codec.name">mp2</property>
<property name="meta.media.1.codec.long_name">MP2 (MPEG audio layer 2)</property>
<property name="meta.media.1.codec.bit_rate">64000</property>
<property name="seekable">1</property>
<property name="meta.media.sample_aspect_num">1</property>
<property name="meta.media.sample_aspect_den">1</property>
<property name="meta.attr.title.markup"></property>
<property name="meta.attr.author.markup"></property>
<property name="meta.attr.copyright.markup"></property>
<property name="meta.attr.comment.markup"></property>
<property name="meta.attr.album.markup"></property>
<property name="audio_index">1</property>
<property name="video_index">0</property>
<property name="mlt_service">avformat</property>
</producer>
<producer id="producer1" in="30" out="79">
<property name="mlt_type">producer</property>
<property name="aspect_ratio">1.000000</property>
<property name="length">125</property>
<property name="eof">pause</property>
<property name="resource">video.avi</property>
<property name="meta.media.nb_streams">2</property>
<property name="meta.media.0.stream.type">video</property>
<property name="meta.media.0.stream.frame_rate">25.000000</property>
<property name="meta.media.0.stream.sample_aspect_ratio">0.000000</property>
<property name="meta.media.0.codec.frame_rate">25.000000</property>
<property name="meta.media.0.codec.pix_fmt">yuv420p</property>
<property name="meta.media.0.codec.sample_aspect_ratio">1.000000</property>
<property name="meta.media.0.codec.colorspace">601</property>
<property name="meta.media.0.codec.name">mpeg4</property>
<property name="meta.media.0.codec.long_name">MPEG-4 part 2</property>
<property name="meta.media.0.codec.bit_rate">0</property>
<property name="meta.media.1.stream.type">audio</property>
<property name="meta.media.1.codec.sample_fmt">s16</property>
<property name="meta.media.1.codec.sample_rate">22050</property>
<property name="meta.media.1.codec.channels">1</property>
<property name="meta.media.1.codec.name">mp2</property>
<property name="meta.media.1.codec.long_name">MP2 (MPEG audio layer 2)</property>
<property name="meta.media.1.codec.bit_rate">64000</property>
<property name="seekable">1</property>
<property name="meta.media.sample_aspect_num">1</property>
<property name="meta.media.sample_aspect_den">1</property>
<property name="meta.attr.title.markup"></property>
<property name="meta.attr.author.markup"></property>
<property name="meta.attr.copyright.markup"></property>
<property name="meta.attr.comment.markup"></property>
<property name="meta.attr.album.markup"></property>
<property name="audio_index">1</property>
<property name="video_index">0</property>
<property name="mlt_service">avformat</property>
</producer>
<playlist id="playlist0">
<entry producer="producer0" in="0" out="49"/>
<blank length="16"/>
<entry producer="producer1" in="0" out="49"/>
</playlist>
<tractor id="tractor0" title="video.avi" global_feed="1" in="0" out="115">
<track producer="playlist0"/>
</tractor>
</mlt>