Я попытался использовать FFMPEG для преобразования одного изображения 640x480 (в моем случае, PNG-изображения 8bpp, хотя мне, вероятно, придется делать это с другими типами и качествами изображений) в 10-секундный файл XVID AVI без звуковой дорожки. Я запускаю это на более старом, специализированном видео петлителе, который требует XVID AVI. Он утверждает, что имеет 16-битную глубину цвета на VGA-дисплее (640 x 480). Да, мы не говорим о высоких или новых технологиях. Это "о, вы знаете о компьютерах?Проект для друга.

Я не эксперт FFMPEG или даже обычный пользователь. Я ломаю это каждые 6-9 месяцев, чтобы напасть на какую-то странную проблему, подобную этой, которая встает у меня на пути.

В идеале я создаю видео слайд-шоу. Но различные попытки, которые я пробовал, приводят к AVI-файлам, которые либо "блокируются" при воспроизведении, либо заканчиваются "мигающими" участками, где какой-то небольшой раздел меняет цвет по мере воспроизведения видео.

Я попытался преобразовать выходные файлы в 1 кадр / с, и я попытался создать 10 копий входного файла с последовательными именами и создать 1 кадр в секунду (и пробовал от 3 до 5 кадров в секунду в качестве эксперимента) из списка последовательных файлов.

Я попытался увеличить скорость передачи видео -b:v 1000K, и это помогает. Я пробовал -b:v 2000k, и это помогает некоторым, но не сильно.

Я пытаюсь ограничить выходную частоту кадров, потому что, как только изображение показано, оно действительно не должно сильно измениться. Если я позволю FFMPEG использовать его значения по умолчанию, я получу довольно большое видео с частотой 25 кадров в секунду, и, честно говоря, качество не намного лучше - я все еще получаю "мигающие" разделы.

Я попробовал однопроходное и двухпроходное кодирование на основе некоторых примеров, которые я нашел через Google и этот сайт. Двухходовой кажется немного лучше, но это субъективно.

Есть ли какой-нибудь способ заставить FFMPEG сделать копию входного изображения очень высокого качества изначально, а затем что-то вроде "побережья", потому что оно не меняется?

За запрос для командной строки пробовал:

Чтобы преобразовать изображение JPG размером 640x480 73KB (для Irfanview, 24 бита, 34849 уникальных цветов)

ffmpeg.exe -f image2 -loop 1 -t 10 -i lion3.jpg -s 640x480 -aspect 4:3 -r 1 -vcodec libxvid -b:v 1000k  lion3_jpg_dr1000k_r01.avi

Качество довольно хорошее, и размер файла достигает 100 КБ.

Если я сохраню файл в формате GIF (8bpp, 254 уникальных цвета, размер файла 214 КБ) и только в одном кадре, я попробую следующее преобразование:

ffmpeg.exe -r 1/10 -i lion3.gif -s 640x480 -aspect 4:3 -r 1  -vcodec libxvid -b:v 1000k -vsync cfr lion3_gif_dr1000k_r01.avi

Команда JPG не работала на GIF (я думаю, это не удивительно), и параметры в приведенном выше были собраны воедино из ряда примеров, найденных в Интернете.

Результирующий AVI преобразования GIF имеет кучу "мерцающих" блоков в частях фона - в течение 10 секунд, которые видео показывает на экране, происходят очевидные изменения.

Затем я нашел примеры объединения нескольких изображений для создания видео, поэтому я сделал десять копий изображения с добавлением от 01 до 10 и запустил

ffmpeg.exe -f image2 -framerate 1 -i image_%02d.png -c:v libxvid -vtag xvid -bf 0 -pix_fmt yuv420p -vf "fps=1" -b:v 2000K image_img_fps01_2000k_yuv420p_img2_bf0.avi

Результатом этого стали некоторые области, которые изначально были очень блочными, и со временем они немного разрешились. Но в исходном изображении эта же область представляет собой набор маленьких черных и серо-коричневых областей, возможно, 2x2 пикселя. Получающийся AVI имеет блоки, похожие на 8x8 или больше.

Надеюсь, это поможет понять, что я пытался.

0