Понимание / контроль слайд-шоу расплава MLT?
Рассмотрим следующее bash
скрипт (в Ubuntu 18.04, melt 6.6.0), который использует melt
сделать слайд-шоу и воспроизвести его локально в окне (потребитель SDL), в основном скопированном с https://mltframework.org/blog/making_nice_slideshows/ (edit: я знаю, что можно указывать файлы индивидуально, как в https://superuser.com/questions/833232/create-video-with-5-images-with-fadein-out-effect-in-ffmpeg/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=4
а также duration=2
соответственно. Кто-нибудь может объяснить почему? Куда делись эти 2 кадра?
Могу ли я - и если да, то как - сделать такое же слайд-шоу, кроме как с переходом в черный цвет? Я хотел бы определить "время жизни" (ttl) из 6 кадров на изображение и переход из 4 кадров так, чтобы:
- сначала показаны 4 кадра изображения A;
- затем одно изображение кадра A исчезло, затем один кадр черного цвета (составляющий 6 кадров TTL для изображения A, последние 2 перехода);
- затем два кадра изображения B исчезают (на 4 кадра переходят с предыдущими 2), за которыми следуют еще два кадра изображения B (так что здесь 4 кадра изображения B);
- затем одно изображение кадра В исчезает, за которым следует один черный кадр (составляющий 6 кадров TTL для изображения B);
... так далее.
- Можно ли убедить
melt
использовать сглаживание, чтобы выбрать изображения для слайд-шоу, вместо использования.all.jpg
? Насколько я могу видеть на MLT (Media Lovin' Toolkit), Photo Slide Video нет - но, возможно, есть другой подход...
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
Дополнительные примечания
В конце файла расплава должен быть дополнительный символ возврата. Если нет, Exceeded maximum line length (2048) while reading a melt file.
будет выведен
Заметить, что -serialise <name of file>.melt
не будет в .melt
файл
Фактически расплаву потребуется некоторое время для загрузки расплавленного файла перед началом процесса кодирования.