一部のビデオ ファイルでは、AVPacket 構造内で返される PTS タイムスタンプが 0 から開始されず、少し遅れていることに気付きました。たとえば、3.128 か何かで。私がテストしたビデオ ファイルの 99% には、0 から始まる PTS タイムスタンプがありますが、3.128 または 1.2 などで始まる奇妙なタイムスタンプを持つファイルはほとんどありません。これらのケースをどのように処理すればよいですか?最初のパケットの PTS タイムスタンプを記録し、その後のすべてのタイムスタンプ値からこの PTS を減算して、0 ベースの PTS 値を取得する必要がありますか? または、これらの非 0 ベースのタイムスタンプをどうすればよいですか? ご協力いただきありがとうございます!
1080 次
1 に答える
0
Libavcodec/avformat は、ファイル内のデータを提供しているだけです。残念なことに (または見方によっては幸いなことに)、多くのファイル形式ではタイムスタンプを 0 から開始する必要はありません。実際、複数のファイルがそれぞれ長いストリームの一部を構成し、それらを非破壊的に元に戻せるようにしたい。
0ベースのタイムスタンプが必要な場合は、あなたが言ったように、最小/最初のタイムスタンプを保存し、その値をすべてのタイムスタンプから差し引く必要があります. ただし、一部の非常に見苦しい形式 (DVD ビデオなど) では、タイムスタンプがコンテンツの途中でリセットされるのが一般的であり、これにより、アプローチで負のタイムスタンプが取得されることさえあることに注意してください。そのようなコンテンツを扱う可能性があると予想される場合は、不連続性を検出して修正する必要があります。最後に私は avcodec/avformat で作業しましたが、これを自動的に行う機能はありませんでしたが、現在はそうかもしれません。必要と思われる場合は検討いたします。
于 2012-05-13T16:57:32.117 に答える