Arhn - архитектура программирования

Понимание продолжительности смешения яркости (затухания) смесителя расплава MLT?

Относительно Понимание/управление слайд-шоу расплава MLT?, я пытаюсь понять, как плавится работа микшера яркости, особенно в контексте коротких (небольшое количество кадров) продолжительностей.

Например, если я использую что-то вроде этой спецификации tmppics/pic_01.jpg length=6 -mix 2 -mixer luma, я ожидал бы 2 кадра затухания pic_01, затем 2 кадров полного затухания pic_01, затем снова 2 кадра затухания - однако я получил как такие результаты, так и те это не так.

Чтобы прояснить это, я разработал сценарий bash, который использует ImageMagick convert для создания тестовых изображений, затем melt для создания «слайд-шоу» с переходами из этих изображений, ffmpeg для преобразования его в анимированный .gif, затем ImageMagick convert и montage для получения киноленты (листа спрайтов) видео .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, 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

Итак, если вы вызовете bash melt-test-strip.sh, вы получите значения по умолчанию, IMGDURATIONF=6 и FADEDURATIONF=2, для которых вывод будет следующим (щелкните, чтобы открыть полный размер):

meltout-all.png.01

Единственный способ, которым результат микширования яркости (вверху) имеет для меня смысл, - это если начальный кадр нового клипа участвует в миксе с 0% - поэтому для второго клипа изображения мы наблюдаем затухание 1 кадра + 3 полных кадра + 1 затухающий кадр (вместо 2 кадров затухающих + 2 полных кадра + 2 затухающих кадра, как я ожидал).

Это правильно?

Чтение https://www.mltframework.org/docs/melt/#mixes Я не могу точно сказать, верна ли эта интерпретация.

Если я запускаю скрипт с другими параметрами, например IMGDURATIONF=8 FADEDURATIONF=3 bash melt-test-strip.sh, то результат будет таким:

meltout-all.png.01

... в этом случае интерпретация верна (если каждый новый кадр первого клипа участвует в миксе с 0%, это объясняет, почему мы видим, что 2 кадра затухают + 3 кадра полных + 2 кадра затухают для второго клипа = 7 кадров всего , вместо запрошенного 8) - но теперь я не уверен, что это просто артефакт моего скрипта (в отличие от истинного поведения микса melts).

Кто-нибудь может подтвердить, так ли работает микшер melts, а если нет, то объяснить, как это можно понять?

18.01.2019

  • Просто интересовался тем же. Вы это уже разъяснили? 06.09.2019

Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..