Ok, dato che non riesco a trovare molto melt
sull'utilizzo della riga di comando, ecco alcune note .. (e dopo, vedi questa risposta Usare la sostituzione di processo per ingannare i programmi che prevedono file, con estensioni specifiche come argomento? - Scambio di stack Unix e Linux per uno script esempio via bash
)
Per cominciare, esiste un pacchetto Ubuntu / Debian per melt
(ho Ubuntu 11.04 con MLT melt 0.6.2); il link fornito da @Ielton è per il Wiki "Media Lovin 'Toolkit" (MLT), che melt
fa parte di (ma anche openshot
e kdenlive
). Ecco il link ai file di testo della documentazione dal loro git: mltframework.org/mlt.git/tree - docs / ; nota che il wiki ha una pagina su BuildScripts .
Per ora, il più grande (unico) problema che ho con esso, è che non riesco a trovare un modo per esportare una composizione video non compressa (come png
frame o un formato video non compresso).
Innanzitutto, nella riga di comando melt
puoi controllare la riproduzione attraverso i frame; ad esempio, per "creare" uno spazio bianco lungo di 15 fotogrammi e visualizzarlo con il melt
lettore incorporato , utilizzare
melt -blank 15
Quando visualizzi con melt
, otterrai anche informazioni sulla riga di comando stderr
per il player integrato:
$ 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
Una volta terminata la melt
riproduzione, non si chiuderà, quindi è necessario digitare q
per uscire.
Dobbiamo notare che ci sono i cosiddetti "produttori" e "consumatori" in melt
. Se non viene specificato nulla, il "consumatore" predefinito è una finestra SDL (Simple DirectMedia Layer) che riproduce il video; quindi il comando sopra è lo stesso di:
melt -blank 15 -consumer sdl
Pertanto, se vogliamo salvare ciò che melt
viene visualizzato, dovremmo cambiare il consumatore in qualcosa che supporti un formato di file. Per ottenere un elenco di consumatori:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
Il libdv
consumatore produrrà direttamente i dati in formato DV stdout
, quindi per salvare il video in un .dv
file che faresti:
melt -blank 15 -consumer libdv > test.dv
Si noti che tra i consumatori elencati, l'unico formato che ho provato, che può anche essere aperto in un'altra applicazione è libdv
(l'ho usato vlc
come un'altra applicazione); tuttavia, ciò potrebbe non riuscire per un diverso tipo di transcodifica ( ad es. se invece di uno spazio vuoto, provo a convertire uno snippet da un .flv
file, il file .dv risultante si apre e viene riprodotto vlc
, ma è corrotto ).
Ora per la parte di modifica ; in sostanza, è possibile specificare una serie di stanze nome-file / in / out direttamente dalla riga di comando; dire che hai un file, video.avi
- allora potresti fare:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
o leggermente meglio formattato:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Ciò significa che video.avi
dal suo frame 30 al suo frame 79 verrà riprodotto; quindi uno spazio vuoto di 15 frame; e quindi di nuovo la video.avi
sequenza dal frame 30 al frame 79.
Per utilizzare le immagini (diciamo, .png
) in una composizione di modifica video:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Si noti che per test.png
, il in=
parametro non deve essere 0 - tuttavia, l'immagine verrà visualizzata per out
- in
tempo; in questo caso, sarebbe più semplice lasciare del in=0
tutto fuori il parametro.
La cosa buona è che questa sequenza di editing può essere salvata - o come la melt
chiama, serializzata - in un file; si noti che ci sono due modi per tale serializzazione: "semplice" o XML. Ad esempio, per salvare il comando sopra come un file serializzato "semplice", possiamo semplicemente aggiungere l' -serialise [filename]
opzione al comando:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Ora file.melt
contiene:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Apparentemente, questo "semplice" formato di file serializzato non contiene un carattere "commenting" - se provo ad aggiungere una " # comment
" linea, mi melt
lamento con: " Impossibile caricare" # comment " " (ma a parte questo, sembra che tale una riga viene ignorata e la riproduzione continua comunque). " .melt
" sembra essere un'estensione che melt
riconosce come semplice file serializzato.
Ora, per riprodurre nuovamente questo file serializzato, in linea di principio potremmo semplicemente chiamare melt file.melt
, tuttavia una riga di comando più completa sarebbe:
melt melt_file:file.melt -consumer sdl
... il che significherebbe: utilizzare il melt_file
"produttore" per aprire file.melt
e rendere i suoi frame sul "consumatore" sdl
(finestra).
Nota che ho l'esperienza, che (diciamo) i .flv
video vengono riprodotti senza problemi sulla riga di comando - tuttavia, causano un errore di segmentazione quando sono specificati nel file.melt
file serializzato! .dv
i video prodotti da melt
soli sembrano funzionare bene in file.melt
...
Il tipo XML di serializzazione può essere ottenuto utilizzando l' -consumer xml:
opzione ( anziché-serialise
) - quindi l'esempio sopra sarebbe ora:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Per "riprodurre" il file.mlt
file XML appena generato , ora si può fare direttamente melt file.mlt
- oppure una riga di comando più completa sarebbe:
melt xml:file.mlt -consumer sdl
... il che significherebbe: usare il xml
"produttore" ( nota, in precedenza era un consumatore ) per aprire file.mlt
e rendere i suoi frame sul "consumatore" sdl
(finestra).
Si noti che in questo caso, ho sperimentato che gli stessi .flv
video che hanno causato la segfault con un semplice file di serializzazione - funzionano perfettamente con un file di serializzazione XML!
In questo caso, il file.mlt
file XML risultante ha molte più impostazioni, come risoluzione, frequenza dei fotogrammi, informazioni sul codec ecc., Ma è anche più difficile lavorare direttamente in un editor di testo:
<?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>