8

AVCaptureSessionセッションプリセットを使用してビデオを録画していAVCaptureSessionPreset640x480ます。AVCaptureVideoPreviewLayer非標準サイズ (300 x 300) の を使用しており、録画中に重力をアスペクト フィルに設定しています。次のように設定されています。

self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
_previewLayer.frame = _previewView.bounds; // 300 x 300
[_previewView.layer addSublayer:_previewLayer];

ビデオを録画した後、quicktime 形式でファイルに書き込みたいと考えています。再生中に、300 x 300 の非標準サイズのレイヤーでビデオをもう一度再生しています。これらのビデオは最終的にネットワーク接続を介して転送されるため、640x480 の完全なビデオを保持するのは無駄に思えます。

300 x 300 のプレビュー レイヤーに一致するようにビデオをエクスポートする最良の方法は何ですか? 私は AVFoundation 初心者なので、間違った方法で行っている場合はお知らせください。録画中にプレビュー レイヤーに表示される録画済みビデオを、ディスクにエクスポートされたビデオと一致させたいだけです。

4

1 に答える 1

13

ビデオの解像度とビデオのサイズは 2 つの異なるものです。解像度は明瞭さを意味し、解像度が高いほど明瞭度が高くなります。一方、ビデオ サイズは、ビデオを表示する境界です。ビデオの解像度とアスペクト比に応じて、ビューアーに表示されたときにビデオが伸びたり縮んだりします。

事実が説明されたので、ここであなたの答えを見つけることができます:

AVFoundation を使用してビデオをトリミングする方法

次の順序で手順を実行します。

  1. ビデオをディスクに記録します。
  2. ディスクからアセット ライブラリに保存します。
  3. ディスクから削除します。
  4. 上記のリンクに記載されている手順を実行します。

注:saveCompositionビデオを録画して、保存されたアセットであるアセット ライブラリに書き込んだ後に、手順を実行します。

videoComposition.renderSize = CGSizeMake(320, 240);このステップでサイズを指定します。videoComposition.renderSize = CGSizeMake(300, 300);

そしてアドバイス。ファイルをディスクに書き込んでからライブラリに書き込んでから、再びディスクに戻すのは、一種の時間のかかる操作です。dispatch_queueまたはを使用して、すべて非同期で実行してみてくださいoperationBlock

乾杯、楽しんでください。

于 2013-02-11T08:42:09.337 に答える