
Estoy usando estos comandos para generar salida tiff y jpeg desde el mismo archivo mpeg2 de entrada
ffmpeg -ss 14 -i '../test/test-in.mpg' -q:v 3 -vframes 1 -aspecto 4:3 -vf "crop=22/23*in_w:22/23*in_h,yadif, escala=736:539,pad=736:552:0:7" '../test/test-out.jpg'
y
ffmpeg -ss 14 -i '../test/test-in.mpg' -vframes 1 -aspecto 445:326 -vf "crop=22/23*in_w:22/23*in_h,yadif,scale=720:527 " '../prueba-unitaria/out.tiff'
los tiffs son muy morados/rosados. Los archivos JPEG están bastante bien.
P: ¿Qué puede estar causando el cambio de color en la salida tiff y cómo puedo evitarlo?
La salida de la línea de comando
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%
versión recortada de mpg de entrada (tomada por vlc)
versión recortada del tiff de salida (convertido a png para cargar)
Respuesta1
El problema estaba en el espacio de color de la imagen tiff. ffmpeg copia el espacio de color del archivo mpeg, que estaba codificado en YUV. Los datos exif del archivo tiff mostraron que era 'YCbCr', que es YUV.
Algunas aplicaciones pudieron ver el archivo tiff resultante, pero otras aplicaciones (en particular, Photoshop) informaron que estaba roto. No estoy seguro si se trata de un error en ffmpeg. Así que transmití el resultado a través de imagemagick sin ninguna transformación, lo que pareció reparar el archivo.
Sin embargo, imagemagick asumió que era RGB y configuró los datos exif en RGB sin cambiar realmente los datos de la imagen. Ahí es donde ocurre el cambio de tono. Nuevamente, no estoy seguro si se trata de un error en imagemagick.
jpeg no tuvo problemas.
Una solución adecuada es especificar, en el comando ffmpeg, el pix_fmt a utilizar. Ver https://ffmpeg.org/ffmpeg.html#Opciones-de-video-avanzadas
Entonces esto lo hizo:
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'