GNU/Linux >> Linux Esercitazione >  >> Linux

Editing video da riga di comando in Linux (taglio, unione e anteprima)

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


Linux
  1. Convertitori video open source per Linux [GUI e CLI]

  2. Taglia / Grep e Df -h?

  3. Cronologia della riga di comando in Linux

  4. 4 Utilizzo essenziale e pratico del comando Cut in Linux

  5. Cinelerra GG Infinity – Un software di editing video gratuito per Linux

I migliori convertitori video gratuiti per Linux [GUI, CLI e online]

50 Comando Linux Cut semplice e utile in Unix con esempi

I 20 migliori software e strumenti per videoconferenze su Linux

OpenShot:un editor video semplice e potente per Linux

15 migliori software di editing video per sistema Linux

Quali applicazioni di editing video sono disponibili in Linux?