Ok, como não consigo encontrar muito sobre o melt
uso da linha de comando, aqui estão algumas notas .. (e depois disso, veja esta resposta Usando a substituição de processo para enganar programas que esperam arquivos, com extensões específicas como argumento? - Unix e Linux Stack Exchange para um script exemplo via bash
)
Para começar - existe um pacote Ubuntu / Debian para melt
(eu tenho o Ubuntu 11.04 com MLT melt 0.6.2); o link fornecido por @Ielton é para o Wiki "Media Lovin 'Toolkit" (MLT), que melt
faz parte (mas também openshot
e kdenlive
). Aqui está o link para os arquivos de texto da documentação em seu git: mltframework.org/mlt.git/tree - docs / ; note que o wiki possui uma página sobre BuildScripts .
Por enquanto, o maior (único) problema que tenho com ele é que não consigo encontrar uma maneira de exportar uma composição de vídeo não compactada (como png
quadros ou algum formato de vídeo não compactado).
Primeiro, na linha de comando, melt
você pode controlar a reprodução através de quadros; por exemplo, para "criar" um espaço em branco branco de 15 quadros e visualizá-lo com o melt
player embutido , use
melt -blank 15
Ao visualizar com melt
, você também receberá informações de linha de comando stderr
para o player 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
Uma vez que melt
é feito jogando para trás, ele não vai sair - assim que você deve digitar q
para sair dela.
Devemos observar que existem os chamados "produtores" e "consumidores" em melt
. Se nada for especificado, o "consumidor" padrão é uma janela SDL (Simple DirectMedia Layer) reproduzindo o vídeo; portanto, o comando acima é o mesmo que:
melt -blank 15 -consumer sdl
Portanto, se quisermos salvar o que é melt
exibido, devemos mudar o consumidor para algo que suporte um formato de arquivo. Para obter uma lista de consumidores:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
O libdv
consumidor enviará dados formatados em DV diretamente para stdout
, para salvar o vídeo em um .dv
arquivo que você faria:
melt -blank 15 -consumer libdv > test.dv
Observe que, dos consumidores listados, o único formato que tentei, que também pode ser aberto em outro aplicativo, é libdv
(usei vlc
como outro aplicativo); no entanto, isso pode falhar para um tipo diferente de transcodificação ( por exemplo, se, em vez de um espaço em branco, eu tentar converter um trecho de .flv
arquivo, o arquivo .dv resultante será aberto e reproduzido vlc
, mas está corrompido ).
Agora para a parte de edição ; essencialmente, você pode especificar uma série de estrofes de nome de arquivo / entrada / saída diretamente na linha de comando; digamos que você tenha um arquivo, video.avi
- então você pode fazer:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
ou um pouco melhor formatado:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
Isto significa que video.avi
do seu quadro 30 para o seu quadro 79 será reproduzido; então um espaço em branco de 15 quadros; e então a video.avi
sequência do quadro 30 para o quadro 79 novamente.
Para utilizar imagens (por exemplo .png
) em uma composição de edição de vídeo:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
Observe que para test.png
, o in=
parâmetro não precisa ser 0 - no entanto, a imagem será exibida por out
- in
tempo; nesse caso, seria mais fácil simplesmente deixar o in=0
parâmetro totalmente de fora.
O bom é que essa sequência de edição pode ser salva - ou como é melt
chamada, serializada - em um arquivo; observe que existem duas maneiras de tal serialização: "simples" ou XML. Por exemplo, para salvar o comando acima como um arquivo serializado "simples", podemos apenas adicionar a -serialise [filename]
opção ao comando:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
Agora o file.melt
contém:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
Aparentemente, esse formato de arquivo serializado "simples" não contém um caractere "comentando" - se eu tentar adicionar uma # comment
linha " ", melt
queixa-se de: ' Falha ao carregar "# comment" ' (mas, além disso, parece que uma linha é ignorada e a reprodução continua de qualquer maneira). " .melt
" parece ser uma extensão que melt
reconhece como um arquivo serializado simples.
Agora, para reproduzir novamente esse arquivo serializado, poderíamos, em princípio, apenas chamar melt file.melt
- no entanto, uma linha de comando mais completa seria:
melt melt_file:file.melt -consumer sdl
... o que significaria: use o melt_file
"produtor" para abrir file.melt
e renderize seus quadros no "consumidor" sdl
(janela).
Observe que tenho a experiência de que (digamos) os .flv
vídeos são reproduzidos sem problemas na linha de comando - no entanto, causam uma falha de segmentação quando são especificados no file.melt
arquivo serializado! .dv
vídeos produzidos por melt
si só, parecem funcionar bem em file.melt
...
O tipo XML de serialização pode ser alcançado usando a -consumer xml:
opção (em vez de-serialise
) - portanto, o exemplo acima seria agora:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
Para "reproduzir" o file.mlt
arquivo XML recém-gerado , agora é possível executar diretamente melt file.mlt
- ou, uma linha de comando mais completa seria:
melt xml:file.mlt -consumer sdl
... o que significaria: use o xml
"produtor" ( observe que anteriormente era consumidor ) para abrir file.mlt
e renderizar seus quadros no "consumidor" sdl
(janela).
Observe que, nesse caso, eu experimentei que os mesmos .flv
vídeos que causaram segfault com um arquivo de serialização simples - funcionam bem com um arquivo de serialização XML!
Nesse caso, o file.mlt
arquivo XML resultante possui muito mais configurações, como resolução, taxa de quadros, informações de codec etc. - mas também é mais difícil trabalhar diretamente em um 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>