QuickTime Programing
最終更新:
quicktimeprogramer
-
view
raw movieをQuickTimeのH.264 codecを使って圧縮するMac用プログラム。現状ffmpegをフロントエンドに使ったコマンドラインで、パス数指定ができます。
プロジェクトファイルも入っていますので、Xcode2.2以降(インストールオプションで10.4 Universal SDKを追加)が入っていれば、プロジェクトメニューから「アクティブなビルド構成を設定=>Release 」を選んで、ワンクリックでビルド出来ます。
2006.1.21 Universal Binaryにしました。変更3カ所のみ!
2006.1.23 mplayerをfront endに使うには...
mplayerにパッチ当てちゃえ。ファイル名が"-"だったらstdoutに出す。
% raw2qt264 2 1000 "mplayer in.mpg -vo yuv4mpeg:file=-" out.mov
と思ったらmplayer、stdoutに色々出すのね。raw2qt264でrawデータ以外は捨てる様にしました。が、なぜかmplayerのraw出力は初めの2コマが緑...orz
mplayerにパッチ当てちゃえ。ファイル名が"-"だったらstdoutに出す。
% raw2qt264 2 1000 "mplayer in.mpg -vo yuv4mpeg:file=-" out.mov
と思ったらmplayer、stdoutに色々出すのね。raw2qt264でrawデータ以外は捨てる様にしました。が、なぜかmplayerのraw出力は初めの2コマが緑...orz
--- vo_yuv4mpeg.20060123.c 2006-01-23 11:14:04.000000000 +0900 +++ vo_yuv4mpeg.c 2006-01-23 11:14:25.000000000 +0900 @@ -142,7 +142,10 @@ write_bytes = image_width * image_height * 3 / 2; image = malloc(write_bytes); - yuv_out = fopen(yuv_filename, "wb"); + if(strcmp(yuv_filename, "-") != 0) + yuv_out = fopen(yuv_filename, "wb"); + else + yuv_out = stdout; if (!yuv_out || image == 0) { mp_msg(MSGT_VO,MSGL_FATAL,
2006.2.9 圧縮設定研究中
- kICMCompressionSessionOptionsPropertyID_MaxKeyFrameInterval
300固定にしてますが、デフォルトの0(automatic)なら、自動的にシーンチェンジでキーフレーム(I-frame)入れてくれてました(MovieVideoChartで確認)。
- kICMCompressionSessionOptionsPropertyID_Depth
デフォルトk24RGBPixelFormatなんですが、ソースのrawvideoが420なんでk2vuyPixelFormat(2vuy)でも情報量的にはいいハズ。で、やってみると、Codec対応しているのか、指定レートよりかなり小さくなっちゃうけど(バグ?)、HDDは稼げます。見た目も変わらん(様に見える)。
- kICMCompressionSessionOptionsPropertyID_Quality
AppleのQAによると、codecNormalQualityがデフォルトなんで、codecMaxQualityとか指定してみたが、圧縮時間も見た目も変わらず。
画質的を見るのに客観的な評価ソフトが必要ですね...
2006.3.10 Decompress Sessionで、ガンマ値を設定すれば白くならない。コマンドの引数がに必要か。
Fixed gammaLevel = kQTCCIR601VideoGammaLevel; // = 2.2 ICMImageDescriptionSetProperty(imageDesc, kQTPropertyClass_ImageDescription, kICMImageDescriptionPropertyID_GammaLevel, sizeof(gammaLevel), &gammaLevel);
コメント
- 初めの2コマが緑の件。libmpeg2 decoder delayというものがあるそうです。"-vfm ffmpeg"で回避できる可能性があります。デフォルトは"-vfm libmpeg2" -- ばる (2006-01-26 21:57:23)
- "-vfm ffmpeg"でやってみました。緑のコマは1コマに減りました...
Using (default) progressive frame mode.========================================================================== Trying to force video codec driver family ffmpeg... Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family Selected video codec: [ffmpeg2] vfm:ffmpeg (FFmpeg MPEG 2)
- QuickTimeのバージョンが7.1超えた頃からエンコード結果が変になってしまっているのですが…。 -- Yoshiki (2006-07-31 21:31:24)
- ソースによって指定サイズを守らない、って奴でしょうか?実はパス数/ビットレートを0でQTにまかせるようにしてから(リンク先は今日更新しました)、指定のテストしてないんです。 -- 名無しさん (2006-08-03 06:52:15)
- 前のバージョンでは7.1以上だとブロックノイズ状の画像破綻が断続的に発生してました。新しいバージョンだとパス指定もビットレート指定も無視されますね…。以上、遅くなりましたが報告です。 -- Yoshiki (2006-08-23 22:59:42)
使い方
% raw2qt264 Pass Kbps rawCommand outFile.mov
rawCommandはyuv4mpegpipe形式をstdoutに出す命令です。
rawCommandはyuv4mpegpipe形式をstdoutに出す命令です。
- inFile.mpgを2パス、1000KbpsでoutFile.movに変換
% raw2qt264 2 1000 "ffmpeg -i inFile.mpg -vcodec rawvideo -f yuv4mpegpipe -" outFile.mov
- ffmpegでインターレース解除,640x480にスケース,90%クロップ
% raw2qt264 2 1000 "ffmpeg -i inFile.mpg -deinterlace -s 640x480 -croptop 24 -cropbottom 24 -cropleft 32 -cropright 32 -vcodec rawvideo -f yuv4mpegpipe -" outFile.mov
メモ
- 自分でプライオリティーを下げています。
setpriority(PRIO_USER, 0, 10);
- 圧縮設定は createCompressionSession() で行っており、設定出来る項目と説明は以下にあります。
/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/QuickTime.framework/Versions/A/Headers/ImageCompression.h
の、Properties of compression sessions options objects.
の、Properties of compression sessions options objects.
- Key frame rate (Iフレーム出現間隔)は300コマ(NTSCなら10秒)に1コマに指定。
err = ICMCompressionSessionOptionsSetMaxKeyFrameInterval(sessionOptions, 300);
MaxPartialSyncFrameInterval・AllowFrameTimeChanges・DataRateLimits(Hard limit)等、興味深い設定もありますが、デフォルトのままにしています。
以下のAppleのサンプルコードを参考に作りました。
http://developer.apple.com/samplecode/CaptureAndCompressIPBMovie/CaptureAndCompressIPBMovie.html
http://developer.apple.com/samplecode/CaptureAndCompressIPBMovie/CaptureAndCompressIPBMovie.html
先日QuickTime Session APIのドキュメントも色々出てきました。
http://developer.apple.com/qa/qa2005/qa1450.html
http://developer.apple.com/qa/qa2005/qa1455.html
http://developer.apple.com/qa/qa2005/qa1460.html
http://developer.apple.com/qa/qa2005/qa1456.html
http://developer.apple.com/qa/qa2005/qa1450.html
http://developer.apple.com/qa/qa2005/qa1455.html
http://developer.apple.com/qa/qa2005/qa1460.html
http://developer.apple.com/qa/qa2005/qa1456.html
- ffmpegメモ
ffmpegでrawvideoなmovなりaviを作ったときに、QTPlayerで開けるようにするには、-vtag j420とする。
% ffmpeg -i in.mpg -acodec pcm_s16le -vcodec rawvideo -vtag j420 -deinterlace out.mov % ffmpeg -i in.mpg -acodec pcm_s16le -vcodec rawvideo -vtag j420 -deinterlace out.avi
Visitors: -