【问题标题】:Understanding/controlling MLT melt slideshow?了解/控制 MLT 熔体幻灯片?
【发布时间】:2019-06-12 20:02:02
【问题描述】:

考虑以下 bash 脚本(在 Ubuntu 18.04 上,melt 6.6.0),它使用 melt 制作幻灯片并在本地窗口中播放(SDL 消费者),主要从 https://mltframework.org/blog/making_nice_slideshows/ 复制(编辑:我知道可以像https://superuser.com/questions/833232/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg/834035#834035 中那样单独指定文件 - 但这种方法似乎在过渡期间缩放图像,并且在 SDL 窗口中播放之前需要相当长的时间来“渲染”,而这个几乎可以即时播放):

echo "
description=DV PAL
frame_rate_num=25
frame_rate_den=1
width=720
height=576
progressive=0
sample_aspect_num=59
sample_aspect_den=54
display_aspect_num=4
display_aspect_den=3
colorspace=601
" > my-melt.profile

mkdir tmppics
convert -background lightblue -fill blue -size 3840x2160  -pointsize 200  -gravity center label:"Test A" tmppics/pic_01.jpg
convert -background lightblue -fill blue -size 3840x2160  -pointsize 200  -gravity center label:"Test B" tmppics/pic_02.jpg

melt -verbose -profile ./my-melt.profile \
./tmppics/.all.jpg ttl=6 \
-attach crop center=1 \
-filter luma cycle=6 duration=4 \
-consumer sdl
  • 当我运行上述命令时,视频显示两个图像循环,但帧计数器继续运行,无限增加。如何让它在循环长的确切帧数后停止?
  • 据我所知,输出视频的大小由配置文件控制;也就是说,即使我没有指定-profile,也会假定一个默认值;对吗?
  • 原始图像如下所示:

...视频如下所示:

...表示纵横比错误;另外我可以看到锯齿状的边缘,这意味着视频中的缩放图像没有抗锯齿。

如何通过抗锯齿/平滑处理以正确的纵横比使图像适合视频大小? (我想这与-attach crop center=1 有关,但我找不到相关文档)。

  • 在 SDL 中查看内容并逐步浏览帧时,帧编号是从 0 开始,还是从 1 开始,并且在第 0 帧处显示的只是与 1 相同的帧?

    李>
  • 如果我使用ttl=6-filter luma cycle=6 duration=4,我会得到:

... 即可见过渡从第 7 帧开始(第 6 帧为全图 A),持续第 7 帧和第 8 帧,到第 9 帧结束(即全图 B);然后在第 13 帧和第 14 帧(第 15 帧是完整图像 A)

但是,如果我使用 ttl=6-filter luma cycle=6 duration=2,那么我会得到:

...也就是说,没有过渡,图像在第 7 帧立即变化,然后在第 13 帧再次变化,依此类推。

因此,我将第一种情况称为 2 帧的过渡持续时间,将第二种情况称为 0 帧的持续时间 - 但选项分别为 duration=4duration=2。谁能解释为什么?那两帧的差异去哪儿了?

  • 我可以 - 如果可以,如何 - 做同样类型的幻灯片,除了淡入黑色?我想定义每张图像 6 帧的“生存时间”(ttl)和 4 帧的过渡,例如:

    • 首先,显示图像 A 的 4 帧;
    • 然后一帧图像 A 褪色,接着是一帧黑色(图像 A 总共 6 帧 TTL,最后 2 次过渡);
    • 然后两帧图像 B 褪色(总共 4 帧与前 2 帧过渡),然后是另外两帧图像 B 完整(所以这里是 4 帧图像 B);
    • 然后一帧图像 B 褪色,接着是一帧黑色(图像 B 相当于 6 帧 TTL);

...等等

【问题讨论】:

    标签: video-editing mlt


    【解决方案1】:

    好的,所以,我花了一些时间研究melt 的命令,结果发现实际上有一种非常有效的方法可以改变一堆图像(如果参数数量太长或字符太多)供您的终端处理)。

    您要做的是使用-serialise <name of file>.melt 来存储您的命令(您也可以手动创建此文件)。然后要执行该文件,请使用melt <name of file>.melt 以及您为视频文件提供的任何其他选项。

    示例格式:

    melt <images and what to do to them> -serialise <name of file>.melt


    示例


    创建熔解文件(使用 Melt CLI)

    melt image1.png out=50 image2.png out=75 -mix 25 -mixer luma image3.png out=75 -mix 25 -mixer luma image3.png out=75 -mix 25 -mixer luma image4.png out=75 -mix 25 -mixer luma <...> -serialise test.melt


    .melt 文件格式

    test.melt

    image1.png out=50 image2.png out=75 -mix 25 -mixer luma image3.png out=75 -mix 25 -mixer luma image3.png out=75 -mix 25 -mixer luma image4.png out=75 -mix 25 -mixer luma <...>


    运行

    melt test.melt -profile atsc_1080p_60 -consumer avformat:output.mp4 vcodec=libx264 an=1


    附加说明

    melt 文件的末尾应该有一个额外的返回字符。如果没有,则输出Exceeded maximum line length (2048) while reading a melt file.

    注意-serialise &lt;name of file&gt;.melt 不会出现在.melt 文件中

    在编码过程开始之前,Melt 实际上需要一些时间来加载 Melt 文件

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 2016-03-03
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多