2

Я пытаюсь преобразовать серию изображений 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. Однако во время преобразования в видео, кажется, происходит преобразование цветового пространства ("фильтр"), которое портится с пикселями.

Это вывод avconv:

$ avconv -f image2 -r 30 -i frames.png/wth-%08d.png -vcodec qtrle -pix_fmt rgb24 -t 15 qtrle-30fps-rgb.mov
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
Input #0, image2, from 'frames.png/wth-%08d.png':
  Duration: 00:11:17.96, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: png, bgra, 1280x800, 30 fps, 30 tbr, 30 tbn, 30 tbc
File 'qtrle-30fps-rgb.mov' already exists. Overwrite ? [y/N] y
[buffer @ 0x740a00] w:1280 h:800 pixfmt:bgra
[avsink @ 0x742ac0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x743680] w:1280 h:800 fmt:bgra -> w:1280 h:800 fmt:rgb24 flags:0x4
Output #0, mov, to 'qtrle-30fps-rgb.mov':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: qtrle, rgb24, 1280x800, q=2-31, 200 kb/s, 30 tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> qtrle)
Press ctrl-c to stop encoding
frame=  450 fps= 22 q=0.0 Lsize=  126056kB time=15.00 bitrate=68843.4kbits/s    
video:126052kB audio:0kB global headers:0kB muxing overhead 0.003441%

Это оригинальный файл изображения PNG:

Это скриншот воспроизводимого видео:

Снимок экрана воспроизводимого видео

Обратите внимание, что вам нужно видеть эти изображения в их оригинальном разрешении 1280 × 800, чтобы заметить различия.

Вот параллельное сравнение, при этом левая картинка является исходной, а правая - результатом после кодирования видео:

Можно ли как-нибудь создать действительно качественный видеофайл без потерь из серии PNG?

2 ответа2

2

С помощью участника ffmpeg выяснилось, что и ffmpeg, и libav создают безупречные файлы Quicktime без потерь. Похоже, проблема заключается в том, что драйвер видеокарты неправильно отображает видео (поскольку плееры на базе GStream и VLC отображают его неправильно, однако VLC экспортирует отличные PNG видеокадров). Если вы хотите проверить, действительно ли видео содержит кадры попиксельно, попробуйте использовать

$ ffmpeg -i input.png -vcodec qtrle out.mov

$ ffmpeg -i input.png -f framecrc -
$ ffmpeg -i out.mov -f framecrc -

Это выведет контрольные суммы данных кадра.

Для визуального сравнения преобразуйте видео без потерь обратно в отдельные кадры и сравните их.

0

Я опубликовал длинный ответ на вопрос:Как создать несжатый AVI из серии изображений PNG с тысячами, используя FFMPEG

vcodec libx264rgb с -preset ultrafast -qp 0 или utvideo .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .