ffmpeg Farbtonverschiebung in der TIFF-Ausgabe

ffmpeg Farbtonverschiebung in der TIFF-Ausgabe

Ich verwende diese Befehle, um TIFF- und JPEG-Ausgaben aus derselben MPEG2-Eingabedatei zu generieren

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'

Und

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'

die TIFFs sind sehr violett/rosa. Die JPEGs sind einigermaßen ok.

F: Was kann die Farbverschiebung in der TIFF-Ausgabe verursachen und wie kann ich sie verhindern?

Die Kommandozeilenausgabe

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%

zugeschnittene Version der Eingabe-MPG (aufgenommen mit VLC)

beschnittene Version der Eingabe-MPG

zugeschnittene Version des Ausgabe-TIFF (zum Hochladen in PNG konvertiert)

beschnittene Version des Ausgabe-TIFF

Antwort1

Das Problem lag im Farbraum des TIFF-Bildes. ffmpeg kopiert den Farbraum aus der MPEG-Datei, die YUV-kodiert war. Die Exif-Daten der TIFF-Datei zeigten, dass es sich um „YCbCr“ handelte, also um YUV.

Die resultierende TIFF-Datei konnte von einigen Anwendungen angezeigt werden, aber andere Anwendungen (insbesondere Photoshop) meldeten, dass sie beschädigt sei. Ich bin mir nicht sicher, ob das ein Fehler in ffmpeg ist. Also habe ich das Ergebnis ohne Transformation durch Imagemagick geleitet, was die Datei anscheinend repariert hat.

Imagemagick ging jedoch davon aus, dass es RGB war, und setzte die Exif-Daten auf RGB, ohne die Bilddaten tatsächlich zu ändern. Dort tritt die Farbtonverschiebung auf. Auch hier bin ich nicht sicher, ob das ein Fehler in Imagemagick ist.

jpeg hatte keine Probleme.

Eine geeignete Lösung besteht darin, im ffmpeg-Befehl das zu verwendende pix_fmt anzugeben. Siehe https://ffmpeg.org/ffmpeg.html#Advanced-Video-options

Das hat es also bewirkt:

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'

verwandte Informationen