Windows 上的 MLT 融化幻灯片:无法控制输出视频长度和使用通配符的问题

MLT melt slideshow on Windows: unable to control output video length and problems with using wildcards

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

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 网站博客上 this 命令的 Windows 的改编(缩放和变换图像的部分除外)。出于某种原因,当我 运行 这样做时,输出的视频文件有 25 分钟长!

我有两个主要问题:

一个。如何正确控制视频中每个图像的持续时间?我已经尝试了很多更改参数的方法,并且我对它们的含义有一定的了解(我是 MLT 的新手,但我认为仅在 FFMPEG 中无法轻松完成此类操作)。我发现通过任何数量的控制来减少持续时间的唯一方法是将输出帧率增加到荒谬的数字(当然,这并不理想,因为它会浪费大量时间和精力并且仍然没有真正解决问题)。

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

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

感谢您的任何建议!

改变

set files=%files% "%%i"

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

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

我不知道你的另一个问题的解决方案。

当您指定 .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