смещение оттенка ffmpeg в выводе tiff

1243
commonpike

Я использую эти команды для генерации вывода TIFF и JPEG из одного и того же входного файла MPEG2

ffmpeg -ss 14 -i '../test/test-in.mpg' -q: v 3 -vframes 1-аспект 4: 3 -vf "обрезать = 22/23 * in_w: 22/23 * in_h, yadif, масштаб = 736: 539, колодка = 736: 552: 0: 7 "" ../test/test-out.jpg '

а также

ffmpeg -ss 14 -i '../test/test-in.mpg' -vframes 1-аспект 445: 326 -vf "кадрирование = 22/23 * in_w: 22/23 * in_h, yadif, масштаб = 720: 527 "../unit-test/out.tiff '

чулки очень фиолетовые / розоватые. JPEG вроде нормально.

Q: что может быть причиной смещения цвета на выходе TIFF, и как я могу предотвратить это?

Вывод командной строки

ffmpeg -ss 15 -i '../test/test.mpg' -vframes 1 -aspect 4:3 -vf "crop=21/23*in_w:21/23*in_h ,yadif,scale=720:540" -vstats_file /home/factory/log/20140630143715-mpg2stills.log '../test/test.tiff'   ffmpeg version 1.2.4 Copyright (c) 2000-2013 the FFmpeg developers built on Oct 26 2013 23:16:12 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5) configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid libavutil 52. 18.100 / 52. 18.100 libavcodec 54. 92.100 / 54. 92.100 libavformat 54. 63.104 / 54. 63.104 libavdevice 54. 3.103 / 54. 3.103 libavfilter 3. 42.103 / 3. 42.103 libswscale 2. 2.100 / 2. 2.100 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 [mpeg @ 0xa4a1440] max_analyze_duration 5000000 reached at 5016000 microseconds Input #0, mpeg, from '../test/test.mpg': Duration: 00:00:30.62, start: 0.384000, bitrate: 7746 kb/s Stream #0:0[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16p, 384 kb/s Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [SAR 16:15 DAR 4:3], 25 fps, 25 tbr, 90k tbn, 50 tbc Output #0, image2, to '../test/test.tiff': Metadata: encoder : Lavf54.63.104 Stream #0:0: Video: tiff, yuv420p, 720x540 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 25 tbc Stream mapping: Stream #0:1 -> #0:0 (mpeg2video -> tiff) Press [q] to stop, [?] for help [mpeg2video @ 0xa4a3060] warning: first frame is no keyframe frame= 1 fps=0.0 q=0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A  video:563kB audio:0kB subtitle:0 global headers:0kB muxing overhead -100.003817% 

обрезанная версия ввода mpg (привязана vlc)

cropped version of input mpg

обрезанная версия выходного TIFF (преобразуется в PNG для загрузки)

cropped version of output tiff

0
Это может быть ошибка. Можете ли вы попробовать еще раз с более свежей версией? Вы можете загрузить статическую сборку с http://ffmpeg.org/download.html slhck 10 лет назад 0
Это не так просто, как его установка. Я бы попробовал, если бы я действительно поверил, что это ошибка :-) Можете ли вы отослать мне то, что заставляет вас так думать? Вы видели это раньше или читали об этом? commonpike 10 лет назад 0
Статические сборки могут быть запущены напрямую без какой-либо конкретной установки. Вы просто запускаете файл прямо из каталога загрузки. Он не перезаписывает существующие установки и не вызывает проблем с совместимостью. Опыт подсказывает мне, что * многие * проблемы ffmpeg решаются простым обновлением до последней версии. Это не было бы [в первый раз была ошибка с тонированным выводом] (http://trac.ffmpeg.org/ticket/2793). Если последняя версия тоже не работает, то нам все равно нужно подать отчет об ошибке. slhck 10 лет назад 0
Hmok. Это не тонированное, хотя, его сместили. commonpike 10 лет назад 0
Я не говорил, что это точно такая же проблема. Просто такие проблемы с преобразованием цветов могут возникнуть. slhck 10 лет назад 0
Последняя статическая сборка имеет ту же проблему. Не уверен, если я должен представить сообщение об ошибке. Смотрите ответ ниже. commonpike 10 лет назад 0

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

1
commonpike

The problem was in the color space of the tiff image. ffmpeg copies the color space from the mpeg file, which was YUV encoded. exif data of the tiff file showed it was 'YCbCr', which is YUV.

The resulting tiff file could be viewed by some applications, but other applications (notably, photoshop) reported it broken. Not sure if that is a bug in ffmpeg. So I piped the result through imagemagick without any transformation, which seemed to repair the file.

However, imagemagick was assuming it was RGB, and set the exif data to RGB without actually changing the image data. Thats were the hue shift happens. Again, not sure if that is a bug in imagemagick.

jpeg had neither problems.

One proper solution is to specify, in the ffmpeg command, the pix_fmt to use. See https://ffmpeg.org/ffmpeg.html#Advanced-Video-options

So this did it:

ffmpeg -ss 14 -i '../test/test-in.mpg' -vframes 1 -aspect 445:326 -pix_fmt rgb24 -vf "crop=22/23*in_w:22/23*in_h,yadif,scale=720:527" '../unit-test/out.tiff' 

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