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

Batch file Windows上的MLT melt幻灯片:无法控制输出视频长度和使用通配符的问题,batch-file,command-line,ffmpeg,video-editing,mlt,Batch File,Command Line,Ffmpeg,Video Editing,Mlt,我在批处理脚本中使用以下命令,希望最终能够以编程方式创建带有过渡的简单视频幻灯片: 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 of comman

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

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 of command的改编(缩放和变换图像的部分除外)。但是,由于某些原因,当我运行此程序时,输出的视频文件长达25分钟

我有两个主要问题:

a。如何正确控制视频中每个图像的持续时间?我已经尝试了很多改变参数的方法,并且我对它们的含义有了一个相当好的理解(我是MLT的新手,但我认为仅仅在FFMPEG中是不可能轻松做到这一点的)。我发现,在任何控制量下减少持续时间的唯一方法是将输出帧速率增加到荒谬的数字(当然,这并不理想,因为这是对时间和精力的巨大浪费,而且仍然不能真正解决问题)

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

谢谢你的建议

变化

set files=%files% "%%i"

这将使用一个辅助进程来连接文件名


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

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

两个生产者都提供一个“ttl”参数来指定图像序列的图像持续时间(以帧为单位)

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

在您的示例中,指定特定的文件名。因此,不会创建图像序列。而是为每个文件创建一个新的生产者。生产者的默认长度为15000帧

可以在命令行中指定长度

melt 131.jpg length=100 132.jpg length=100 133.jpg length=100

请参阅。当我使用“photos/.all.jpg ttl=75”语法时,我得到一个错误,上面写着“加载'photos/.all.jpg'失败”。我使用的是windows,我相信我的melt版本在默认情况下使用的是qimage,因为在列出所有生产者时,pixbuf生产者没有列出。我已经得到了一个脚本,可以插入每个文件名和一个长度标记(例如img.jpg length=100 img2.jpg length=100等),但是我还没有得到这样的转换,语法非常混乱。你能给我一些建议吗?你的jpg文件在名为“照片”的文件夹中吗?如果没有,则需要更改路径。“.all.jpg”是一个特殊的通配符,用于告诉制作人查找指定路径中的所有文件。如果你想在每张照片之间切换,你不能用“.all”来切换,因为它只会创建一个制作人。如果将每个文件列为img1.jpg img2.jpg,则需要在每个图像之间添加“-transition”。如果您需要为每个转换指定选项,这将成为一个很长的命令。许多人通过使用创建.mlt项目文件(如Kdenlive和Shotcut)的工具获得了成功。使用该工具创建所需的效果。然后,研究生成的xml文件以了解语法。然后,编写一个脚本来自动构建自己的.xml文件。使用melt来呈现xml文件。啊,我以前尝试过使用“.all.jpg”或“/.all.jpg”,但它总是会给我同样的错误。事实证明,您必须指定一个目录,否则通配符命令将无法工作(例如,“directory/.all.jpg”)。令人惊讶的是,我还发现使用单一制作人的通配符方法在每张照片之间获得了成功的过渡。现在我唯一的问题是,输出的视频总是10分钟长,并在所有照片中循环多次,或剪掉多余的照片以达到这个长度。稍后我可能会转向使用xml,但是有没有一种方法可以通过不使用xml来固定长度?我建议添加autolength参数或手动指定长度。
CALL set "files=%%files%% "%%i""
melt 131.jpg length=100 132.jpg length=100 133.jpg length=100