Ok, dato che non riesco a trovare molto su 08
utilizzo della riga di comando, ecco alcune note. codice> )
Per cominciare, c'è un pacchetto Ubuntu/Debian per 27
(Ho Ubuntu 11.04 con MLT melt 0.6.2); il link fornito da @Ielton è per il Wiki "Media Lovin' Toolkit" (MLT), che 32
fa parte di (ma anche di 49
e 59
). 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 (o come 68
fotogrammi o qualche formato video non compresso).
Innanzitutto, nella riga di comando 71
puoi controllare la riproduzione attraverso i fotogrammi; ad esempio, per "creare" uno spazio bianco lungo 15 fotogrammi e visualizzarlo con il 81
integrato giocatore, usa
melt -blank 15
Quando visualizzi con 95
, otterrai anche un'informazione della riga di comando su 109
per il lettore 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 114
terminata la riproduzione, non uscirà, quindi dovresti digitare 125
per uscirne.
Dovremmo notare che ci sono i cosiddetti "produttori" e "consumatori" in 134
. Se non viene specificato nulla, il "consumatore" predefinito è una finestra SDL (Simple DirectMedia Layer) che riproduce il video; quindi il comando precedente è lo stesso di:
melt -blank 15 -consumer sdl
Quindi, se vogliamo salvare ciò che 146
display, 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 157
consumer invierà i dati in formato DV direttamente a 160
, quindi per salvare il video in un 174
file che faresti:
melt -blank 15 -consumer libdv > test.dv
Nota che tra i consumatori elencati, l'unico formato che ho provato, che può essere aperto anche in un'altra applicazione è 184
(Ho usato 196
come un'altra applicazione); tuttavia, questo potrebbe non riuscire per un diverso tipo di transcodifica (ad es. se invece di uno spazio vuoto, provo a convertire uno snippet da un 208
file, il file .dv risultante si apre e viene riprodotto in 217
, ma è danneggiato ).
Passiamo ora alla editing parte; essenzialmente, puoi specificare una serie di file-name /in/out stanze direttamente sulla riga di comando; dì che hai un file, 223
- allora potresti fare:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
o con un formato leggermente migliore:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Questo significa 236
verrà riprodotto dal suo fotogramma 30 al suo fotogramma 79; quindi uno spazio vuoto di 15 fotogrammi; e poi il 249
sequenza dal fotogramma 30 al fotogramma 79 di nuovo.
Per utilizzare immagini (diciamo, 253
) in una composizione di montaggio video:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Nota che per 267
, 276
non è necessario che il parametro sia 0 - tuttavia, l'immagine verrà visualizzata per 284
-290
volta; in questo caso, sarebbe più semplice lasciare semplicemente il 302
parametro fuori del tutto.
La cosa buona è che questa sequenza di editing può essere salvata - o come 312
lo chiama, serializzato - a un file; nota che ce ne sono due modi di tale serializzazione:"semplice" o XML. Ad esempio, per salvare il comando precedente come un "semplice" file serializzato, possiamo semplicemente aggiungere 321
passare 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 il 332
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 di "commento" - se provo ad aggiungere un "349
" riga, 358
si lamenta con:'Impossibile caricare "# commento" ' (ma a parte questo, sembra che una riga del genere venga ignorata e la riproduzione continua comunque). "360
" sembra essere un'estensione che 375
riconosce come semplice file serializzato.
Ora, per riprodurre nuovamente questo file serializzato, in linea di principio potremmo semplicemente chiamare 388
- tuttavia, una riga di comando più completa sarebbe:
melt melt_file:file.melt -consumer sdl
... che significherebbe:usa il 398
"produttore" per aprire 401
, e renderizza i suoi frame sul 412
"consumer". (finestra).
Nota che ho l'esperienza, quel (diciamo) 422
i video vengono riprodotti senza problemi sulla riga di comando, tuttavia causano un errore di segmentazione quando vengono specificati in 430
file serializzato! 445
video prodotti da 458
stesso, sembra funzionare bene in 467
...
Il tipo di serializzazione XML può essere ottenuto utilizzando il 474
switch (invece di 480
) - 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 491
appena generato XML, ora si può fare direttamente 505
- oppure, una riga di comando più completa sarebbe:
melt xml:file.mlt -consumer sdl
... che significherebbe:usa il 510
"produttore" (nota, in precedenza era un consumatore ) per aprire 521
, e renderizza i suoi frame sul "consumer" 534
(finestra).
Nota che in questo caso, ho sperimentato lo stesso 546
video che hanno causato segfault con un semplice file di serializzazione:funzionano perfettamente con un file di serializzazione XML!
In questo caso, il risultante 550
Il file XML ha molte più impostazioni, come risoluzione, frame rate, informazioni sul codec, ecc., ma è anche più difficile lavorarci 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>
Si C'è. Prova a usare l'app chiamata "Melt". Consulta la documentazione qui.
Se usi una distribuzione derivata da Debian:
apt-get install melt
La soluzione ffmpeg a questo problema è simile a questa:
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
Utilizza pipe con nome, quindi non è possibile creare file temporanei su disco e ti consente di tagliare pezzi di clip video e aggiungere immagini.
Questo esempio utilizza il tempo 30-60 del primo input, quindi aggiunge il primo minuto del secondo input, quindi inserisce un file immagine e infine l'intero terzo video.
Codice sollevato da:
Pagina concatenata di ffmpeg:https://trac.ffmpeg.org/wiki/Concatenate
pagina del superutente Uso di ffmpeg per tagliare il video
pagina del superutente https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg