3

考虑以下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,也会假定一个默认值;那是对的吗?
  • 原始图像如下所示:

pic01_eog

...视频如下所示:

pic01_melt

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

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

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

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

melt01-opt.gif

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

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

melt02-opt.gif

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

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

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

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

... ETC。

4

1 回答 1

1

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

您要做的是使用-serialise <name of file>.meltwhich 将存储您的命令(您也可以手动创建此文件)。然后要执行该文件,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文件中

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

于 2019-02-18T23:22:00.317 回答