tiff 출력의 ffmpeg 색조 변화

tiff 출력의 ffmpeg 색조 변화

이 명령을 사용하여 동일한 입력 mpeg2 파일에서 tiff 및 jpeg 출력을 생성하고 있습니다.

ffmpeg -ss 14 -i '../test/test-in.mpg' -q:v 3 -vframes 1 -aspect 4:3 -vf "crop=22/23*in_w:22/23*in_h,yadif, scale=736:539,pad=736:552:0:7" '../test/test-out.jpg'

그리고

ffmpeg -ss 14 -i '../test/test-in.mpg' -vframes 1 -aspect 445:326 -vf "crop=22/23*in_w:22/23*in_h,yadif,scale=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에 의해 스냅됨)

입력 mpg의 잘린 버전

출력 tiff의 잘린 버전(업로드를 위해 png로 변환됨)

출력 tiff의 잘린 버전

답변1

문제는 tiff 이미지의 색상 공간에 있었습니다. ffmpeg는 YUV로 인코딩된 mpeg 파일의 색상 공간을 복사합니다. tiff 파일의 EXIF ​​데이터에는 YUV인 'YCbCr'인 것으로 나타났습니다.

결과 tiff 파일은 일부 응용 프로그램에서 볼 수 있었지만 다른 응용 프로그램(특히 Photoshop)에서는 파일이 깨졌다고 보고했습니다. ffmpeg의 버그인지 확실하지 않습니다. 그래서 아무런 변환 없이 imagemagick을 통해 결과를 파이핑했는데, 파일을 복구한 것 같았습니다.

그러나 imagemagick은 RGB라고 가정하고 실제로 이미지 데이터를 변경하지 않고 EXIF ​​데이터를 RGB로 설정했습니다. 그것은 색조 변화가 일어난 것입니다. 다시 말하지만, 그것이 imagemagick의 버그인지 확실하지 않습니다.

JPEG에는 문제가 없었습니다.

한 가지 적절한 해결책은 ffmpeg 명령에서 사용할 pix_fmt를 지정하는 것입니다. 보다 https://ffmpeg.org/ffmpeg.html#고급-비디오-옵션

그래서 이렇게 했습니다:

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'

관련 정보