Ok, ya que no puedo encontrar mucho sobre el melt
uso de la línea de comandos, aquí hay algunas notas ... (y después de esto, vea esta respuesta ¿Cómo usar la sustitución de procesos para engañar a los programas que esperan archivos, con extensiones específicas como argumento? - Unix y Linux Stack Exchange para un script ejemplo a través de bash
)
Para empezar, hay un paquete Ubuntu / Debian para melt
(tengo Ubuntu 11.04 con MLT melt 0.6.2); el enlace proporcionado por @Ielton es para el Wiki "Media Lovin 'Toolkit" (MLT), que melt
forma parte de (pero también openshot
y kdenlive
). Aquí está el enlace a los archivos de texto de la documentación de su git: mltframework.org/mlt.git/tree - docs / ; tenga en cuenta que el wiki tiene una página sobre BuildScripts .
Por ahora, el mayor (único) problema que tengo con él es que no puedo encontrar una manera de exportar una composición de video sin comprimir (ya sea como png
cuadros o algún formato de video sin comprimir).
Primero, en la línea de comandos melt
puede controlar la reproducción a través de cuadros; por ejemplo, para "crear" un espacio en blanco blanco de 15 cuadros y verlo con el melt
reproductor incorporado, use
melt -blank 15
Cuando veas con melt
, también obtendrás una información de línea de comando stderr
para el reproductor incorporado:
$ 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 vez melt
que termine la reproducción, no saldrá, por lo que debe escribir q
para salir.
Debemos tener en cuenta que hay los llamados "productores" y "consumidores" en melt
. Si no se especifica nada, el "consumidor" predeterminado es una ventana SDL (Simple DirectMedia Layer) que reproduce el video; entonces el comando anterior es el mismo que:
melt -blank 15 -consumer sdl
Por lo tanto, si queremos guardar lo que se melt
muestra, debemos cambiar al consumidor a algo que admita un formato de archivo. Para obtener una lista de consumidores:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
El libdv
consumidor emitirá datos con formato DV directamente stdout
, por lo que para guardar el video en un .dv
archivo que haría:
melt -blank 15 -consumer libdv > test.dv
Tenga en cuenta que de los consumidores enumerados, el único formato que he probado, que también se puede abrir en otra aplicación es libdv
(lo usé vlc
como otra aplicación); sin embargo, esto puede fallar para un tipo diferente de transcodificación ( por ejemplo, si en lugar de un espacio en blanco, trato de convertir un fragmento de un .flv
archivo, el archivo .dv resultante se abre y se reproduce vlc
, pero está dañado ).
Ahora para la parte de edición ; esencialmente, puede especificar una serie de estrofas de nombre / entrada / salida de archivo directamente en la línea de comando; diga que tiene un archivo, video.avi
entonces podría hacer:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
o ligeramente mejor formateado:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Esto significa video.avi
que se jugará desde su cuadro 30 hasta su cuadro 79; luego un espacio en blanco de 15 cuadros; y luego la video.avi
secuencia del cuadro 30 al cuadro 79 nuevamente.
Para utilizar imágenes (por ejemplo, .png
) en una composición de edición de video:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Tenga en cuenta que para test.png
, in=
el parámetro no tiene que ser 0 - Sin embargo, la imagen se visualiza para out
- in
tiempo; en este caso, sería más fácil simplemente dejar el in=0
parámetro por completo.
Lo bueno es que esta secuencia de edición se puede guardar, o como se melt
llama, serializar , en un archivo; Tenga en cuenta que hay dos formas de dicha serialización: "simple" o XML. Por ejemplo, para guardar el comando anterior como un archivo serializado "simple", simplemente podemos agregar el -serialise [filename]
interruptor 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.
Ahora el file.melt
contiene:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Aparentemente, este formato de archivo serializado "simple" no contiene un carácter de "comentario". Si trato de agregar una " # comment
" línea, me melt
quejo con: ' Error al cargar "# comentario" ' (pero aparte de eso, parece que tal se ignora una línea y la reproducción continúa de todos modos). " .melt
" parece ser una extensión que melt
reconoce como simple archivo serializado.
Ahora, para reproducir este archivo serializado, en principio podríamos simplemente llamar melt file.melt
, sin embargo, una línea de comando más completa sería:
melt melt_file:file.melt -consumer sdl
... lo que significaría: usar el melt_file
"productor" para abrir file.melt
y renderizar sus marcos en el "consumidor" sdl
(ventana).
Tenga en cuenta que tengo la experiencia, que (digamos) los .flv
videos se reproducen sin problemas en la línea de comando; sin embargo, ¡causan una falla de segmentación cuando se especifican en el file.melt
archivo serializado! .dv
los videos producidos por melt
sí mismos parecen funcionar bien en file.melt
...
El tipo de serialización XML se puede lograr utilizando el -consumer xml:
conmutador (en lugar de-serialise
), por lo que el ejemplo anterior ahora sería:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Para "reproducir" el file.mlt
archivo XML recién generado , ahora se puede hacer directamente melt file.mlt
, o una línea de comando más completa sería:
melt xml:file.mlt -consumer sdl
... lo que significaría: use el xml
"productor" ( nota, anteriormente era un consumidor ) para abrir file.mlt
y renderizar sus marcos en el "consumidor" sdl
(ventana).
Tenga en cuenta que en este caso, he experimentado que los mismos .flv
videos que causaron la falla con un simple archivo de serialización, ¡funcionan bien con un archivo de serialización XML!
En este caso, el file.mlt
archivo XML resultante tiene muchas más configuraciones, como resolución, velocidad de cuadros, información de códec, etc., pero también es más difícil trabajar directamente en un editor de texto:
<?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>