Это использует 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, вам также нужно установить диапазон самостоятельно, иначе результат будет неверным.

... но я не знаю, как указать цветовое пространство для моих изображений


Вторая проблема: не уверен, связана ли она с первой проблемой, но выводимое видео в результате выполнения вышеуказанной команды останавливается на frame = 421 - и я вижу, что большинство моих 249 изображений не закодированы! Vlc видит примерно 16 секунд в выводимом видео - намного ниже 2490 кадров, или 99,6 секунд, что я ожидаю.


Итак, каков правильный вызов командной строки, чтобы получить слайд-шоу из последовательности изображений с затуханием, без предупреждений об устаревании и со всеми закодированными изображениями?

0