Преобразование изображений RGB в видео без потерь с помощью avconv / ffmpeg
5683
despens
Я пытаюсь преобразовать серию изображений PNG24, содержащих анимацию экрана, в видео без потерь, чтобы каждый пиксель воспроизводился точно так, как это было в оригинале. Но avconv (и ffmpeg) дают одинаковые, неудовлетворительные результаты, которые, по-видимому, происходят из-за неправильного преобразования в космическом пространстве.
Это версия avconv, которую я использую:
avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers built on Apr 2 2013 17:02:36 with gcc 4.6.3
Каждое из изображений имеет размер 1280 × 800 пикселей. Они не содержат каких-либо фотографических мотивов, а имеют специально размытые узоры.
Я использовал qtrleкодек, потому что, по-видимому, это кодек без потерь, который очень похож на анимированные GIF или анимированные PNG. Однако во время преобразования в видео, кажется, происходит преобразование цветового пространства («фильтр»), которое портится с пикселями.
Обратите внимание, что вам нужно видеть эти изображения в их оригинальном разрешении 1280 × 800, чтобы заметить различия.
Вот параллельное сравнение, при этом левая картинка является исходной, а правая - исходом после кодирования видео:
Можно ли как-нибудь создать действительно качественный видеофайл без потерь из серии PNG?
Интересно. Ваш входной файл отображается как `bgra`, а для меня (в` ffmpeg`) - как `rgba`. В любом случае, вы можете попробовать вместо этого установить вывод `-pix_fmt argb`?
slhck 11 лет назад
0
Я попробовал argb, результат выглядит точно так же, как и раньше.
11 лет назад
0
Привет @slhck, начиная с твоего комментария я пытался изменить формат PNG, чтобы не требовался автоматический фильтр. Я использовал опцию `-flatten + matte` в ImageMagick, чтобы получить настоящие png-файлы RGB24. Результатом было то, что ** ни один фильтр не был «автоматически вставлен» **, но результат все равно был неправильным. Теперь мне интересно, как изменить кодировщик 'encoder': Lavf53.21.1`?
11 лет назад
0
Кодировщик - это в основном то, что встроено в `avconv` (или` ffmpeg`, если вы используете FFmpeg). Вы можете изменить его, только используя более свежую версию. Насколько мне известно, Libav не предлагает сборки `avconv`, так что вам придется собираться самостоятельно. Или загрузите статическую сборку `ffmpeg` со [их страницы загрузки] (http://ffmpeg.org/download.html). Обратите внимание на разницу между Libav и FFmpeg: [Кто подскажет разницу и соотношение между ffmpeg, libav и avconv] (http://stackoverflow.com/questions/9477115/who-can-tell-me-the-difference и-отношение между ними-FFmpeg-libav-и-avconv)
slhck 11 лет назад
0
При этом, если вы можете воспроизвести это в недавней сборке, рассмотрите возможность отправки отчета об ошибке в FFmpeg или Libav, если у вас есть сильное ощущение, что преобразование цветов не является точным (даже если так и должно быть).
slhck 11 лет назад
0
2 ответа на вопрос
2
despens
С помощью участника ffmpeg выяснилось, что и ffmpeg, и libav создают безупречные файлы Quicktime без потерь. Похоже, проблема заключается в том, что драйвер видеокарты неправильно отображает видео (так как плееры на базе GStream и VLC отображают его неправильно, однако VLC экспортирует идеальные PNG видеокадров). Если вы хотите проверить, действительно ли видео содержит кадры попиксельно, попробуйте использовать
Для визуального сравнения преобразуйте видео без потерь обратно в отдельные кадры и сравните их.
в зависимости от кодеков вам может понадобиться использовать `-pix_fmt` для crc / md5 того же расположения декодированных без потерь данных. Например, декодер ffmpeg RGB h.264 выводит планарный RGB в формате, который ffmpeg вызывает `gbrp`.
Peter Cordes 9 лет назад
0