リリース:yuv4qt (060909) [-リリース情報-]
開発ネタ。
Yさんのraw2qt264をベースに、Objective-C/Foundation Frameworkで再構築した、セルフポート版「yuv4qt」をアップデート。(ダウンロード)
なお、ベースとなったraw2qt264のコードは、2006/01/04版のものです。raw2qt264オリジナルの部分については、Yさんが著作権を保持しますのであしからず。
主な機能
・映像データの取り込みにはffmpegを、映像データの書き出しにはApple H.264などQuickTimeコーデックを使い、movファイルに書き出すことができる、コマンドラインツールです。映像のみのムービーファイルが出来上がります。
・QuickTimeのメディアインポータ機能を使わずにすむため、例えばmpeg2ファイルやVOBファイル、「一部のAVIファイルなど」きちんとQuickTime Playerで開けないようなファイルであっても、movファイルに変換することが可能です。
主な変更点
・一応、Universal Binary化。とりあえず動くのを確認しました、レベル。
・日本語を含むパスがまともに扱えなかったバグを修正。
・フルパスでないファイル指定ではエラーしていたバグを修正。
・一部の初期値を変更。
制限事項。
この060909版は、あくまで実験版ですのであしからず。
利用可能なのは、MPEGなど(色空間がyuv420タイプのコーデック)です。DV25-NTSCはyuv411なので正しく扱えません。DVソースでなければたいていは大丈夫なはず。
※ffmpegXの中に入っているffmpegだと、yuv4mpegpipeからヘッダが取り出せないようで動きません。ppcバイナリですが、MobileHackers版を使うのをお勧めします。
//
使い方はこんな感じです。ターミナルから使います。
$ ./yuv4qt -C "./ffmpeg -i ./source.mpg -vcodec rawvideo -f yuv4mpegpipe - 2>/dev/null" ./destination.mov
$ ~/Desktop/yuv4qt/yuv4qt -q 4 -p 2 -k 30 -r 1024 -D 2 -R 1536 -C "~/Desktop/test/MobileHackers/ffmpeg -i ~/Desktop/source.mpg -vcodec rawvideo -f yuv4mpegpipe - 2>/dev/null" ~/Desktop/destination.mov
$ ~/Desktop/yuv4qt/yuv4qt -v ~/Desktop/settingVideo -C "~/Desktop/test/MobileHackers/ffmpeg -i ~/Desktop/source.mpg -vcodec rawvideo -f yuv4mpegpipe - 2>/dev/null" ~/Desktop/destination.mov
ffmpegのオプションには、さらに以下のようなものも使えます。
-deinterlace -s 640x480 -croptop 24 -cropbottom 24 -cropleft 32 -cropright 32
//
yuv4qtで使えるオプションは以下の通りです。
-V : verbose output -q quality : 0-4 (min-high); default is 2. -p passValue : 1-4 (Single/Multi pass); default is 1. -k keyRate : 5-300 (Force I-Frame); default is 0 (automatic). -r dataRate : 256-8192 (target data rate in Kbps); default is 0Kbps (automatic). -D limitSec : 1-15 (duration of hard limit in sec.); default is unspecified. -R limitRate : 256-8192 (data rate of hard limit in Kbps); default is unspecified. -c "four char codec id" : specify export video codec other than H.264. i.e. "mp4v", "SVQ3", "3IV2", etc.; default is "avc1". = H.264. -v "VideoSettingFilePath" : Video Setting File Path, created by exportConfig application. This makes ignoring options: -q -p -k -r -D -R -c. -A aspectNumerator:aspectDenominator : force video track aspect ratio; default is 1:1. i.e. "8:9" : 720x480->640x480. -C "Command" : ffmpeg command line i.e. "-C "~/Desktop/test/MobileHackers/ffmpeg -i ~/Desktop/testdata.mpg -vcodec rawvideo -f yuv4mpegpipe - 2>/dev/null" out.mov : output movie file path/file name i.e. ~/Desktop/myMovie.h264.mov
参考:
出力のログ。
$ ./yuv4qt -V -q 4 -p 2 -k 15 -r 1024 -C "./ffmpeg -i 15sec.mov -vcodec rawvideo -f yuv4mpegpipe - 2>/dev/null" ~/Desktop/output.mov
yuv4qt[1414] Launched.
yuv4qt[1414] codecType: H.264 Encoder (avc1)
yuv4qt[1414] quality : 4
yuv4qt[1414] passValue: 2 pass
yuv4qt[1414] keyRate : 15 frames
yuv4qt[1414] dataRate : 1024 Kbps
yuv4qt[1414] Command : "./ffmpeg -i 15sec.mov -vcodec rawvideo -f yuv4mpegpipe - 2>/dev/null"
yuv4qt[1414] moviePath: "/Users/takashi/Desktop/output.mov"
yuv4qt[1414] header : YUV4MPEG2 W320 H240 F30:1 Ip A0:0 C420mpeg2 XYSCSS=420MPEG2
Invalid Aspect ratio:(0,0). Ignored.
yuv4qt[1414] Count number of frames...
yuv4qt[1414] Total Frame Count:449.
yuv4qt[1414] transFormatArray = { "2vuy" }
yuv4qt[1414] Using k2vuyPixelFormat(2vuy) for transfer video format.
yuv4qt[1414] - processMultiPass
yuv4qt[1414] Pass:0 / Mode:0x16
Pass 0 passModeFlags 22 ( +2.NoSourceFrames +4.WriteToMultiPassStorage +16.NotReadyToOutputEncodedFrames )
yuv4qt[1414] Pass:1 / Mode:0x1c
Pass 1 passModeFlags 28 ( +4.WriteToMultiPassStorage +8.ReadFromMultiPassStorage +16.NotReadyToOutputEncodedFrames )
yuv4qt[1414] Pass:2 / Mode:0xc
Pass 2 passModeFlags 12 ( +4.WriteToMultiPassStorage +8.ReadFromMultiPassStorage )
yuv4qt[1414] Pass:3 / Mode:0xf
Pass 3 passModeFlags 15 ( +1.OutputEncodedFrames +2.NoSourceFrames +4.WriteToMultiPassStorage +8.ReadFromMultiPassStorage )
yuv4qt[1414] decodeDuration correction:449 0->1
yuv4qt[1414] Finished(0).
$






キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
乙です。早速使用させていただきます!
by Yoshiki (2006-09-08 21:33)
早速90分ものを二回くらいエンコードしてみましたが、いずれも結果は良好です。自分の環境だとQuickTimeのバージョンが7.1以降になってからyuv4qtもraw2qt264も調子が悪かったので、まさに救世主です。
質問なんですが、
aspectNumerator:aspectDenominator
のパラメータを後付けで変更することはできませんか?今まではQuickTimePlayerから横幅のピクセル数を変更する形で対応していたのですがどうもこっちの方がスマートなようなので…。
by Yoshiki (2006-09-09 23:17)
720x480で書き出したムービーを後からAspect比だけいじるということでしょうか?データはそのまま、表示のアスペクト比だけいじるには、QTProが必要です。
プロパティ-ビデオトラック-ビジュアル設定にある、調整後のサイズとアスペクト比を保持というところを使用します。
まず、表示メニューの実際のサイズ(Cmd+1)を選択してからプロパティを表示。チェックを外し、720x480を640x480にして、再度チェック。ムービーを上書き保存します。
これでデータ自体は720x480で持っているものの、標準の表示サイズは640x480となったムービーが出来上がります。
by MyCometG3 (2006-09-10 07:21)
ご返答、ありがとうございます。
自分も普段はその方法でアスペクト比をいじっていたのですが、それだとMPlayerで再生させた際に740x480で再生されます。「まあこんなものなんだ」とずっと思っていたのですが、yuv4qtの-Aでアスペクト比を与えてやるとMPlayerでの再生の際にも適切な解像度で表示されていたので、-Aをつけた際と同様の効果を、後付けで与えられないものかと考えていたのです。
結論から言いますと、自己解決しました。
Dumpster 713を使用し、QuickTimePlayerでアスペクト比を変更したmovファイルとyuv4qtで最初からアスペクト比を与えたmovファイルのatomを比べたところ、前者はmoov/trak/tkhdのmatrixの左上の値が1以外に変更されていたのに対し、後者はtrackWidthとtrackHeightが変更されており、後者の設定と同様の設定を前者に与えたところ、MPlayerにおいても意図した解像度で表示されるようになりました。
もっと簡単にatomのパラメータをいじれるツールがあれば良いのですが。Dumpsterではパラメータ項目の追加ができないので…。
by Yoshiki (2006-09-10 10:22)
トラックのWidthとHeight、Matrixが好きにいじれるツールが欲しいということですね。
QTKitでできなくはないかな...でもQTTrackBoundsAttributeあたりのバグを考えるとCの関数でいじった方が良さそう。うーむ。
by MyCometG3 (2006-09-10 12:57)
欲張りを言えば、あのCleanAperture関係のtaptやclapもいじれれば良いなぁと思っていたりしますw
何よりDumpsterじゃatom項目の追加ができないのが辛いところですが…。項目追加は目的外ということでしょうか。
by Yoshiki (2006-09-10 13:54)