問題タブ [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 に答える
2274 参照

ffmpeg - FFmpegとLibavの違いは何ですか?

この質問の最初のコメントによると、私は引用します

「この名前のライブラリは、FFmpegプロジェクトとLibavプロジェクトの両方から提供されていますが、相互に互換性がありません」。したがって、答えは、どのlibavcodecを使用するかによって異なると思います。

ユーザーalandウィキペディアによる

この2つのプロジェクトの間に存在する違いは何ですか?

Mp4/Mkvコンテナを使用したH/X264、Mp3、AACへのビデオとオーディオのエンコーディングに興味があります。しかし、もっと重要なことは、パーミッシブライセンスを備え、できるだけ多くのプラットフォームで広くサポートされている、信頼性が高く最新のライブラリから始めたいと思います。

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

c - libavcodecを使用してmp3オーディオでh.264ビデオをストリーミングする方法は?

ウェブカメラから h.264 フレームを読み取り、マイクからオーディオをキャプチャします。ライブ ビデオを ffserver にストリーミングする必要があります。デバッグ中に、次のコマンドで ffmpeg を使用して ffserver からビデオを読み取りました。

出力ファイルのビデオがわずかに高速化されています。オーディオ ストリームを追加すると、数回高速化されます。出力ファイルにオーディオがない場合があります。

オーディオをエンコードするための私のコードは次のとおりです。

ビデオをストリーミングするための私のコードは次のとおりです。

これが私がそれを使用する方法です:

私の問題はPTSとDTSにあると思います。誰でも私を助けることができますか?

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

c++ - FFMPEGはビデオの長さを表示できません

ffmpegを使用してビデオファイルからフレームをキャプチャしようとしていますが、ビデオの長さを取得することさえできません。でアクセスしようとすると、毎回pFormatCtx->duration 0になります。ポインタが初期化され、正しい継続時間が含まれていることがわかります。これを使用する av_dump_format(pFormatCtx, 0, videoName, 0);と、実際に継続時間データとビデオに関するその他の情報が取得されるためです。これは私が使用するときに私が得るものですav_dump_format(pFormatCtx, 0, videoName, 0);

なぜ継続時間を表示できるのか、表示できないのかわかりav_dump_formatません。関数の定義を確認しましたが、期間を表示するために、関数もを使用していますpFormatCtx->duration。他のメンバー変数を呼び出したときに、他のメンバー変数も適切なデータを表示しないのは、継続時間だけではありません。main.cpp

これが私のコードです:

それが役立つかどうかはわかりませんが、UbuntuでQtCreatorを使用し、ライブラリを静的にリンクしました。

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

c++ - AVPacket 構造のコピーを作成する

後で好きなときにデコードできるように、AVPacket のコピーを作成したいと思います。

AVPacket は、オーディオ ストリームからのものです。

av_dup_packet が機能していないようです。

AVPacket コピー コンストラクターが機能しません。

独自のコピー コンストラクターを作成すると、メモリが破損します。

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

audio - libav/ffmpeg で音声ファイルを適切に開く

ffmpeg を使用して、さまざまなファイル形式からオーディオ サンプルをデコードしようとしています。したがって、このディスカッションのコードに基づいていくつかの実験を開始しました: Android で FFmpeg を介してオーディオをデコードする方法。最新の FFMPEG リリース (1.0) を使用し、https://github.com/halfninja/android-ffmpeg-x264を使用してコンパイルします。

FFMPEG は enable-decoder=mp1/mp2/mp3/ogg/vorbis/wav/aac/theora を使用してコンパイルされ、外部ライブラリ (libmp3lame、libtheora など) は使用されません。

mp3 および wav ファイルを開くと、問題なく動作し、たとえば mp3 の場合、次の出力が生成されます。

オーディオ形式: mp3

音声ビットレート: 256121

ストリーム: 0 (合計: 1)

オーディオコーデック: mp3

しかし、ogg ファイルを開こうとすると、次のようになります。

ストリーム情報検索エラー: -1 (ストリーム: 1)

return ステートメントを手動で設定audioStreamIndex=0してコメントアウトすると、次のようになります。

ストリーム情報検索エラー: -1 (ストリーム: 1)

オーディオ形式: mp3

オーディオ ビットレート: 0

ストリーム: 0 (合計: 1)

オーディオコーデック: mp3

m4a (AAC) の場合、次のようになります。

オーディオ形式: mp3

音声ビットレート: 288000

ストリーム: 0 (合計: 1)

オーディオコーデック: mp1

しかし、後で失敗しavcodec_decode_audio3ます。

また、成功せずに手動でフォーマットを強制しようとしました:

mp3 と wav でのみ動作し、他の形式では失敗する読み込みコードに何か問題がありますか?

よろしく、

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

visual-c++ - Windows用のlibavcodecのメモリリーク?

Windows用のlibavcodecを使用してavformat_open_input()いますが、重大なメモリリークが発生しているようです。5,000本のビデオを開くと、OSは、アプリケーションの終了時に解放されない2GBのRAMが消費されたことを報告します。コードは次のとおりです。

上記のコードは、C#から呼び出されるクラスライブラリにあります。マネージC++を使用してlibavcodecライブラリを呼び出しています。フローはC#->マネージC++->libavcodecです。DLLとダイナミックリンクを使用しています。これはシングルスレッドアプリケーションです。予想通り、スレッドを使用するとリークが増加します。

私は次のことを試しました:

  • 32ビットビルドをいくつか試しましたが、メモリリークは一貫しています。
  • NULLの代わりに使用し&dictます。
  • 同じファイル名で5,000回以上呼び出すavformat_open_input()と、メモリがリークしません。
  • 組み合わせavformat_alloc_context()とを使用しavformat_free_context()ます。メモリを解放する組み合わせが見つかりません。
0 投票する
0 に答える
288 参照

c - ffmpegに触れずに着信フレームをファイルに書き込む方法は?

av_open_input_file からフレームを読み取り、別のコーデックでデコードして再エンコードし、ファイルに保存できます。

今、私は同じことを望んでいますが、デコードまたは再エンコードしたくないことを除いて. ファイルへの読み取りフレームで av_interleaved_write_frame を実行したい。これを行うには、AVOutputFormat を設定する必要があります

AVOutputFormat *fmt; fmt = av_guess_format(NULL, ファイル名, NULL);

ただし、リモート ストリームであるため、ファイル名を指定できません。では、既に入力フレームを読み取っている現在の AVFormatContext から AVOutputFormat を生成する方法はありますか? したがって、同じフレームを出力ファイルの任意の部分から(必ずしも最初からではなく)正しい方法で書き込むことができます。

要約すると、デコードおよび再エンコードせずに、読み取ったばかりのフレームをファイルに書き込む必要があります。(そのファイルを再生できるように、もう一度そのファイルを開きます)

何か案は?

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

c# - FFMPEG avcodec_find_decoder(2) (CODEC_ID_MPEG2VIDEO) は常に不完全な AVCodec を返しますか?

FFMPEG (avcodec-54.dll) で問題が発生しました。 1) .NET ラッパーを作成しました。私が見る限り、それはうまく機能します。2) 私は何かを解読しようとしています...そしてそれが問題でした:


EXC はスローされず、次の出力が表示されました。


私を最も混乱させるのは、名前は正しいが、id と type が間違っていることです。以前のバージョンでは、DLL がすべて正常に動作する場合。この動作は、新しいバージョンで思いつきました。推測やデバッグのヒントはありますか?

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

video - AVFrame.linesize[]を理解するのに役立つ人はいますか?

の各セルが何を意味するのかを見つけようとしAVFrame.linesize[]ましたが、見つかりませんでした。

私が理解したようlinesize[0]に、幅linesize[1]は高さです。

  1. 私が正しければ、他のセルとはどういう意味ですか?
  2. linesize avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);[0] だけが値を持ち、他のセルが常に 0 になるのはなぜですか?

更新しました

AVFrame.data[i] と AVFrame.linesize[i] は、行の特定の色と行の長さのデータだと思いますが、正しいですか?

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

video - avi コンテナからフレームをデコードして h264/mp​​4 にエンコードできないのはなぜですか?

ffmpeg を使い始めたので、avi ファイルを mp4/h264 ファイルに変換したいと考えています。これを含む多くの投稿を読みましたが、フレームをmp4ファイルに保存する方法の良い例が見つかりませんでした。以下のコードは、avi ファイルからフレームをデコードして H264/mp​​4 ファイルにエンコードする単純化されたコードですが、フレームを保存すると mp4 ファイルを再生できません。エンコーディングで何か間違っていると思います

どこが悪いのか、どうしたら直せるのか教えていただけると助かります。