-1

我在批处理脚本中使用以下命令,希望最终以编程方式创建带有过渡的简单视频幻灯片:

melt 131.jpg 132.jpg 133.jpg ttl=75 -attach crop center=1 -filter luma cycle=75 duration=25 -transition mix -consumer avformat:out.mp4 frame_rate_num=30 frame_rate_den=1

该命令的大部分内容是对 MLT 网站博客上命令的 Windows 改编(缩放和转换图像的部分除外)。但是,由于某种原因,当我运行它时,输出视频文件长达 25 分钟!

我有两个主要问题:

一个。如何正确控制视频中每个图像的持续时间?我已经对更改参数进行了相当多的实验,并且对它们的含义有一个半体面的理解(我是 MLT 的新手,但我认为仅在 FFMPEG 中没有办法轻松地做这样的事情)。我发现通过任何数量的控制来减少持续时间的唯一方法是将输出帧速率增加到荒谬的数字(当然,这并不理想,因为它浪费了大量的时间和精力,并且仍然不能真正解决问题)。

湾。如何使用通配符输入 Windows 文件夹中的所有 .jpg 文件?我尝试添加 *.jpg 但这不起作用,我不知道如何在批处理脚本中执行它(我尝试使用以下代码将文件名作为变量获取,但我无法使字符串连接正常工作,因为它只输出最终文件名)

set files=
for /r %%i in (*.jpg) do (
    echo %%i
    set files=%files% "%%i"
)
echo %files%

感谢您的任何建议!

4

2 回答 2

0

当你指定一个 .jpg 文件时,melt 会在内部自动选择一个生产者。根据您的环境和版本,该生产者将是 qimage 或 pixbuf 生产者。

两个生产者都提供了一个“ttl”参数来指定图像序列的图像持续时间(以帧为单位) https://mltframework.org/plugins/ProducerQimage/#ttl

https://mltframework.org/plugins/ProducerPixbuf/#ttl

在您链接的示例中,使用特殊语法创建了一个图像序列:photos/.all.jpg ttl=75

在您的示例中,您指定了一个特定的文件名。所以没有创建图像序列。相反,会为每个文件创建一个新的生产者。生产者的默认长度是 15000 帧。

https://github.com/mltframework/mlt/blob/master/src/framework/mlt_producer.c#L102

长度可以在命令行中指定。

melt 131.jpg length=100 132.jpg length=100 133.jpg length=100
于 2020-11-10T03:55:48.073 回答
0

改变

set files=%files% "%%i"

CALL set "files=%%files%% "%%i""

这使用辅助过程来连接您的文件名。

我不知道您的其他问题的解决方案。

于 2020-11-08T05:52:48.870 回答