Ok, como não consigo encontrar muito sobre o meltuso 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 meltfaz parte (mas também openshote 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 pngquadros ou algum formato de vídeo não compactado).
Primeiro, na linha de comando, meltvocê 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 meltplayer embutido , use
melt -blank 15
Ao visualizar com melt, você também receberá informações de linha de comando stderrpara 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 qpara 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 é meltexibido, 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 libdvconsumidor enviará dados formatados em DV diretamente para stdout, para salvar o vídeo em um .dvarquivo 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 vlccomo 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 .flvarquivo, 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.avido 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.avisequê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- intempo; nesse caso, seria mais fácil simplesmente deixar o in=0parâmetro totalmente de fora.
O bom é que essa sequência de edição pode ser salva - ou como é meltchamada, 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.meltconté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 # commentlinha " ", meltqueixa-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 meltreconhece 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.melte renderize seus quadros no "consumidor" sdl(janela).
Observe que tenho a experiência de que (digamos) os .flvvídeos são reproduzidos sem problemas na linha de comando - no entanto, causam uma falha de segmentação quando são especificados no file.meltarquivo serializado! .dvvídeos produzidos por meltsi 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.mltarquivo 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.mlte renderizar seus quadros no "consumidor" sdl(janela).
Observe que, nesse caso, eu experimentei que os mesmos .flvvídeos que causaram segfault com um arquivo de serialização simples - funcionam bem com um arquivo de serialização XML!
Nesse caso, o file.mltarquivo 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>