Ok, ponieważ nie mogę znaleźć dużo informacji na temat melt
korzystania z wiersza poleceń, oto kilka uwag .. (a następnie zobacz tę odpowiedź Używanie podstawiania procesów w celu oszukania programów oczekujących plików, z określonymi rozszerzeniami jako argumentem? - Wymiana stosu Unix i Linux dla skryptu przykład przez bash
)
Na początek - jest pakiet Ubuntu / Debian dla melt
(Mam Ubuntu 11.04 z MLT melt 0.6.2); link podany przez @Ielton jest dla Wiki „Media Lovin 'Toolkit” (MLT), który melt
jest częścią (ale także openshot
i kdenlive
). Oto link do plików tekstowych dokumentacji z ich git: mltframework.org/mlt.git/tree - docs / ; zwróć uwagę, że wiki ma stronę o BuildScripts .
Na razie największym (jedynym) problemem, jaki mam z tym, jest to, że nie mogę znaleźć sposobu na eksport nieskompresowanej kompozycji wideo (jako png
ramki lub jakiś nieskompresowany format wideo).
Po pierwsze, w wierszu poleceń melt
możesz sterować odtwarzaniem poprzez klatki; na przykład, aby „utworzyć” 15-ramkowy biały blank i wyświetlić go za pomocą wbudowanego melt
odtwarzacza, użyj
melt -blank 15
Podczas przeglądania za pomocą melt
pojawi się także informacja wiersza poleceń stderr
dla wbudowanego odtwarzacza:
$ 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
Po zakończeniu melt
odtwarzania nie zakończy się - powinieneś więc wpisać, q
aby wyjść.
Należy zauważyć, że są tak zwani „producenci” i „konsumenci” melt
. Jeśli nic nie zostanie określone, wówczas domyślnym „konsumentem” jest okno SDL (Simple DirectMedia Layer) odtwarzające wideo; więc powyższe polecenie jest takie samo jak:
melt -blank 15 -consumer sdl
Dlatego jeśli chcemy zapisać melt
wyświetlane dane, powinniśmy zmienić konsumenta na coś, co będzie obsługiwać format pliku. Aby uzyskać listę konsumentów:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
libdv
Wyjście DV wola konsumentów sformatowane dane bezpośrednio stdout
, tak aby zapisać plik wideo do .dv
pliku chcesz zrobić:
melt -blank 15 -consumer libdv > test.dv
Zauważ, że spośród wymienionych klientów jedynym formatem, który wypróbowałem, który można również otworzyć w innej aplikacji jest libdv
(użyłem vlc
jako innej aplikacji); może to jednak nie powieść się w przypadku innego rodzaju transkodowania ( np. jeśli zamiast pustego miejsca spróbuję przekonwertować fragment .flv
kodu z pliku, powstały plik .dv otworzy się i odtworzy vlc
, ale jest uszkodzony ).
Teraz część do edycji ; w zasadzie można podać serię sekcji nazwa-pliku / wejście / wyjście bezpośrednio w wierszu poleceń; powiedzmy, że masz plik, video.avi
- wtedy możesz zrobić:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
lub nieco lepiej sformatowany:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Oznacza to, że video.avi
z ramki 30 do ramki 79 będzie odtwarzany; następnie 15-ramka pusta; a następnie ponownie video.avi
sekwencja od ramki 30 do ramki 79.
Aby wykorzystać obrazy (powiedzmy .png
) w kompozycji do edycji wideo:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Należy pamiętać, że dla test.png
, in=
parametr nie musi być 0 - jednak obraz zostanie wyświetlony na out
- in
czas; w takim przypadku najłatwiej byłoby po prostu in=0
całkowicie pominąć parametr.
Dobrą rzeczą jest to, że sekwencję edycji można zapisać - lub jak melt
to się nazywa, serializować - do pliku; Uwaga: istnieją dwa sposoby serializacji: „prosty” lub XML. Na przykład, aby zapisać powyższe polecenie jako „prosty” plik serializowany, możemy po prostu dodać -serialise [filename]
przełącznik do polecenia:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Teraz file.melt
zawiera:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Pozornie ten „prosty” serializowany format pliku nie zawiera znaku „komentującego” - jeśli spróbuję dodać # comment
wiersz „ ”, melt
narzeka: „ Nie udało się załadować„ # komentarza ” ” (ale poza tym wydaje się, że takie wiersz jest ignorowany, a odtwarzanie i tak jest kontynuowane). .melt
Wydaje się, że „ ” jest rozszerzeniem, które melt
rozpoznaje zwykły plik serializowany.
Teraz, aby odtworzyć ten zserializowany plik, możemy w zasadzie po prostu wywołać melt file.melt
- jednak bardziej kompletna linia poleceń to:
melt melt_file:file.melt -consumer sdl
... co oznaczałoby: użyj melt_file
„producenta”, aby otworzyć file.melt
i renderować jego ramki w „konsumentu” sdl
(oknie).
Zauważ, że mam doświadczenie, że (powiedzmy) .flv
filmy odtwarzane są bez problemu w wierszu poleceń - powodują jednak błąd segmentacji, gdy są określone w file.melt
pliku zserializowanym! .dv
wyprodukowane przez melt
siebie filmy wydają się działać dobrze w file.melt
...
Serializację typu XML można osiągnąć za pomocą -consumer xml:
przełącznika ( zamiast-serialise
) - więc powyższy przykład byłby teraz:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Aby „odtworzyć” nowo wygenerowany file.mlt
plik XML, można teraz zrobić bezpośrednio melt file.mlt
- lub bardziej kompletnym wierszem poleceń byłoby:
melt xml:file.mlt -consumer sdl
... co oznaczałoby: użyj xml
„producenta” ( uwaga, wcześniej był konsumentem ), aby otworzyć file.mlt
i renderować swoje ramki na „konsumentu” sdl
(okno).
Zauważ, że w tym przypadku zauważyłem, że te same .flv
filmy, które spowodowały segfault z prostym plikiem serializacji - działają dobrze z plikiem serializacji XML!
W takim przypadku wynikowy file.mlt
plik XML ma o wiele więcej ustawień, takich jak rozdzielczość, liczba klatek na sekundę, informacje o kodekach itp. - ale trudniej jest pracować bezpośrednio w edytorze tekstu:
<?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>