問題タブ [video-toolbox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - VTCompressionSessionEncodeFrame を使用しているときに「OSStatus」がコンテキストなしで曖昧になるのを修正する方法
VTCompressionSessionEncodeFrame
いくつかの CMSampleBuffers をエンコードするために使用しようとしましたが、使用しようとすると常に次のエラーが発生します。Expression type 'OSStatus' (aka 'Int32') is ambiguous without more context
私はそれが何であるかを調べようとしましたが、成功しませんでした.ここに私が使用しているコードがあります:
var compressed = VTCompressionSessionEncodeFrame(session: vtCompressionSession, imageBuffer: imageBuff!, presentationTimeStamp: nil, duration: CMTime.invalid, frameProperties: nil, infoFlagsOut: infoFlags)
コード内の他の場所で圧縮された変数も参照しません。
すべての助けに感謝します。
swift - インスタンス メンバー x は型 y では使用できません
圧縮データをプロセスの別の部分に送信する圧縮コールバックを作成しようとしましたが、データを送信する行を配置すると、このエラーが返されます
インスタンス メンバー 'ptManager' はタイプ 'SampleHandler' では使用できません
コールバックのコードは次のとおりです。
これに対する他の解決策を見てきましたがptManager
、静的に設定すると、解決するよりも多くの問題が発生し、=
.
これに関するすべての助けをいただければ幸いです!
編集
これは、私が試した以前のコードの一部で、機能した可能性がありますが、コールバックに割り当てたときに呼び出されませんでした:
編集2:
コールバックが使用されている場所は次のとおりです。
macos - OSX で hevc_videotoolbox と ffmpeg を最適に使用する
私は ffmpeg 4.3.1 を使用してビデオを h264 から h265 に変換しています。最初は、Mac の GPU を使用して、フラグ hevc_videotoolbox で変換を高速化できることを発見して興奮しました。
私の Mac ハードウェアは、AMD Radeon Pro 5300 を搭載した第 10 世代 Intel i5 です。
私はこのコマンドを使用しています:
変換速度が 0.75x から 4x に増加し、ほぼ 500% の改善です!
しかし、その後、ファイルサイズが大きく、結果が少しあいまいであることに気付きました。次に、crfまたはプリセットを変更しても違いがないことに気付きました。ffmpegはそれらの設定を無視しているようです。機能しているように見える唯一の設定は、ビデオ ビット レート (-b:v) です。
それで、どうすればより良い結果が得られるかを調べるために、グーグルで検索し始めました。
しかし、あちこちのいくつかの投稿を除いて、私はほとんど空白になっています.
hevc_videotoolbox を使用してより良い結果を得る方法に関するドキュメントはどこで入手できますか? どの設定が機能し、どの設定が無視されているかを確認するにはどうすればよいですか?
ios - NVIDIA NVENC (Media Foundation) でエンコードされた h.264 フレームが、VideoToolbox を使用して正しくデコードされない
iPad Pro OS v14.3 でフレームをデコードしようとすると、ここで説明したのと同じ問題に直面しています ( Olivia Stork の例も使用しています)。
画像データの 25% が正しくデコードされ、残りの画像は緑色です。
iPad Pro OS v14.3 でデコードされた画像は次のようになります(画像はここで説明されているようにデコーダー コールバックで変換されて保存されているため、表示だけの問題ではありません)。
元画像はこんな感じ。
画像は Windows10 の NVIDIA NVENC (Media Foundation) でエンコードされています。
リンクで説明されているように、追加の 4 バイト NALU 開始コードのフレーム画像データを検索しましたが、SPS、PPS、および IDR 画像データに期待されるものは 3 つしかありません。
まったく同じソースからのフレームを正しくデコードできる別の Media Foundation デコーダー アプリケーションを Windows10 で実行しています。
私は問題の原因を見つけるのに何日も苦労しています..誰かアイデアはありますか?
前もって感謝します。ロブ
- 編集 2021-01-11 :
NALU タイプ 5 の IDR 画像データ ブロック内に、実際には 3 バイトの開始コード (0x000001) が 3 つ追加されていることがわかりました。
ここで説明されているように、これらの開始コードを次のデータ ブロック (ビッグ エンディアン) の長さに置き換えようとしましたが、結果は同じでした。
ここで説明されているように、エミュレーション防止バイト (0x000001 => 0x000301) も追加しようとしましたが、それでも違いはありませんでした。
誤解を招く可能性がありますが、これらの開始コードは問題とは何の関係もありません。少なくとも、画像データ ブロック内の同じ位置 (インデックス) に常に表示されるため、ランダムな画像データではありません。現在、私はアイデアを使い果たしています..何かヒントはありますか?
- 編集 2021-01-14 :
私はさらにいくつかのことを理解しました:
まったくのアイデアの欠如から、ブロックの先頭にある最後の開始コードの後に続く画像データをコピーしました (4 バイトの NALU 開始コードの直後)。元の画像の最後の 4 分の 1 がデコードされた画像の上部に表示されることを期待していましたが、驚いたことに、デコードされた画像は次のようになりました。
2 番目と 3 番目のスタート コードの後に来る画像データで同じことを試したところ、デコードされた画像は次のようになりました。画像データは正しくデコードされ、正しい位置にあります (元の画像と比較してください)。
3 バイトのスタート コードをすべて取り除いて、4 バイトのスタート コードの後に連結された画像データをコピーしても、結果は同じで、画像の 25% しかデコードされません。したがって、追加の 3 バイトの開始コードは明らかに問題ではありません。デコーダーに画像の 25% のみをデコードするように指示する設定がどこかにあるはずです。CMVideoFormatDescription にヒントを与えますが、私が見る限り、問題ないようです。
また、デコーダーがさまざまな画像データブロックを表示する場所をどのように知っているのかも疑問に思っています。画像データ内のどこかにオフセットが定義されているか、すべてのピクセルの xy 位置が何らかの方法でエンコーダーによって追加されます。
ffmpeg - FFmpeg/GStreamer - HEVC (H.265) エレメンタリー ストリームからアルファ チャネルを抽出する
アルファ (Apple VideoToolbox フレームワークから生成) を含む HEVC (H.265) エレメンタリ ストリームを生成しました。そこから、さらに処理するためにアルファ チャネルを抽出したいと考えています。
次の 2 つの方法のいずれかでアルファを処理したいと思います。
(a) 各フレームのアルファチャンネルを含む一連のグレースケール PNG/JPEG 画像
また
(b) 単一の半透明画像に合成された RGB とアルファを含むアルファ付きの一連の PNG
FFmpeg/GStreamer でこれらのいずれかを達成するにはどうすればよいですか?