我正在尝试创建一个只是单个图像的短视频。 (我知道它有点傻,但它是对更大的东西的测试。)
我提供的代码是:
#include <framework/mlt.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
if(mlt_factory_init(NULL)) {
mlt_profile p = mlt_profile_init(NULL);
mlt_consumer target = mlt_factory_consumer(p, "avformat",
mlt_producer source = mlt_factory_producer(p, "hold", "/Users/leif/logo.png");
mlt_producer_set_in_and_out(source, 0, 10);
mlt_consumer_connect(target, mlt_producer_service(source));
mlt_consumer_start(target);
sleep(5);
mlt_consumer_stop(target);
mlt_consumer_close(target);
mlt_producer_close(source);
mlt_factory_close();
} else {
printf("No\n");
}
return 0;
}
logo.png
为this file。
当我运行此代码并播放output.mp4
时,图片全部被标记出来。中间有一条绿线,徽标叠加在自身上。
另一方面,如果我将消费者更改为SDL,则图像播放得很好。
最后,如果我将使用者更改为XML,然后使用melt命令行应用程序来呈现它:
melt -consumer avformat:xmlout.mp4 output.xml
播放视频,播放也很好。
我应该设置的avformat使用者中是否缺少某些内容?或者我在这里缺少的其他东西?
编辑:作为参考,输出的xml文件:output.xml
为:
<?xml version="1.0" encoding="utf-8"?>
<mlt LC_NUMERIC="en_US.UTF-8" version="6.2.0" root="/Users/leif/src/video/private" title="Anonymous Submission" parent="producer0" in="0" out="10">
<profile description="DV/DVD PAL" width="720" height="576" progressive="0" sample_aspect_num="16" sample_aspect_den="15" display_aspect_num="4" display_aspect_den="3" frame_rate_num="25" frame_rate_den="1" colorspace="601"/>
<producer id="producer0" title="Anonymous Submission" in="0" out="10">
<property name="length">15000</property>
<property name="eof">pause</property>
<property name="resource">/Users/leif/logo.png</property>
<property name="aspect_ratio">1.06667</property>
<property name="frame">0</property>
<property name="method">onefield</property>
<property name="mlt_service">hold</property>
<property name="global_feed">1</property>
</producer>
</mlt>
答案 0 :(得分:2)
来自相关的bug report:
mlt_factory_profile()实际上有点棘手且不清楚,因为框架本身并不强制要求生产者和消费者之间达成协议。有一个名为“loader”的MLT超级生产者,它增加了一堆规范化过滤器以促进协议。当您将服务参数指定为mlt_factory_producer()时,您将绕过此生产者。您可以在上面的链接代码中看到对MLT_PRODUCER的引用,该引用在该文件中前面定义了默认的“loader”。
所以,真的,为了让事情有效,你应该说mlt_factory_producer(p, NULL, "hold:/Users/leif/logo.png");
至于XML,请参阅producer_xml.c如何做到这一点。