問題タブ [libavcodec]

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 に答える
179 参照

ffmpeg - FFMPEG でビデオの _current_ デュレーションを取得する方法は? (メタではない)

myfile が部分的にダウンロードされている間に、ffmpeg -i myfile を試しました。FFMPEG は、ダウンロードされた部分ではなく、ファイル全体の期間を教えてくれます。FFMPEG または別のツールでこれを確認できますか?

答え:

メディアインフォで。

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

ffmpeg - Libavcodec: H.264 ストリームをデコードするときにアクセス ユニットの終わりを伝える方法

H.264 ビデオを RTP 経由で受信し、libavcodec でデコードしています。RTP パケットから NAL ユニットをアンパッケージしてから、avcodec に供給します (フラグメンテーション ユニットの再組み立てを含む)。

有効なデコード フレーム レートを表示しようとしています。以前は、*got_picture_ptr がゼロ以外のデコード ビデオ呼び出しが成功した後の時間をログに記録していました。これまでのところ、フレームごとに 1 つのスライスがあるビデオしか得られなかったので、これはうまくいきました。しかし、今では、I フレームと P フレームの両方が、それぞれタイプ 5 とタイプ 1 の 2 つの NAL ユニットで構成されているビデオを受信して​​います。フレームのいずれかのスライスを供給すると、decode_video が画像を取得したことを返し、pAVFrame->coded_picture_number がすべてのスライスから増加します。

ビデオ フレーム/画像/アクセス ユニットの開始または終了を確実に見つけるにはどうすればよいですか?

ストリームからいくつかの NAL ユニットをダンプし、h264bitstream から h264_analyze を実行しました。

4 つの NAL ユニットでの h264_analyze からの出力

両方の I スライスは、frame_num = 0 を示しています。次の 2 (表示されていません) は、frame_num = 1 です。

0 投票する
3 に答える
2919 参照

ffmpeg - エンコード時にカスタム H.264 イントラ フレーム (キーフレーム) を強制しますか?

再生時に特定のフレームにスキップしたいビデオ シーケンスがあります (私のプレーヤーは iOS で AVPlayer を使用して実装されていますが、これは偶然です)。これらのフレームは予測できない間隔で落ちるため、ほとんどのビデオ エンコーダーにある標準の「N フレーム/秒ごとのキーフレーム」機能は使用できません。ただし、ターゲット フレームは事前にわかっています。

このスキップを可能な限り効率的に行うには、エンコード時にターゲット フレームを強制的に i フレームにする必要があります。理想的には、フレームにスクラブし、それをキーフレームとしてマークしてから、ビデオを (再) エンコードできる GUI を使用します。

そのようなツールが利用できない場合は、libavcodec を使用してカスタム エンコーダーをローリングすることでおそらくこれを行うことができると感じていますが、GUI が使用できない場合は、より高レベルの (そしてできればスクリプト可能な) ツールを使用して作業を行いたいと思います。ありえない。これは、ffmpeg または mencoder が曲がることができる種類のタスクですか?

誰もこれを行うためのテクニックを持っていますか? また、私が h.264 コーデックについて根本的な知識を持っていないため、これが不可能な作業である可能性も十分にあります。もしそうなら、私を正しくしてください。

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

ffmpeg - デコーダーの完全なコピーを作成するにはどうすればよいですか?

mpeg4 ビデオ ストリームのカスタム実装用のビデオ デコーダー (FFMPEG/AVCodec を使用) を作成しています。このビデオ ストリームの特異性は、同じ親に基づいて多くの P フレームを作成する多くの「息子」ストリームに分割できることです。デコードしようとしているビデオ ストリームは、実際には一種の「ビデオ ツリー」です。このようなもの:

1 つのパスをたどることに決めたときに正常に動作する基本的なデコーダーを既に作成しました。問題は、ビデオ ツリー内の複数のパスをたどろうとした場合です。この時点で、デコーダーを「フォーク」して、2 つの異なるビデオ ストリームを追跡する必要があります。分割はキー フレームの後だけでなく、P フレームの後でも発生する可能性があるため、AVCodecContext を複製する必要があります (私は を使用しますavcodec_copy_context) が、クリーン ステータスから新しいデコーダを作成するようです..以前のビデオ ステータスを無視しているようです、したがって、デコードされた P フレームは空のビデオ フレームに「適用」されます。おそらく使用してコンテキストをコピーするavcodec_copy_contextだけでは不十分です...何か提案はありますか? デコーダーのコンテキストと完全なステータスを複製するにはどうすればよいですか? または、参照を使用してストリームをデコードする他の方法はありますか? ありがとう!

0 投票する
2 に答える
12726 参照

android - Android でのオーディオ/ビデオのデコードに OpenMAX (IL?) を使用する

Android を実行する新しいハードウェア プラットフォームの多く、特に NVIDIA の Tegra 2 は、メディア アクセラレーション用に OpenMAX をサポートしています。今日のデバイスでは、このサポートなしで 720p ビデオをデコードすることは事実上不可能ですが、Android でサポートされているデマルチプレクサの数は非常に少ないです。私が見つけた唯一のパブリック API は、Android SDKのMediaPlayerクラスを介したものです。ただし、Android のソース ツリーには、OpenMAX関連の情報が記載された複数の場所があります。

私のデバイス (Samsung Galaxy Tab 10.1) では、/system/lib にある多数の OpenMAX ライブラリを介してハードウェア デコーダーにアクセスできます。ビデオ アプリケーションをこれらとインターフェイスさせるのは素晴らしいことです。OpenMAX を搭載したデコーダーの実装に関する情報を教えてもらえますか? Khronos のドキュメントを見つけましたが、サンプル コードやチュートリアルの方法はありません。私はすでにデマルチプレクサーとソフトウェア デコード (libavcodec/libavformat 経由) を処理しています。ハードウェア エンコードを有効にするフックを追加したいだけです。また、ここでは、デバイスで利用可能なものに直接リンクする必要があると想定しているため、移植性の点でかなり劣っていますが、機能します.

または、Tegra 2 デバイスで利用可能なビデオ デコードにアクセスするためのプライベート API について、誰もが知っていることに興味があります。特に、 NVIDIA がデスクトップ Linux ディストリビューション用に実装しているようなvdpauインターフェイスがある場合は、そのために利用できるものがたくさんありますが、そのサポートを示す共有ライブラリを見つけることができませんでした。

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

c - ffmpeg を使用した TCP ストリームのデコード

私が書いている Android アプリケーションで Ffmpeg ライブラリを使用しています。ローカル ファイルを開き、avformat_open_input() を使用してデコードするコードを作成しました。ただし、TCP 経由でビデオ ストリームを読み込むには Ffmpeg を使用する必要があります。libavcodec/tcp.h などの Ffmpeg 内でいくつかのものを見つけましたが、実際に TCP ストリームをデコーダーに開く方法を確立できません。

任意の提案をいただければ幸いです。

0 投票する
2 に答える
5787 参照

ffmpeg - RTSP 経由の MJPEG ストリーミング

RTSP 経由で IP カメラから JPEG 画像をキャプチャしています。MJPEG 画像のストリーミングとデコードには live555 + libavcodec を使用します。ストリームは画像解像度 2048 x 1920 まで正常に動作します。しかし、画像の幅を 2048 より大きくすると、幅が非常に狭い (つまり、544x1920) 棒状の長方形の画像が表示されます。画像が正しくキャプチャされ、カメラに保存されます。この問題は、RTSP を介して PC に画像をストリーミングする場合にのみ発生します。高解像度 MJPEG の RTP にペイロード制限はありますか?

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

c - libavcodecを使用してH.264でエンコードされた画像を保存する

IPカメラからH.26​​4画像を取得していて、エンコードされた画像を(デコードせずに)保存したい。この目的のために、ffmpegのoutput-example.c (libavformat / output-example.c)を使用しています。生のH.264画像を保存するには、次のようにします。

ここで、 ulAddrは画像へのアドレスポインタであり、out_sizeは画像サイズです。画像をメディアビデオファイルに保存する代わりに、個々の画像を保存したいと思います。save_image関数は、基本的なfopen関数とfwrite関数を使用して画像を保存するだけです。フレームをデコードして保存すると、すべて正常に動作します。しかし、エンコードされたフレームの保存に問題があります。エンコードされたフレームは非常に小さいサイズで保存されるため、デコードできません。何か問題でもありますか?私はこの点でどんな助けにも本当に感謝します。

0 投票する
4 に答える
7326 参照

c - libavformat のエラー メッセージをオフにするにはどうすればよいですか

デフォルトでは、libavformat は次stderrのようなエラー メッセージを に書き込みます。

Estimating duration from bitrate, this may be inaccurate

どうすればオフにできますか?またはさらに良いことに、それを自分のきちんとしたログ機能にパイプしますか?

編集: stderr を別の場所にリダイレクトすることは、他のログ記録の目的で必要になるため受け入れられません。libavformat に書き込みを行わないようにしたいだけです。

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

installation - cinelerra: 共有ライブラリの読み込み中にエラーが発生しました: libavcodec.so.52 slackware

確かに、cinelerraをインストールしようとすると何日もかかり、他に何をすべきかわかりません。フォーラムを検索し、cinelerraのリストにメールを送信しましたが、まだ何も解決できません 事前に感謝します

cinelerra の使用に興味があります。slackware 13.37 を持っています。

それが正しくインストールされていると言います:

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