問題タブ [swscale]

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.

0 投票する
1 に答える
1193 参照

h.264 - カメラからの入力画像を H.264 ストリームにエンコードする方法は?

Mac OS X 10.9.5 で libx264 を使用して、MacBook Pro の内蔵 FaceTime HD カメラからの入力画像をリアルタイムで H.264 ビデオ ストリームにエンコードしようとしています。

以下は私が取ったステップです:

  1. AVFoundation API (AVCaptureDevice クラスなど) を使用して、15fps でカメラから 1280x720 32BGRA 画像を取得します。
  2. libswscale を使用して、画像を 320x180 YUV420P 形式に変換します。
  3. libx264 を使用して、画像を H.264 ビデオ ストリーム (ベースライン プロファイル) にエンコードします。

カメラから画像を取得するたびに上記の手順を適用します。エンコーダーはエンコード状態を追跡し、利用可能になったときに NAL ユニットを生成すると信じています。

エンコーダーに入力画像を提供しながらエンコードされたフレームを取得したかったので、30 フレーム (2 秒) ごとにエンコーダーをフラッシュする (x264_encoder_delayed_frames() を呼び出す) ことにしました。

ただし、エンコードを再開すると、しばらくするとエンコーダーが停止します (x264_encoder_encode() は決して戻りません)。フラッシュする前のフレーム数を変更してみましたが、状況は変わりませんでした。

以下に関連するコードを示します(画像キャプチャのコードは問題ないようなので省略します)。

私が間違っているかもしれないことを指摘できますか?

0 投票する
0 に答える
8350 参照

ffmpeg - swscaler@0dd9e620: 非推奨のピクセル形式が使用されています。範囲を正しく設定したことを確認してください"

FFMpeg で RTSP ビデオ ストリームをデコードしています。表示時 ( への呼び出しcv::imshow(...)) に、次の例外が発生します。

[swscaler @ 0d55e5c0] 非推奨のピクセル形式が使用されています。範囲を正しく設定したことを確認してください

ピクセル形式を「AV_PIX_FMT_YUVJ420P」から「AV_PIX_FMT_YUV420P」に変換しています。上記の例外がまだ発生しています。どんな助けでも大歓迎です。

0 投票する
1 に答える
1218 参照

c++ - SWScaleを使用したFFMpeg RGB32からNV12へ

RGB32 フレームを NV12 フレームに変換して、エンコーダーにフィードしようとしています。

m_outputPixelFormat AV_PIX_FMT_RGB32 を作成し、DMO 色空間コンバーターを使用すると、ビデオは正しく出力されます。ただし、NV12 に変更すると、下部にデータが欠落した斜めのビデオが表示されます。これは、バッファからデータを誤ってコピーしたことが原因であることはわかっていますが、何が間違っているのかわかりません。

0 投票する
1 に答える
916 参照

c++ - AVFrame に負の線サイズがあります

libav (MSVC 用にビルドされた 2.7) を使用して、dshow を使用してカメラを開きます。

ビデオストリームを開くと、それはフォーマットの「生のビデオ」(その によるlong_name)ですAV_PIX_FMT_BGR24。フレームが必要なAV_PIX_FMT_RGB24ので、次のように SwsContext を作成します。

次に、ループ タイマーを使用してフレームを読み取り、AVFrame にデコードします。AVFrame は、sws_scale に渡されます。

この時点の後av_picture、アプリケーションで使用しますが、sws_scaleハングしてクラッシュします。何も入っていないすべてのデータを見ると、 のラインサイズsws_scale除いて奇妙に見えます。(とは の予想どおり 0 です)。私のフレームの幅は 640 なので、1920 を期待しますが、負の符号は非常に奇妙に思えます。サインをひっくり返してみましたが、役に立ちません。毎回クラッシュするわけではないことに注意してください (一部の実行では、最初に数フレーム通過します)。av_frameav_frame->linesize[0] == -1920linesize[1]linesize[2]BGR24

ラインサイズが負になるのはなぜですか? それは何かを意味していますか、それともどういうわけか台無しにされていますか?

0 投票する
1 に答える
4835 参照

c++ - フレームをデコードして取得するためにffmpegでDXVA2を使用する方法

Windowsでffmpegを使用してH264ストリームをハードウェアアクセラレーションでデコードする方法に関する簡単な例を検索しましたが、見つかりませんでした。ハードウェアアクセラレーションを実現するには、ffmpeg で dxva2 を使用する必要があることを知っています。

投稿で提供されているサンプル プロジェクトのおかげで、CPU で ffmpeg を使用して H264 をデコードし、NV12 形式を RGBA に変換して、フレームを bmp ファイルとして保存できます。

dxva2 に関するヘルプを得るために、次の投稿で提供されている内容に従いました

dxva2 で正常にデコードできると思います。ただし、デコードされたフレームを取得して RGBA 形式に変換し、bmp ファイルとして保存しようとすると、ソース ポインターに関するエラーが発生します。

次のようにフレームをデコードして取得します。

出力フレームを次の場所にフィードします。

次のエラーが表示されます。

[swscaler @ 030c5c20] 不正な src イメージ ポインター

明らかに何かがおかしいのですが、pFrameYuv->data何が原因かわかりません。

DXVA2 でデコードされた NV12 フレームを sws_scale で RGBA に変換するにはどうすればよいですか?