Ok, protože nemohu najít mnoho o 06
použití příkazového řádku, zde jsou některé poznámky.. (a poté si přečtěte tuto odpověď Používání substituce procesů k oklamání programů očekávajících soubory se specifickými příponami jako argument? - Unix &Linux Stack Exchange pro příklad skriptu přes 14 )
Pro začátek - existuje balíček Ubuntu/Debian pro 24
(mám Ubuntu 11.04 s MLT melt 0.6.2); odkaz od @Ielton je pro "Media Lovin' Toolkit" (MLT) Wiki, který 39
je součástí (ale také 47
a 57
). Zde je odkaz na textové soubory dokumentace z jejich git:mltframework.org/mlt.git/tree - docs/; všimněte si, že wiki má stránku o BuildScripts.
Prozatím největším (jediným) problémem, který s tím mám, je, že nemohu najít způsob, jak exportovat nekomprimovanou kompozici videa (ani jako 65
snímky nebo nějaký nekomprimovaný formát videa).
Nejprve v příkazovém řádku 79
můžete ovládat přehrávání prostřednictvím snímků; například „vytvořit“ 15 snímků dlouhou bílou prázdnou a zobrazit ji pomocí vestavěného 88
přehrávač, použijte
melt -blank 15
Při zobrazení pomocí 93
, získáte také informace o příkazovém řádku na 107
pro vestavěný přehrávač:
$ 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
Jednou 112
po dokončení přehrávání, neukončí se - takže byste měli napsat 123
vystoupit z něj.
Měli bychom poznamenat, že v 132
jsou takzvaní „producenti“ a „spotřebitelé“ . Pokud není nic zadáno, pak výchozím „spotřebitelem“ je okno SDL (Simple DirectMedia Layer) přehrávající video; takže výše uvedený příkaz je stejný jako:
melt -blank 15 -consumer sdl
Pokud tedy chceme uložit co 144
displeje, měli bychom změnit spotřebitele na něco, co bude podporovat formát souboru. Chcete-li získat seznam spotřebitelů:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
155
spotřebitel odešle data ve formátu DV přímo do 168
, takže video uložíte do 172
soubor, který byste udělali:
melt -blank 15 -consumer libdv > test.dv
Všimněte si, že z uvedených spotřebitelů je jediný formát, který jsem vyzkoušel a který lze také otevřít v jiné aplikaci, 182
(Použil jsem 194
jako další aplikace); toto však může selhat pro jiný typ překódování (např. pokud místo prázdného místa zkusím převést úryvek z 206
výsledný soubor .dv se otevře a přehraje v 215
, ale je zkorumpovaný ).
Nyní k úpravám část; v podstatě můžete zadat řadu název-souboru /in/out stanzy přímo na příkazovém řádku; řekněme, že máte soubor 221
- pak můžete udělat:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
nebo trochu lépe naformátované:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
To znamená 234
z jeho rámce 30 do jeho rámce 79 bude přehráno; pak 15-snímkový polotovar; a poté 247
sekvence od snímku 30 do snímku 79 znovu.
Chcete-li použít obrázky (řekněme 251
) v kompozici úpravy videa:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Všimněte si, že pro 265
, 274
parametr nemusí být 0 – obrázek se však zobrazí pro 282
-298
čas; v tomto případě by bylo nejjednodušší jednoduše ponechat 300
parametr úplně ven.
Dobrá věc je, že tuto sekvenci úprav lze uložit - nebo jako 310
nazývá to, serializováno - do souboru; všimněte si, že jsou dva způsoby takové serializace:"jednoduché" nebo XML. Chcete-li například uložit výše uvedený příkaz jako "jednoduchý" serializovaný soubor, stačí přidat 329
přepněte na příkaz:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Nyní 330
obsahuje:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Zdánlivě tento „jednoduchý“ serializovaný formát souboru neobsahuje znak „komentování“ – pokud se pokusím přidat „347
" řádek, 356
si stěžuje:'Nepodařilo se načíst "# komentář" “ (ale kromě toho se zdá, že takový řádek je ignorován a přehrávání stejně pokračuje). "367
." " se zdá být rozšířením 373
rozpozná jako jednoduchý serializovaný soubor.
Nyní, abychom znovu přehráli tento serializovaný soubor, mohli bychom v zásadě zavolat 386
- úplnější příkazový řádek by však byl:
melt melt_file:file.melt -consumer sdl
... což by znamenalo:použijte 396
"producer" otevřete 409
a vykreslí jeho snímky na "spotřebitelském" 419
(okno).
Všimněte si, že mám zkušenost, že (řekněme) 420
videa se na příkazovém řádku přehrávají bez problémů – pokud jsou však zadána v 438
, dojde k chybě segmentace serializovaný soubor! 443
videa produkovaná 456
Zdá se, že v 465
funguje dobře ...
Typ serializace XML lze dosáhnout pomocí 472
přepínač (místo 488
) - takže výše uvedený příklad by nyní byl:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Chcete-li "přehrát" nově vygenerovaný 499
XML, lze nyní provést přímo 502
- nebo, úplnější příkazový řádek by byl:
melt xml:file.mlt -consumer sdl
... což by znamenalo:použijte 518
„producent“ (pozn. dříve to byl spotřebitel ) otevřete 529
a vykreslí jeho snímky na "spotřebitelském" 532
(okno).
Všimněte si, že v tomto případě jsem zažil to samé 544
videa, která způsobila segfault s jednoduchým serializačním souborem – fungují dobře se serializačním souborem XML!
V tomto případě výsledný 558
Soubor XML má mnohem více nastavení, jako je rozlišení, snímková frekvence, informace o kodeku atd. – ale také je obtížnější s ním přímo pracovat v textovém editoru:
<?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>
Ano, tam je. Zkuste použít aplikaci s názvem „Melt“. Podívejte se na dokumentaci zde.
Pokud používáte distribuci odvozenou z Debianu:
apt-get install melt
Řešení tohoto problému pomocí ffmpeg vypadá asi takto:
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
Používá pojmenované kanály, takže se na disku nevytvářejí dočasné soubory a umožňuje vám stříhat kousky videoklipů a přidávat obrázky.
Tento příklad používá čas 30-60 prvního vstupu a poté přidá první minutu druhého vstupu, poté vloží soubor obrázku a poté celé třetí video.
Kód byl odebrán z:
Stránka zřetězení ffmpeg:https://trac.ffmpeg.org/wiki/Concatenate
stránka superuser Použití ffmpeg k rozřezání videa
stránka superuživatele https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg