Как преобразовать одно изображение в 10-секундный файл AVI с помощью ffmpeg с высоким качеством и небольшим размером файла?

310
GuyWithDogs

Я попытался использовать 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
Поделитесь полной командой. Gyan 5 лет назад 0
Обновленный оригинальный пост с некоторыми примерами команд, которые я пробовал, с описанием результатов. GuyWithDogs 5 лет назад 1

0 ответов на вопрос

Похожие вопросы