FFMPEG сдвиг плоскости цветности по горизонтали

518
Seedmanc

Я пытаюсь обработать видео, которое я записал со своей карты захвата, и это предполагает сохранение видеокадров в виде изображений PNG в какой-то момент. Проблема в том, что FFmpeg смещает плоскости цветности ~ 2px вправо при преобразовании из YUV в RGB. Это добавляет к уже существующему сдвигу, который вводит моя карта захвата, и становится довольно заметным. Я пробовал решение sws_flags, но оно исправляет только блочность. Я также попытался перевернуть видео по горизонтали перед преобразованием в надежде, что оно изменит направление смещения, но безрезультатно.

Так что мне нужно компенсировать и смещение цветности влево. Я видел примеры использования overlay filter_complex, сдвигающего все видео, а также извлечения цветовых плоскостей с помощью lut_yuv, но я не могу понять, как сдвигать только плоскость цветности. Похоже, в фильтре смешивания нет режима «насыщенности цвета», который позволил бы мне заменить насыщенность цвета его измененной версией.

Журнал конверсий:

F:\records>ffmpeg64 -i src.avi -ss 4.5 -vframes 1 -f image2 -vcodec png -sws_fl ags accurate_rnd+full_chroma_int test.png ffmpeg version N-89073-gff8f40a630 Copyright (c) 2000-2017 the FFmpeg developers  built with gcc 7.2.0 (GCC) configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --e nable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libblur ay --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopu s --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --ena ble-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-lib x264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-z lib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-c uvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-l ibmfx libavutil 56. 0.100 / 56. 0.100 libavcodec 58. 3.102 / 58. 3.102 libavformat 58. 2.100 / 58. 2.100 libavdevice 58. 0.100 / 58. 0.100 libavfilter 7. 0.101 / 7. 0.101 libswscale 5. 0.101 / 5. 0.101 libswresample 3. 0.101 / 3. 0.101 libpostproc 55. 0.100 / 55. 0.100 [avi @ 0000000000420180] non-interleaved AVI Input #0, avi, from 'src.avi': Duration: 00:02:18.23, start: 0.000000, bitrate: 881232 kb/s Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 881325 kb/s, 60 fps, 60 tbr, 60 tbn, 60 tbc File 'test.png' already exists. Overwrite ? [y/N] y Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> png (native)) Press [q] to stop, [?] for help Output #0, image2, to 'test.png': Metadata: encoder : Lavf58.2.100 Stream #0:0: Video: png, rgb24, 1280x720, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc Metadata: encoder : Lavc58.3.102 png frame= 1 fps=0.7 q=-0.0 Lsize=N/A time=00:00:00.01 bitrate=N/A speed=0.0115x  video:274kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing o verhead: unknown 

Исходное изображение: https://i.imgur.com/IShYK77.png

Вы можете видеть, что уже есть сдвиг 2px только от формата захвата YUY2

Преобразование FFMpeg: https://i.imgur.com/ZtzcbSb.png

Теперь он в два раза больше

0
Можете ли вы показать до и после изображения? Кроме того, преобразование команды YUV-> RGB и его журнал. Gyan 6 лет назад 0
Отредактировал вопрос. Seedmanc 6 лет назад 0

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

2
Gyan

Основной метод регулировки или смещения цветности - использование geqфильтра.

ffmpeg64 -i src.avi -filter_complex  "format=yuv444p,extractplanes=y+u+v[y][u][v]; [u]geq=lum='p(X+1,Y)'[u];[v]geq=lum='p(X+1,Y)'[v]; [y][u][v]mergeplanes=0x001020:yuv444p"  -ss 4.5 -vframes 1 -f image2 -vcodec png -sws_flags accurate_rnd+full_chroma_int test.png 

Цветность увеличивается до полного размера, затем отдельные плоскости извлекаются. В geqфильтрах, применяемых к U и V извлеченным плоскостям, значение каждого пикселя берется из пикселя справа от него. Это потеряет исходные значения самого левого столбца пикселей. Наконец, исходная яркость и обработанные плоскости цветности объединяются. Используя некоторые методики проб и ошибок, вы должны быть в состоянии получить правильные смещения.

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