Cuando codifico una secuencia particular de archivos de imagen BMP a AVC/H.264, los colores se desplazan. ¿Por qué pasó esto?
Pero si convierto los BMP a PNG antes de ejecutar ffmpeg, la conversión de video parece correcta. Mi material de origen está en BMP y preferiría no convertir manualmente todo a PNG para realizar la solución.
Para el propósito de esta pregunta, tomé la secuencia de imágenes y las resumí en estos colores principales que se utilizan:
Primer intento de codificación (el blanco puro se vuelve notablemente verde):ffmpeg -i 000.bmp -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 first.mp4
Segundo intento (aún peor):ffmpeg -i 000.bmp -vf "colormatrix=bt601:bt709" -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 second.mp4
Tercer intento (demasiado brillante):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
Sin embargo, usar una versión PNG de la misma imagen de entrada funciona muy bien:ffmpeg -i 000.png -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 fourth.mp4
Estoy usando la última versión de FFmpeg Windows x86-64 (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
Para reformular mi pregunta, ¿cómo puedo convertir la secuencia de imágenes BMP en un video H.264 sin cambios de color no deseados?
Aparentemente, FFmpeg no establece correctamente los atributos de color de entrada para la entrada BMP (probablemente porque el archivo no contiene esos metadatos) y el decodificador BMP no verifica los atributos marcados manualmente. Sin embargo, podemos forzarlo usando el filtro de formato.
ffmpeg -i 000.bmp -vf format=rgb24 -pix_fmt yuv420p -vcodec libx264 -profile:v main -crf 16 first.mp4
RawBean
gian
gian
Nayuki
Nayuki
-vcodec libx264rgb -profile:v high444
(menos -pix_fmt), obtengo un video con colores perfectos sin desviación. Sin embargo, solo se puede reproducir en MPC-HC, no en Windows Explorer o Mozilla Firefox. Creo que sería bueno permanecer dentro del perfil principal de H.264.étale-cohomology
libx264rgb
vez de eso , melibx264
solucionó el problema. ¡¡Muchas gracias!!