
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)
zugeschnittene Version des Ausgabe-TIFF (zum Hochladen in PNG konvertiert)
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'