AVAssetWriterを使用してH264movファイルを再エンコードする-フレームレートを設定する方法は?

メテ

iOSで、フレームレートを変更し、継続時間をクリップして、入力MOVファイルを再エンコードしようとしています。現時点では、AVAssetWriterでビデオプロパティを次のように設定しています。

NSMutableDictionary* compressionPropertiesDict = [NSMutableDictionary new];
compressionPropertiesDict[AVVideoProfileLevelKey] = AVVideoProfileLevelH264High40;

if(self.fps > 0) {
    compressionPropertiesDict[AVVideoAverageNonDroppableFrameRateKey] = [NSNumber numberWithInt:self.fps];


_sessionMgr.videoSettings = @
{
AVVideoCodecKey: AVVideoCodecH264,
AVVideoWidthKey: [NSNumber numberWithFloat:self.outputSize.width],
AVVideoHeightKey: [NSNumber numberWithFloat:self.outputSize.height],
AVVideoCompressionPropertiesKey: compressionPropertiesDict,
};

これは、実行時に次のようになります。

videoSettings = 
{
AVVideoCodecKey = avc1;
AVVideoCompressionPropertiesKey =     {
    AverageNonDroppableFrameRate = 15;
    ProfileLevel = "H264_High_4_0";
};
AVVideoHeightKey = 960;
AVVideoWidthKey = 640;
}

最後に、でクラッシュしNSInvalidArgumentException: "Compression property AverageNonDroppableFrameRate is not supported for video codec type avc1"ます。(シミュレーターを使用した単体テストで。)

iOSで使用できるコーデックタイプはAVVideoCodecH264 / "avc1"の1つだけAVVideoAverageNonDroppableFrameRateKeyです。そして、他のプロジェクトがを使用していることに気付きました実際、私はSDAVAssetExportSession使用しており、そのコードベースでは、このキーが明示的に使用されていることがわかります。したがって、このキーを使用してフレームレートを設定する方法があるはずだと思いました。

AVVideoMaxKeyFrameIntervalKey代わりに少し実験もしましたが、フレームレートはまったく変わりません...

要約すると、iOS AVFoundationベースのビデオ変換用に異なる(常に低い)出力フレームレートを設定するのを手伝ってくれる人はいますか?ありがとう!

メテ

質問で述べたように、私はビデオのエクスポートを容易にするためにSDAVAssetExportSessionを使用しましたフレームレートを簡単に変更できるように、いくつかの小さな変更を加えました。

主な要点はAVMutableVideoCompositionを使用してフレームレートを変更しframeDurationプロパティを目的のフレームレートに設定し、このコンポジションオブジェクトをAVAssetReaderVideoCompositionOutputトランスコーディングで使用されるオブジェクトに渡すことができることです。

SDAVAssetExportSessionのbuildDefaultVideoCompositionメソッドで、次のように変更しました。

- (AVMutableVideoComposition *)buildDefaultVideoComposition
{
  AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
  AVAssetTrack *videoTrack = [[self.asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

  // ...

  videoComposition.frameDuration = CMTimeMake(1, myDesiredFramerate);

  // ...

それがトリックでした。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Emacsでフレームフォントを設定する方法

分類Dev

Qframeのフレームの色を設定する方法は?

分類Dev

Application.targetFrameRateを使用してターゲットフレームレートを設定し、不良フレームレート(vsync)を修正する方法

分類Dev

フレームレイアウト内に画像を設定する方法

分類Dev

Puppetで設定ファイルのテンプレートを使用する方法

分類Dev

レコードをMySqlからPostgresに移行するときに、Railsでクエリのデフォルトのタイムゾーンを設定する方法、または日時値のオフセットを設定する方法

分類Dev

フロントエンドに使用するフレームワークを決定する方法は?

分類Dev

'cp'コマンドを使用して多数のファイルをサイレントコピーする方法は?

分類Dev

Google Cloud関数へのエンドポイントパスを設定する方法(サーバーレスフレームワークを使用)

分類Dev

MediaCodec、MediaExtractor、またはMediaMetadataRetrieverを使用してビデオファイルのフレームレートを決定する方法は?

分類Dev

ffmpegを使用してH.265mkvをH.264にバッチ変換し、ファイルを再エンコードと互換性のあるものにします

分類Dev

リダイレクトファイルにカスタムオーダーを設定する方法

分類Dev

tkinterフレームの透明度を設定する方法

分類Dev

Androidビームを使用してファイルを送信するためのディレクトリを設定する方法

分類Dev

Railsルートプレフィックスを設定して使用する方法

分類Dev

新しいフレームから前のフレームを呼び出す方法、再び表示するように設定する方法は?

分類Dev

ストーリーボードなしでViewControllerのフレームを設定する方法

分類Dev

GDBはリンクされたファイルにブレークポイントを設定する方法?

分類Dev

H264でエンコードされていないファイルを一覧表示する

分類Dev

rstudioで新しい「.R」ファイルのデフォルトテンプレートを設定する方法

分類Dev

データフレームでリストをマルチレベル列に設定する方法

分類Dev

ランタイム引数によって決定されるレコードフィールドを取得または設定するためのレンズ

分類Dev

Cでx264とAVCodecを使用してRGBフレームをエンコードする

分類Dev

「Encode :: from_to」または「PerlIO :: encoding」を使用してファイルを再エンコードする

分類Dev

live555を使用してH264フレームを抽出する方法

分類Dev

リーフレットで可能なズームレベルの範囲を設定する方法

分類Dev

RESTEasyクライアントフレームワークでHTTPヘッダーを設定する方法

分類Dev

$ .val()を介して設定された入力フィールドを含め、puppeteerを使用してWebサイトをスクレイプする方法は?

分類Dev

JAASレルムは内部設定ファイルをロードします

Related 関連記事

  1. 1

    Emacsでフレームフォントを設定する方法

  2. 2

    Qframeのフレームの色を設定する方法は?

  3. 3

    Application.targetFrameRateを使用してターゲットフレームレートを設定し、不良フレームレート(vsync)を修正する方法

  4. 4

    フレームレイアウト内に画像を設定する方法

  5. 5

    Puppetで設定ファイルのテンプレートを使用する方法

  6. 6

    レコードをMySqlからPostgresに移行するときに、Railsでクエリのデフォルトのタイムゾーンを設定する方法、または日時値のオフセットを設定する方法

  7. 7

    フロントエンドに使用するフレームワークを決定する方法は?

  8. 8

    'cp'コマンドを使用して多数のファイルをサイレントコピーする方法は?

  9. 9

    Google Cloud関数へのエンドポイントパスを設定する方法(サーバーレスフレームワークを使用)

  10. 10

    MediaCodec、MediaExtractor、またはMediaMetadataRetrieverを使用してビデオファイルのフレームレートを決定する方法は?

  11. 11

    ffmpegを使用してH.265mkvをH.264にバッチ変換し、ファイルを再エンコードと互換性のあるものにします

  12. 12

    リダイレクトファイルにカスタムオーダーを設定する方法

  13. 13

    tkinterフレームの透明度を設定する方法

  14. 14

    Androidビームを使用してファイルを送信するためのディレクトリを設定する方法

  15. 15

    Railsルートプレフィックスを設定して使用する方法

  16. 16

    新しいフレームから前のフレームを呼び出す方法、再び表示するように設定する方法は?

  17. 17

    ストーリーボードなしでViewControllerのフレームを設定する方法

  18. 18

    GDBはリンクされたファイルにブレークポイントを設定する方法?

  19. 19

    H264でエンコードされていないファイルを一覧表示する

  20. 20

    rstudioで新しい「.R」ファイルのデフォルトテンプレートを設定する方法

  21. 21

    データフレームでリストをマルチレベル列に設定する方法

  22. 22

    ランタイム引数によって決定されるレコードフィールドを取得または設定するためのレンズ

  23. 23

    Cでx264とAVCodecを使用してRGBフレームをエンコードする

  24. 24

    「Encode :: from_to」または「PerlIO :: encoding」を使用してファイルを再エンコードする

  25. 25

    live555を使用してH264フレームを抽出する方法

  26. 26

    リーフレットで可能なズームレベルの範囲を設定する方法

  27. 27

    RESTEasyクライアントフレームワークでHTTPヘッダーを設定する方法

  28. 28

    $ .val()を介して設定された入力フィールドを含め、puppeteerを使用してWebサイトをスクレイプする方法は?

  29. 29

    JAASレルムは内部設定ファイルをロードします

ホットタグ

アーカイブ