
私はこれらのコマンドを使用して、同じ入力mpeg2ファイルからtiffとjpeg出力を生成しています。
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'
そして
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'
TIFF は非常に紫/ピンクがかっています。JPEG はまあまあです。
Q: TIFF 出力で色の変化が起こる原因は何でしょうか。また、それを防ぐにはどうすればよいのでしょうか。
コマンドライン出力
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%
入力 mpg の切り抜きバージョン (vlc でスナップ)
出力 tiff のトリミングされたバージョン (アップロード用に png に変換)
答え1
問題は tiff イメージのカラー スペースにありました。ffmpeg は、YUV でエンコードされた mpeg ファイルからカラー スペースをコピーします。tiff ファイルの exif データは、YUV である「YCbCr」を示していました。
結果の tiff ファイルは一部のアプリケーションでは表示できましたが、他のアプリケーション (特に Photoshop) では壊れていると報告されました。これが ffmpeg のバグかどうかはわかりません。そこで、結果を変換せずに imagemagick にパイプしたところ、ファイルが修復されたようです。
しかし、imagemagick は RGB であると想定し、画像データを実際に変更せずに exif データを RGB に設定しました。これが色相シフトが発生する原因です。これも imagemagick のバグかどうかはわかりません。
jpeg にはどちらの問題もありませんでした。
適切な解決策の1つは、ffmpegコマンドで使用するpix_fmtを指定することです。 https://ffmpeg.org/ffmpeg.html#高度なビデオオプション
それで、これが実行されました:
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'