Ok, da ich nicht viel über 05
finden kann Befehlszeilenverwendung, hier sind einige Anmerkungen. Code> )
Zunächst einmal gibt es ein Ubuntu/Debian-Paket für 23
(Ich habe Ubuntu 11.04 mit MLT Melt 0.6.2); der von @Ielton angegebene Link ist für das "Media Lovin' Toolkit" (MLT) Wiki, das 38
ist ist ein Teil von (aber auch 46
und 54
). 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.
Im Moment ist das größte (einzige) Problem, das ich damit habe, dass ich keine Möglichkeit finde, eine unkomprimierte Videokomposition zu exportieren (entweder als 63
Frames oder ein unkomprimiertes Videoformat).
Zuerst in der Befehlszeile 76
Sie können die Wiedergabe über Frames steuern; zum Beispiel, um ein 15 Frames langes weißes Leerzeichen zu "erstellen" und es mit dem eingebauten 86
anzuzeigen Spieler, verwenden Sie
melt -blank 15
Wenn Sie mit 90
anzeigen , erhalten Sie auch eine Befehlszeileninfo zu 104
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
Einmal 119
Wenn die Wiedergabe beendet ist, wird es nicht beendet - Sie sollten also 120
eingeben um es zu verlassen.
Wir sollten beachten, dass es in 139
sogenannte „Produzenten“ und „Konsumenten“ gibt . Wenn nichts angegeben ist, ist der standardmäßige „Verbraucher“ ein SDL-Fenster (Simple DirectMedia Layer), das das Video abspielt; der obige Befehl ist also derselbe wie:
melt -blank 15 -consumer sdl
Also, wenn wir was speichern wollen 142
anzeigt, sollten wir den Verbraucher auf etwas ändern, das ein Dateiformat unterstützt. So erhalten Sie eine Verbraucherliste:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
Die 152
Consumer gibt DV-formatierte Daten direkt an 165
aus , um das Video also unter 179
zu speichern Datei, die Sie tun würden:
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, 180
ist (Ich habe 191
verwendet als weitere Anwendung); Dies kann jedoch bei einer anderen Art der Transcodierung fehlschlagen (z. B. wenn ich anstelle eines Leerzeichens versuche, einen Ausschnitt aus einem 203
zu konvertieren Datei, die resultierende .dv-Datei wird geöffnet und in 212
abgespielt , ist aber beschädigt ).
Nun zur Bearbeitung Teil; Im Wesentlichen können Sie eine Reihe von Dateinamen angeben /in/out-Strophen direkt auf der Befehlszeile; Angenommen, Sie haben eine Datei, 228
- 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
Das bedeutet 231
von seinem Rahmen 30 bis zu seinem Rahmen 79 wird abgespielt; dann ein 15-Frame-Blank; und dann die 245
Sequenz wieder von Bild 30 bis Bild 79.
Um Bilder zu verwenden (z. B. 258
) 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 das für 262
, 271
Parameter muss nicht 0 sein - das Bild wird jedoch für 289
angezeigt -295
Zeit; in diesem Fall wäre es am einfachsten, die 307
einfach stehen zu lassen Parameter ganz aus.
Das Gute ist, dass diese Bearbeitungsreihenfolge gespeichert werden kann - oder als 317
nennt es serialisiert - in eine Datei; Beachten Sie, dass es zwei gibt Möglichkeiten einer solchen Serialisierung:"einfach" oder XML. Um beispielsweise den obigen Befehl als "einfache" serialisierte Datei zu speichern, können wir einfach den 327
hinzufügen Wechseln Sie zum Befehl:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Jetzt die 338
enthält:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Anscheinend enthält dieses "einfache" serialisierte Dateiformat kein "Kommentarzeichen" - wenn ich versuche, ein "345
" Zeile, 353
beschwert sich mit:'Fehler beim Laden von "# Kommentar" ' (aber abgesehen davon scheint eine solche Zeile ignoriert zu werden, und die Wiedergabe wird trotzdem fortgesetzt). "365
" scheint eine Erweiterung zu sein, die 371
erkennt als einfache serialisierte Datei.
Um diese serialisierte Datei erneut abzuspielen, könnten wir im Prinzip einfach 383
aufrufen - Eine vollständigere Befehlszeile wäre jedoch:
melt melt_file:file.melt -consumer sdl
... was bedeuten würde:Verwenden Sie den 393
"Produzent", um 406
zu öffnen , und rendert seine Frames auf dem "Verbraucher" 417
(Fenster).
Beachten Sie, dass ich die Erfahrung gemacht habe, dass (sagen wir) 427
Videos werden problemlos auf der Befehlszeile abgespielt - verursachen jedoch einen Segmentierungsfehler, wenn sie im 436
angegeben sind serialisierte Datei! 440
von 453
produzierte Videos selbst, scheinen in 462
gut zu funktionieren ...
Der XML-Typ der Serialisierung kann durch Verwendung des 479
erreicht werden wechseln (statt 485
) - das obige Beispiel wäre also jetzt:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Zum „Abspielen“ des neu generierten 496
XML-Datei kann man jetzt direkt 500
machen - oder eine vollständigere Befehlszeile wäre:
melt xml:file.mlt -consumer sdl
... was bedeuten würde:Verwenden Sie den 515
"Produzent" (beachten Sie, vorher war es ein Konsument ), um 526
zu öffnen , und rendert seine Frames auf dem "Verbraucher" 539
(Fenster).
Beachten Sie, dass ich in diesem Fall genau dasselbe 541
erlebt habe Videos, die Segfault mit einer einfachen Serialisierungsdatei verursacht haben - funktionieren gut mit einer XML-Serialisierungsdatei!
In diesem Fall das Ergebnis 555
Die XML-Datei hat viel mehr Einstellungen, wie Auflösung, Bildrate, Codec-Informationen usw. - aber es ist auch schwieriger, direkt mit 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>
Ja da ist. Versuchen Sie es mit der App „Melt“. Sehen Sie sich die Dokumentation hier an.
Wenn Sie eine von Debian abgeleitete Distribution verwenden:
apt-get install melt
Die ffmpeg-Lösung für dieses Problem sieht etwa so aus:
mkfifo temp1 temp2 temp3
ffmpeg -i input.wmv -ss 30 -to 60 -c copy output.wmv temp1 2> /dev/null & \
ffmpeg -i input2.wmv -t 60 -c copy temp2 2> /dev/null & \
ffmpeg -i input3.wmv -i image.png -filter_complex "[0:v][1:v] \
overlay=25:25:enable='between(t,0,20)'" -pix_fmt yuv420p -c:a copy temp3 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp1|temp2|temp3" -c copy output.mp4
Es verwendet benannte Pipes, sodass keine temporären Dateien auf der Festplatte erstellt werden müssen, und Sie können Teile der Videoclips zerschneiden und Bilder hinzufügen.
Dieses Beispiel verwendet die Zeit 30–60 der ersten Eingabe und fügt dann die erste Minute der zweiten Eingabe hinzu, fügt dann eine Bilddatei und dann das gesamte dritte Video ein.
Code entfernt von:
ffmpeg-Verkettungsseite:https://trac.ffmpeg.org/wiki/Concatenate
Superuser-Seite Verwenden von ffmpeg zum Schneiden von Videos
Superuser-Seite https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg