Wenn ich eine bestimmte Sequenz von BMP-Bilddateien in AVC/H.264 codiere, werden die Farben verschoben. Warum passiert das?
Aber wenn ich die BMPs in PNGs konvertiere, bevor ich ffmpeg ausführe, erscheint die Videokonvertierung korrekt. Mein Quellmaterial ist in BMPs und würde es vorziehen, nicht alles manuell in PNGs zu konvertieren, um die Problemumgehung durchzuführen.
Für den Zweck dieser Frage habe ich die Bildfolge genommen und sie in diesen verwendeten Hauptfarben zusammengefasst:
Erster Codierungsversuch (das reine Weiß wird merklich grün):ffmpeg -i 000.bmp -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 first.mp4
Zweiter Versuch (noch schlimmer):ffmpeg -i 000.bmp -vf "colormatrix=bt601:bt709" -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 second.mp4
Dritter Versuch (zu hell):ffmpeg -i 000.bmp -vf "scale=in_range=full:in_color_matrix=bt709:out_range=full:out_color_matrix=bt709" -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 third.mp4
Die Verwendung einer PNG-Version desselben Eingabebilds funktioniert jedoch hervorragend:ffmpeg -i 000.png -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 fourth.mp4
Ich verwende den neuesten FFmpeg Windows x86-64-Build (2016-11-22 Git d316b21):
C:\Temp> ffmpeg.exe -version
ffmpeg version N-82597-gd316b21 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2
--enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig
--enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray
--enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme
--enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264
--enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger
--enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora
--enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis
--enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
--enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma
--enable-decklink --enable-zlib
libavutil 55. 40.100 / 55. 40.100
libavcodec 57. 66.106 / 57. 66.106
libavformat 57. 58.100 / 57. 58.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 67.100 / 6. 67.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Um meine Frage neu zu formulieren, wie kann ich die Sequenz von BMP-Bildern ohne unerwünschte Farbverschiebungen in ein H.264-Video konvertieren?
Anscheinend setzt FFmpeg die Eingabefarbattribute nicht korrekt für die BMP-Eingabe (wahrscheinlich, weil die Datei diese Metadaten nicht enthält) und der BMP-Decoder prüft nicht auf manuell markierte Attribute. Wir können es jedoch mit dem Formatfilter erzwingen.
ffmpeg -i 000.bmp -vf format=rgb24 -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 first.mp4
RawBean
Gyan
Gyan
Nayuki
Nayuki
-vcodec libx264rgb -profile:v high444
) erhalte ich ein Video mit perfekten Farben ohne Abweichung. Es ist jedoch nur in MPC-HC spielbar, nicht in Windows Explorer oder Mozilla Firefox. Ich denke, es wäre gut, im H.264-Hauptprofil zu bleiben.étale-Kohomologie
libx264rgb
ausprobiert hatte, wurdelibx264
das Problem für mich behoben. Vielen Dank!!