Это использует ffmpeg версии 3.4.4-0ubuntu0.18.04.1 в Ubuntu 18.04.
Я хотел бы добиться того же, что и в разделе « Создание видео с 5 изображениями с эффектом fadeIn/out» в ffmpeg (в основном "Dip to black", хотя я бы тоже хотел узнать о "Crossfade") - однако у меня много файлов , и предпочел бы использовать абсолютные пути, и я боюсь, что я столкнусь с некоторыми ограничениями командной строки, если я перечислю каждый файл в командной строке.
Итак, я нашел это (то же самое отмечено на слайд-шоу ffmpeg с crossfade ):
... который упоминает:
"A" - это длительность в секундах, показывающая, как долго показывается каждое изображение (без продолжительности перехода), а "B" - длительность перехода в секундах.
ffmpeg -i IMG_%3d.jpg -vf zoompan=d=(A+B)/B:fps=1/B,framerate=25:interp_start=0:interp_end=255:scene=100 -c:v mpeg4 -maxrate 5M -q:v 2 out.mp4
Итак, у меня есть эти изображения:
$ ls /path/to/test_*.jpg | wc -l
249
Я бы хотел, чтобы частота кадров составляла 25 кадров в секунду, длительность каждого изображения без затухания: четверть секунды, 0,25 секунды (т.е. 6,25 кадра или с плавающей точкой, 6 кадров), а длительность затухания - 4 кадра (то есть 0,16 секунды при 25 кадрах в секунду). Так что я бы ожидал, по крайней мере, 249 * (6+4) = 2490 кадров или 99,6 с при 25 кадрах в секунду.
Это формат изображений (с камеры телефона):
$ mediainfo /path/to/test_IMG_11a.jpg
General
Complete name : /path/to/test_IMG_11a.jpg
Format : JPEG
File size : 1 001 KiB
Image
Format : JPEG
Width : 3 840 pixels
Height : 2 160 pixels
Color space : YUV
Chroma subsampling : 4:2:2
Bit depth : 8 bits
Compression mode : Lossy
Stream size : 1 001 KiB (100%)
Итак, я пытаюсь эту командную строку:
ffmpeg -an -f image2 -pattern_type glob -i '/path/to/test_*.jpg' \
-vf 'fps=25,zoompan=d=(0.25+0.16)/0.16:fps=1/0.16,framerate=25:interp_start=0:interp_end=255:scene=100' \
-vcodec libx264 -pix_fmt yuv420p -profile:v baseline -level 3 \
-y out.mp4
Это приводит к двум проблемам:
Первая проблема:
[swscaler @ 0x5582a63a4500] deprecated pixel format used, make sure you did set range correctly
Last message repeated 3 times
Хотя я не называю масштабирование напрямую, очевидно, это подразумевается, потому что я вижу в https://trac.ffmpeg.org/wiki/colorspace:
YUV-to-RGB или масштабирование требует swscale.
В сообщении https://stackoverflow.com/questions/43038294/im-getting-error-deprecated-pixel-format-used-make-sure-you-did-set-range-corr отмечается, что это предупреждение можно игнорировать. Тем не менее, я хотел бы сделать это правильно; Я обнаружил:
Но если вы используете swscale, вам также нужно установить диапазон самостоятельно, иначе результат будет неверным.
- Преобразование yuvj420p в yuv420p - проблемы с уровнями черного? : ffmpeg с "решенным" примером, использующим цветовое пространство
... но я не знаю, как указать цветовое пространство для моих изображений
Вторая проблема: не уверен, связана ли она с первой проблемой, но выводимое видео в результате выполнения вышеуказанной команды останавливается на frame = 421 - и я вижу, что большинство моих 249 изображений не закодированы! Vlc видит примерно 16 секунд в выводимом видео - намного ниже 2490 кадров, или 99,6 секунд, что я ожидаю.
Итак, каков правильный вызов командной строки, чтобы получить слайд-шоу из последовательности изображений с затуханием, без предупреждений об устаревании и со всеми закодированными изображениями?