了解/控制MLT融化幻灯片显示吗?

时间:2019-01-18 14:25:04

标签: video-editing mlt

请考虑以下bash脚本(在Ubuntu 18.04,melt 6.6.0上),该脚本使用melt制作幻灯片并在窗口(SDL使用者)中本地播放,主要从{ {3}}(编辑:我知道可以像https://mltframework.org/blog/making_nice_slideshows/中那样单独指定文件-但这种方法似乎可以在过渡期间缩放图像,并且需要相当长的时间才能在“ 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,也会采用默认值;正确吗?
  • 原始图像如下:

https://superuser.com/questions/833232/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg/834035#834035

...,视频看起来像这样:

pic01_eog

...这表示宽高比不正确;此外,我还能看到锯齿状的边缘,这意味着视频中缩放后的图像没有抗锯齿。

如何使用正确的宽高比和抗锯齿/平滑功能使图像适合视频大小? (我想这与-attach crop center=1有关,但是我找不到关于它的文档)。

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

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

pic01_melt

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

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

melt01-opt.gif

...即没有过渡,图像在第7帧立即更改,然后在第13帧再次更改,依此类推。

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

  • 我可以(如果可以的话)如何进行相同类型的幻灯片显示,除了淡入黑色之外?我想定义每个图像6帧的“生存时间”(ttl),以及4帧的过渡,例如:

      首先,显示图像A的4帧; 然后,一帧图像A淡入淡出,然后是一帧黑色(图像A的TTL为6帧,最后2个转换);
    • 然后两帧图像B淡入淡出(与之前的2帧之间过渡为4帧),接着又是另外两帧图像B满了(因此图像B为4帧);
    • 然后一帧图像B淡入淡出,接着一帧黑色(图像B相当于TTL的6帧);

...等等

  • 是否可以说服melt而不是使用.all.jpg来使用幻灯片选择要幻灯片播放的图像?据我在melt02-opt.gif上看到的不,但也许还有另一种方法...

1 个答案:

答案 0 :(得分:0)

好吧,所以,我花了一些时间研究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


附加说明

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

注意-serialise <name of file>.melt将不在.melt文件中

在编码过程开始之前,融解实际上会花费一些时间来加载融化文件