了解MLT熔体混合器的亮度混合(渐变)持续时间吗?

时间:2019-01-18 20:33:48

标签: video-editing mlt

Understanding/controlling MLT melt slideshow?相关,我试图了解Melt的亮度混合器是如何工作的,尤其是在持续时间短(帧数少)的情况下。

例如,如果我使用类似规格tmppics/pic_01.jpg length=6 -mix 2 -mixer luma的东西,我本应期望pic_01出现2帧淡入淡出,然后pic_01充满2帧,然后再出现2帧淡入淡出-但是,我都经历了结果像这样,那些不是。

为澄清这一点,我开发了一个bash脚本,该脚本使用ImageMagick convert生成测试图像,然后使用melt进行带有这些图像淡入淡出的“幻灯片”,{{1 }},将其转换为动画的.gif,然后将ImageMagick ffmpegconvert转换为视频.gif(Ubuntu 18.04,melt 6.6.0,ffmpeg版本3.4)的胶片(雪碧片)。 4-0ubuntu0.18.04.1,ImageMagick 6.9.7-4 Q16 x86_64 20170114)。

这是bash脚本montage

melt-test-strip.sh

因此,如果调用#!/usr/bin/env bash FRAMERATE=25 echo " description=DV PAL frame_rate_num=$FRAMERATE 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 2160x3840 -pointsize 200 -gravity center label:"Test B" tmppics/pic_02.jpg if [ -z "$IMGDURATIONF" ]; then IMGDURATIONF=6 # picture duration, frames fi if [ -z "$FADEDURATIONF" ]; then FADEDURATIONF=2 # single-end fade duration, frames fi melt -verbose -profile ./my-melt.profile \ tmppics/pic_01.jpg length=$IMGDURATIONF \ tmppics/pic_02.jpg length=$IMGDURATIONF -mix $FADEDURATIONF -mixer luma \ colour:black length=$IMGDURATIONF -mix $FADEDURATIONF -mixer luma \ -consumer avformat:meltout.mp4 vcodec=libx264 an=1 # auxiliary: just for creating sprite sheet/film strip: melt -verbose -profile ./my-melt.profile tmppics/pic_01.jpg length=$IMGDURATIONF -consumer avformat:meltout-01.mp4 vcodec=libx264 an=1 melt -verbose -profile ./my-melt.profile tmppics/pic_02.jpg length=$IMGDURATIONF -consumer avformat:meltout-02.mp4 vcodec=libx264 an=1 melt -verbose -profile ./my-melt.profile colour:black length=$IMGDURATIONF -consumer avformat:meltout-b.mp4 vcodec=libx264 an=1 # convert to gif to obtain sprite sheet/film strip from: ffmpeg \ -i meltout.mp4 \ -r 25 \ -vf scale=256:-1 \ -y meltout.gif # auxiliary: just for creating sprite sheet/film strip: ffmpeg -i meltout-01.mp4 -r $FRAMERATE -vf scale=256:-1 -y meltout-01.gif ffmpeg -i meltout-02.mp4 -r $FRAMERATE -vf scale=256:-1 -y meltout-02.gif ffmpeg -i meltout-b.mp4 -r $FRAMERATE -vf scale=256:-1 -y meltout-b.gif convert meltout.gif -coalesce meltoutc.gif convert meltout-01.gif -coalesce meltoutc-01.gif convert meltout-02.gif -coalesce meltoutc-02.gif convert meltout-b.gif -coalesce meltoutc-b.gif FRAMETHICK=5 #~ montage temp.gif -tile x1 -geometry '1x1+0+0<' -border 5 -bordercolor "rgb(200, 200, 200)" -label 'Image' -quality 100 meltout.png # "%p index of image in current image list" is "t=> index of current image (s) in list" in fx: montage -label 'Frame %[fx:t+1]/%n' meltoutc.gif -tile x1 -geometry '1x1+0+0<' -frame $FRAMETHICK -bordercolor "rgb(200, 200, 200)" -quality 100 meltout.png # here from the .gif - otherwise for replicating images: montage in.jpg +clone +clone +clone -tile x4 -geometry +0+0 out.jpg montage -label 'Frame %[fx:t+1]/%n' meltoutc-01.gif -tile x1 -geometry '1x1+0+0<' -frame $FRAMETHICK -bordercolor "rgb(200, 200, 200)" -quality 100 meltout-01.png montage -label 'Frame %[fx:t+1]/%n' meltoutc-02.gif -tile x1 -geometry '1x1+0+0<' -frame $FRAMETHICK -bordercolor "rgb(200, 200, 200)" -quality 100 meltout-02.png montage -label 'Frame %[fx:t+1]/%n' meltoutc-b.gif -tile x1 -geometry '1x1+0+0<' -frame $FRAMETHICK -bordercolor "rgb(200, 200, 200)" -quality 100 meltout-b.png # for offsetting: # (gif) frame width/height fw=$(convert meltoutc-01.gif[0] -format "%w" info:) fh=$(convert meltoutc-01.gif[0] -format "%w" info:) # strip width/height sw=$(convert meltout.png -format "%w" info:) sh=$(convert meltout.png -format "%h" info:) echo fw $fw fh $fh sw $sw sh $sh convert -size $(( (IMGDURATIONF-FADEDURATIONF)*(fw+2*FRAMETHICK) ))x$sh xc:white meltout-02.png +append meltout-02B.png # IMGDURATIONF-FADEDURATIONF to get to the start of second clip; +IMGDURATIONF from there to get to end of second clip, and -FADEDURATIONF from there to get to start of third clip convert -size $(( (IMGDURATIONF-FADEDURATIONF+IMGDURATIONF-FADEDURATIONF)*(fw+2*FRAMETHICK) ))x$sh xc:white meltout-b.png +append meltout-bB.png montage -geometry '+0+0' meltout.png meltout-01.png meltout-02B.png meltout-bB.png -tile 1x meltout-all.png eog meltout-all.png ,则会得到默认值IMGDURATIONF = 6和FADEDURATIONF = 2,其默认值为:(单击以获取完整尺寸):

meltout-all.png.01

亮度混合结果(在顶部)对我有意义的唯一方法是,如果新剪辑的起始帧以0%的比例参与混合-这就是为什么对于第二个图像剪辑,我们观察到1帧渐变+ 3帧完整+ 1帧渐变(而不是2帧渐变+ 2帧完整+ 2帧渐变,这是我所期望的)。

这正确吗?

阅读https://www.mltframework.org/docs/melt/#mixes时,我真的无法确定这种解释是否正确。

如果我使用其他参数(例如bash melt-test-strip.sh)运行脚本,则输出为:

meltout-all.png.01

...在这种情况下,解释成立(如果每个新剪辑的第一帧以0%的比例参与混合,这说明了为什么我们看到2帧淡入淡出+ 3帧饱满+第二个剪辑淡出2帧=帧,而不是请求的8个帧)-但现在我不确定这是否只是我的脚本的伪像(与IMGDURATIONF=8 FADEDURATIONF=3 bash melt-test-strip.sh s混合的真实行为相反)。

任何人都可以确认melt的混音器是如何工作的吗?否则,请解释如何理解它?

0 个答案:

没有答案