好的,因为我找不到太多关于melt
命令行用法的信息,所以这里有一些注意事项。(之后,请参阅此答案使用进程替换来欺骗期望文件的程序,并使用特定的扩展名作为参数?-Unix&Linux Stack Exchange for a script的示例bash
)
首先-有一个Ubuntu / Debian软件包melt
(我有Ubuntu 11.04,带有MLTmelt 0.6.2);@Ielton给出的链接用于“ Media Lovin'Toolkit ”(MLT)Wiki,它melt
是(但也是openshot
和kdenlive
)的一部分。这是从git到文档文本文件的链接:mltframework.org/mlt.git/tree-docs / ; 请注意,Wiki上有一个关于BuildScripts的页面。
目前,我遇到的最大(唯一)问题是,我找不到导出未压缩视频合成(作为png
帧或某些未压缩视频格式)的方法。
首先,melt
您可以在命令行中通过帧控制播放;例如,要“创建”一个15帧长的白色空白,并使用内置melt
播放器进行查看,请使用
melt -blank 15
当您使用观看时melt
,您还将获得stderr
内置播放器的命令行信息:
$ 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
一旦melt
完成打回来,它不会退出-所以你应该键入q
退出它。
我们应该注意,中有所谓的“生产者”和“消费者” melt
。如果未指定任何内容,则默认的“消费者”是播放视频的SDL(简单DirectMedia层)窗口。所以上面的命令与:
melt -blank 15 -consumer sdl
因此,如果我们要保存melt
显示内容,则应将使用者更改为支持文件格式的内容。获取消费者列表:
$ melt -query "consumers"
---
consumers:
- sdl
- sdl_audio
- sdl_preview
- sdl_still
- gtk2_preview
- avformat
- libdv
- xml
- decklink
- null
...
该libdv
消费者将输出DV格式的数据直接stdout
,所以保存视频到.dv
你做的文件:
melt -blank 15 -consumer libdv > test.dv
请注意,在列出的使用者中,我尝试过的唯一可以在另一个应用程序中打开的格式是libdv
(我用作vlc
另一个应用程序)。但是,这可能会因不同类型的转码而失败(例如,如果我尝试从.flv
文件转换代码段而不是空白,则生成的.dv文件打开并在其中播放vlc
,但已损坏)。
现在是编辑部分;本质上,您可以直接在命令行上指定一系列文件名 / in / out节;说您有一个文件,video.avi
那么您可以:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79
或格式稍好一些:
melt \
video.avi in=30 out=79 \
-blank 15 \
video.avi in=30 out=79
这意味着video.avi
将从其帧30到其帧79播放;然后是15帧空白;然后video.avi
再次从第30帧到第79帧的顺序。
要.png
在视频编辑作品中使用图像(例如),请执行以下操作:
melt \
video.avi in=30 out=79 \
test.png in=0 out=15 \
video.avi in=30 out=79 \
-blank 15
请注意,对于test.png
,in=
参数不必为0-但是,图像将显示out
- in
时间;在这种情况下,最简单的方法是将所有in=0
参数都省掉。
好消息是,这个编辑序列可以保存-或melt
调用它,连载 -到文件; 请注意,有两种此类序列化方式:“简单”或XML。例如,要将上面的命令保存为“简单”序列化文件,我们只需将-serialise [filename]
开关添加到命令中即可:
$ melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -serialise file.melt
Project saved as file.melt.
现在file.melt
包含:
video.avi
in=30
out=79
-blank
15
video.avi
in=30
out=79
看来,这种“简单”的序列化文件格式不包含“注释”字符-如果我尝试添加“ # comment
”行,则melt
抱怨:“ 无法加载“#comment” ”(但除此之外,一行会被忽略,并且无论如何都会继续播放)。“ .melt
”似乎是可以melt
识别为简单序列化文件的扩展名。
现在,要重放此序列化文件,原则上我们可以只调用melt file.melt
-但是,更完整的命令行将是:
melt melt_file:file.melt -consumer sdl
...这意味着:使用melt_file
“生产者”打开file.melt
,并将其框架渲染到“消费者” sdl
(窗口)上。
请注意,我的经验是,(说).flv
视频在命令行上播放时没有问题-但是,在file.melt
序列化文件中指定视频时,会导致分段错误!自行.dv
制作的视频melt
似乎可以在file.melt
...
可以通过使用-consumer xml:
switch(而不是-serialise
)来实现XML类型的序列化-因此,上面的示例现在是:
melt video.avi in=30 out=79 -blank 15 video.avi in=30 out=79 -consumer xml:file.mlt
要“播放”新生成的file.mlt
XML文件,现在可以直接执行melt file.mlt
-或更完整的命令行是:
melt xml:file.mlt -consumer sdl
...这意味着:使用xml
“生产者”(注意,以前是消费者)打开file.mlt
,并将其框架呈现在“消费者” sdl
(窗口)上。
请注意,在这种情况下,我已经体验到.flv
使用简单的序列化文件导致段错误的非常相同的视频-使用XML序列化文件就可以正常工作!
在这种情况下,生成的file.mlt
XML文件具有更多设置,例如分辨率,帧速率,编解码器信息等-但直接在文本编辑器中使用它也更加困难:
<?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>