ウェブカメラから録画しています。カメラは PhotoBooth で見栄えがします。ただし、プログラムで QTCaptureView を使用してプレビューしたり、ファイルに記録したりすると、非常に遅くなります。その理由は、QuickTime が 1600x1200 の最大解像度を提供しているためです。QTCaptureView とファイルへの記録の両方に、より適切なサイズを強制するにはどうすればよいですか?
3 に答える
here で説明されているように、QTCaptureSession からの出力内のピクセル バッファー属性を設定して、キャプチャされるビデオの解像度を変更できます。例えば:
[[[myCaptureSession outputs] objectAtIndex:0] setPixelBufferAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:480], kCVPixelBufferHeightKey,
[NSNumber numberWithInt:640], kCVPixelBufferWidthKey, nil]];
キャプチャ セッションの最初の出力のビデオ解像度を 640x480 に設定します。これにより、カメラ設定自体も調整され、そのサイズの画像フレームが返されるようになります (カメラ ハードウェアでサポートされている場合)。
h.264 の代わりにベース MPEG4 エンコーディングを使用して、リアルタイムのビデオ録画を行うこともできます。これは、次のようなコードを使用して設定できます。
NSArray *outputConnections = [mCaptureMovieFileOutput connections];
QTCaptureConnection *connection;
for (connection in outputConnections)
{
if ([[connection mediaType] isEqualToString:QTMediaTypeVideo])
[mCaptureMovieFileOutput setCompressionOptions:[QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsSD480SizeMPEG4Video"] forConnection:connection];
}
h.264 エンコーディング、特に Quicktime の実装では、ベースの MPEG4 よりもはるかに多くの CPU パワーを使用してエンコードします。
上記の解決策(setPixelBufferAttributes :)はプレビューサイズを正しく設定しますが、ムービーの記録が開始されると、(ほぼ)圧縮オプションを設定した場合、プレビュー画像は元の値(MBPでは1280 x 1024)に戻ります。 。
それが映画の録画中だけだった場合、それは1つのことですが、録画が完了すると、setPixelBufferAttributesをそれ以上呼び出しても効果はありません。
したがって、実際に圧縮されたムービーを記録する予定がない限り、プレビュー画像のサイズを変更できます。
これは10.5.8/9L30、GeForce8600Mを搭載したMBPにあります。上記のように、圧縮なしまたはQTCompressionOptionsSD240SizeH264Videoブレークを除くすべての圧縮オプション。
rdar:// 7447812
トピックに関する詳細情報を追加するには:
キャプチャ側で定義を直接指定することはできません。むしろ、これは定義を定義するキャプチャ セッションの出力です。例えば
- QtCaptureDecompressedVideoOutput にキャプチャする場合は、このオブジェクトの定義を指定する必要があります。