Ok, da ich nicht viel über die Verwendung der melt
Befehlszeile 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 melt
Teil von (aber auch openshot
und 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 png
Frames oder als unkomprimiertes Videoformat) zu exportieren .
Erstens können Sie in der Befehlszeile melt
die Wiedergabe über Frames steuern. melt
Verwenden 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 stderr
fü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 melt
die Wiedergabe abgeschlossen ist, wird sie nicht mehr beendet. Geben Sie q
daher 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 melt
angezeigt 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 libdv
Verbraucher gibt DV-formatierte Daten direkt an aus stdout
. So speichern Sie das Video in einer von .dv
Ihnen 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 vlc
als 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 .flv
Datei 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.avi
Dann 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.avi
von seinem Bild 30 bis zu seinem Bild 79 abgespielt wird; dann ein 15-Frame-Rohling; und dann die video.avi
Sequenz 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
- in
Zeit; In diesem Fall ist es am einfachsten, den in=0
Parameter ganz wegzulassen.
Die gute Sache ist , dass diese Bearbeitung Sequenz gespeichert werden - oder wie sie melt
nennt, 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.melt
enthä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 , melt
beschwert 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, melt
die 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) .flv
Videos problemlos über die Befehlszeile abgespielt werden - jedoch einen Segmentierungsfehler verursachen, wenn sie in der file.melt
serialisierten Datei angegeben sind! .dv
Selbst produzierte Videos melt
scheinen 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.mlt
XML-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 .flv
festgestellt 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.mlt
XML-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>