mudança de matiz ffmpeg na saída tiff

mudança de matiz ffmpeg na saída tiff

Estou usando esses comandos para gerar saída tiff e jpeg do mesmo arquivo mpeg2 de entrada

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, escala=736:539,pad=736:552:0:7" '../test/test-out.jpg'

e

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'

os tiffs são muito roxos/rosados. os jpegs estão ok.

P: o que pode estar causando a mudança de cor na saída tiff e como posso evitá-la?

A saída da linha 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%

versão recortada de mpg de entrada (capturada por vlc)

versão recortada de mpg de entrada

versão recortada do tiff de saída (convertido em png para upload)

versão recortada do tiff de saída

Responder1

O problema estava no espaço de cores da imagem tiff. ffmpeg copia o espaço de cores do arquivo mpeg, que foi codificado em YUV. os dados exif do arquivo tiff mostraram que era 'YCbCr', que é YUV.

O arquivo tiff resultante pode ser visualizado por alguns aplicativos, mas outros aplicativos (principalmente o Photoshop) relataram que ele estava quebrado. Não tenho certeza se isso é um bug no ffmpeg. Então canalizei o resultado através do imagemagick sem nenhuma transformação, o que pareceu reparar o arquivo.

No entanto, o imagemagick presumia que era RGB e definia os dados exif como RGB sem realmente alterar os dados da imagem. É aí que acontece a mudança de matiz. Novamente, não tenho certeza se isso é um bug no imagemagick.

jpeg não teve nenhum problema.

Uma solução adequada é especificar, no comando ffmpeg, o pix_fmt a ser usado. Ver https://ffmpeg.org/ffmpeg.html#Advanced-Video-options

Então foi isso:

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'

informação relacionada