Skip to content

Montaggio video a riga di comando in Linux (taglio, unione e anteprima)

Non esitare a condividere la nostra pagina e i nostri codici con i tuoi amici, aiutaci a far crescere la nostra community.

Soluzione:

Ok, dato che non riesco a trovare molto su melt (e dopo questo, vedere questa risposta Usare la sostituzione di processo per ingannare i programmi che si aspettano file con estensioni specifiche come argomento? - Unix & Linux Stack Exchange per un esempio di script via bash)

Per cominciare, esiste un pacchetto Ubuntu/Debian per melt (io ho Ubuntu 11.04 con MLT melt 0.6.2); il link dato da @Ielton è per il Wiki "Media Lovin' Toolkit" (MLT), che melt fa parte (ma anche openshot e kdenlive). Ecco il link ai file di testo della documentazione dal loro git: mltframework.org/mlt.git/tree - docs/; si noti che il wiki ha una pagina sui BuildScripts.

Per ora, il più grande (unico) problema che ho è che non riesco a trovare un modo per esportare una composizione video non compressa (o come png o in qualche formato video non compresso).

 

Per prima cosa, nella riga di comando melt è possibile controllare la riproduzione attraverso i fotogrammi; ad esempio, per "creare" un bianco lungo 15 fotogrammi e visualizzarlo con il programma incorporato melt incorporato, utilizzare

melt -blank 15

Quando si visualizza con meltsi otterrà anche un'informazione da riga di comando per stderr 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 melt ha terminato la riproduzione, non uscirà - quindi si dovrà digitare q per uscire.

Si noti 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 di cui sopra è lo stesso di:

melt -blank 15 -consumer sdl

Pertanto, se si vuole salvare ciò che melt si deve 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 emetterà i dati formattati DV direttamente a stdout, quindi per salvare il video in un file .dv si dovrebbe fare:

melt -blank 15 -consumer libdv > test.dv

Si noti che tra i consumatori elencati, l'unico formato che ho provato, che può essere aperto anche in un'altra applicazione, è il seguente libdv (ho usato vlc come altra applicazione); tuttavia, questo potrebbe fallire per un diverso tipo di transcodifica (Ad esempio, se invece di uno spazio vuoto, provo a convertire un frammento da un file .flv il file .dv risultante si apre e viene riprodotto in vlcma è corrotto).

 

Ora per il file modifica essenzialmente, si può specificare una serie di nome del file/in/out direttamente sulla linea di comandoe; diciamo che abbiamo un file, video.avi - allora si può 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

Questo significa video.avi dal suo fotogramma 30 al suo fotogramma 79 sarà riprodottoed; poi uno spazio vuoto di 15 fotogrammi; e poi il video.avi dal fotogramma 30 al fotogramma 79.

Per utilizzare le immagini (ad esempio, .png) 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

Si noti che per test.png, in= non è necessario che il parametro sia 0 - tuttavia, l'immagine sarà visualizzata per out-in tempoe; in questo caso, sarebbe più semplice lasciare il parametro in=0 non è possibile inserire il parametro.

 

L'aspetto positivo è che questa sequenza di modifica può essere salvata - o come melt la chiama, serializzata - a un filee; si noti che ci sono due modi di tale serializzazione: "semplice" o XML. Per esempio, per salvare il comando precedente come file serializzato "semplice", si può semplicemente aggiungere l'opzione -serialise [filename] 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 comando 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 di "commento": se provo ad aggiungere un carattere "# comment", melt si lamenta con: 'Non è riuscito a caricare "# comment"' (ma a parte questo, sembra che tale riga venga ignorata e la riproduzione continua comunque). ".melt" sembra essere un'estensione che melt riconosce come semplice file serializzato.

Ora, per riprodurre questo file serializzato, in linea di principio si potrebbe semplicemente chiamare melt file.melt - tuttavia, una riga di comando più completa sarebbe:

melt melt_file:file.melt -consumer sdl

... il che significa: usare il comando melt_file "produttore" per aprire file.melte rendere i suoi fotogrammi sul "consumatore" sdl (finestra).

Si noti che ho l'esperienza che (diciamo) .flv vengono riprodotti senza problemi sulla riga di comando, ma causano un errore di segmentazione quando vengono specificati nel file file.melt file serializzato! .dv video prodotti da melt sembrano funzionare bene in file.melt...

 

La serializzazione di tipo XML può essere ottenuta utilizzando l'elemento -consumer xml: (invece di -serialise) - quindi l'esempio precedente sarebbe ora:

melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt

Per "riprodurre" il nuovo file generato file.mlt XML, si può ora fare direttamente melt file.mlt - oppure, una riga di comando più completa sarebbe:

melt xml:file.mlt -consumer sdl

... il che significa: utilizzare il comando xml "produttore" (nota, in precedenza era un consumatore) per aprire file.mlte renderizzare i suoi fotogrammi sul "consumatore" sdl (finestra).

Si noti che in questo caso, ho sperimentato che lo stesso .flv che causavano segfault con un semplice file di serializzazione, funzionano benissimo con un file di serializzazione XML!

In questo caso, il risultato file.mlt XML ha molte più impostazioni, come la risoluzione, la frequenza dei fotogrammi, le informazioni sui codec e così via, ma è anche più difficile lavorare direttamente con un editor di testo:



  
  
    producer
    1.000000
    125
    pause
    video.avi
    2
    video
    25.000000
    0.000000
    25.000000
    yuv420p
    1.000000
    601
    mpeg4
    MPEG-4 part 2
    0
    audio
    s16
    22050
    1
    mp2
    MP2 (MPEG audio layer 2)
    64000
    1
    1
    1
    
    
    
    
    
    1
    0
    avformat
  
  
    producer
    1.000000
    125
    pause
    video.avi
    2
    video
    25.000000
    0.000000
    25.000000
    yuv420p
    1.000000
    601
    mpeg4
    MPEG-4 part 2
    0
    audio
    s16
    22050
    1
    mp2
    MP2 (MPEG audio layer 2)
    64000
    1
    1
    1
    
    
    
    
    
    1
    0
    avformat
  
  
    
    
    
  
  
    
  

Sì, c'è. Provate a usare l'applicazione "Melt". Vedere la documentazione qui.

Se si usa una distro 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 le named pipe, in modo da non creare file temporanei sul disco, e consente di tagliare pezzi di video clip e di aggiungere immagini.

Questo esempio utilizza il tempo 30-60 del primo input, poi aggiunge il primo minuto del secondo input, quindi inserisce un file immagine e poi l'intero terzo video.

Codice preso da:

pagina ffmpeg concatenate:
https://trac.ffmpeg.org/wiki/Concatenate

pagina superuser Usare ffmpeg per tagliare i video

pagina per superutenti https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg

valutazioni e recensioni

Ricordati di mostrare questa cronaca se ne è valsa la pena.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.