2016-06-13 9 views
3

可変フレームレートのAVAssetとそうでないAVAssetsを区別しようとしています。AVAssetTrackに可変フレームレートがあるかどうかを確認するには?

私はすべてのフレームをデコードし、フレームの長さが各フレームを変更しないことを確認できますが、これはコストがかかります。利用可能なメタデータを見て、有用なものを見つけませんでした。

どこから始めたらよいですか?

CMTime duration = [myAsset duration]; 
CMTime frameDuration = myAssetTrack.minFrameDuration; 
if(!(duration.value * frameDuration.timescale) % 
    (duration.timescale * frameDuration.value)) 
    NSLog(@"asset is constant frame rate"); 

が、これは偽陰性に最終的に影響を受けやすい:私はこれまで持っている最高のアイデアは、使用することです。より良いアプローチはありますか?

AVAssetsはビデオの最後に黒いフレームを追加して、それを正しく使用するためにタイムスタンプを変えるように見えるため、これは偽陽性になります

答えて

1

まず、自分で作成していない限り、すべてのビデオファイルのフレームレートが可変であると仮定するのが最も安全だと思います。

第2に、すべてのフレームを読むにはコストがかかりすぎますか?あなたはnil出力設定とAVAssetReader + AVAssetReaderTrackOutputを作成する場合は、フレームを読むこと *実際の減圧を引き起こすが、ファイルの光の解析の結果、そのプレゼンテーションタイムスタンプあなたは、フレームレートの恒常を決定するために調べることができるCMSampleBuffer Sを与えるべきではありません。

*私はこれを最近確認していませんが、ずっと前に私は映画ファイルのインデックスを作成する方法を検討していました。この方法はすばらしく速いと思われました。

+0

これはありがたいことですが、これは生のフレームをデコードするのにどれくらいの時間がかかるかをテストしていませんでした。私は今これをオプションとして見ています。私はいくつかのテストファイルのパフォーマンスを見ています: .mov 1920 * 800,24fps、12m14s、〜580MBはデコードに〜4秒かかります .mov 1920 * 1080,29.97fps 、43m59s、〜45GBはデコードに〜57秒かかります – alwaysmpe

+0

AVFoundationは素晴らしいです。その数に感謝します。 –

関連する問題