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

video - 再エンコードせずにmp4ファイルからmp4にフレームをコピーするときにfpsを変更できるのは何ですか?

再エンコードせずにin.mp4からout.mp4にビデオをコピーしようとしています。ここでは、 pogorskiy によって提案されたコード例を使用しています。コピープロセスは成功しましたが、ビデオは非常に高速に再生されます。MediaInfoを使用して両方のファイルのfpsを確認しました。「in.mp4」のfpsは25fpsで、「out.mp4」は533fpsです。から構築した場合、fpsを533に変更する理由がわかりませんか?outStreaminStream

私は自分自身を正しく説明したと思います。

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

audio - 大きなオーディオファイルを.mpgにエンコードすると、av_write_frameが失敗します

ライブレンダリングされたビデオデータと既存の.wavファイルをmpgファイルにエンコードしています。

そのためには、最初にすべてのオーディオフレームを書き込み、次にレンダリングエンジンから入ってくるビデオフレームを書き込みます。小さい.wavファイル(<25秒)の場合、すべてが完全に正常に機能します。しかし、より長い.wavファイルを使用するとすぐに、av_write_frame(オーディオフレームを書き込む場合)は、約100フレームを書き込んだ後、-1を返します。失敗するフレームと同じになることはなく、最後のフレームになることもありません。すべてのテストファイルは、私がテストしたどのプレーヤーでも完全に再生できます。

私は多重化の例に従っています(多かれ少なかれ)。

オーディオフレームを書き込む私の関数は次のとおりです。

したがって、「オーディオフレームの書き込み中にエラーが発生しました。結果:-1」は、いくつかのフレームの後に常に表示されるものです。

そして、これが私のget_audio_frame関数です。

そして最後に、これは私がすべてのオーディオフレームを書き込むループです(.wavヘッダーについて心配する必要はありません、そのループの前にスキップしました):

ご覧のとおり、私はパケット内のほとんどすべてを出力しており、エラーの可能性をチェックしています。長いオーディオファイルをエンコードしているときにav_write_frameが失敗することを除けば、すべてが完全に正常に見えます。私が追跡しているすべてのパケット値は、すべてのフレームで100%同じです(明らかにデータポインタを除く)。また、前述のように、同じ手順は、より短いfp_sound_inputファイルに対しても問題なく機能します。avcodec_encode_audio2()およびavcodec_fill_audio_frame()も失敗することはありません。

エンコードに使用するコーデックは、CODEC_ID_MPEG2VIDEO(ビデオ)とCODEC_ID_MP2(オーディオ)です。.wavファイルはPCM16LEで保存されます(すべてまったく同じエンコーディングを使用します)。

ここで何が間違っている可能性がありますか?

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

visual-c++ - libavcodecを使用したビデオフレームのエンコード

私はビデオコーディングの初心者であり、自分のプロジェクトのために簡単な作業を行う必要があります。

基本的に、私はメモリ内にポインタで簡単にアクセスできる一定数の生のRGBフレームを持っています。libavcodedを使用してそれらをエンコードしたいと思います。初期化は問題ありませんが、これらのフレーム情報をコーデックにフィードする方法を本当に理解できませんでした。avpicture_fill関数を使用する必要がありますか?できればいくつかの例を挙げて、私に光を当てていただけませんか。MSVC++環境を使用しています。

どうもありがとうございます。

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

ffmpeg - CODEC_FLAG2_BPYRAMIDのようなffmpegフラグはどこにありますか?

私はffmpegでVS2010を使用することを開発していて、ここからコードを試しました。しかし、VSはそれが見つけることができないと言います

  1. CODEC_FLAG2_BPYRAMID+CODEC_FLAG2_MIXED_REFS+CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT+CODEC_FLAG2_FASTPSKIP; // flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
  2. X264_PART_I8X8+X264_PART_I4X4+X264_PART_P8X8+X264_PART_B8X8
  3. avCodecContext.crf

彼らはどこにいますか?

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

c++ - ビデオを mp4 コンテナに保存するときの FPS が高すぎる

avi ファイルからフレームをデコードし、x264 でデコードして mp4 ファイルに保存すると、出力ファイルの fps は常に 12,800 になります。したがって、ファイルは非常に高速に再生されます。しかし、h264 でエンコードされたフレームを mp4 ではなく avi 形式で保存すると、fps は希望どおり - 25 になります。

何が問題なのですか?

VS2010で書いたコードは次のとおりです。

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

ffmpeg - オーディオ フレームは libavcodec によってどのようにデコードされますか?

これは、ffmpeg の libav* を使用してオーディオ ストリームをデコードするプロセスです。

[videofile]--> (オーディオ パケットの読み取り) --> [pkts キュー] --> (デコーダー) --> スピーカーのサンプル バッファー

何らかの理由で、デコーダーの後にバッファーを挿入する必要があります

[videofile]--> (オーディオ パケットの読み取り) --> [pkts キュー] --> (デコーダー) --> [サンプル バッファー] --> スピーカーのサンプル バッファー

のオーディオ サンプルsamples bufferは LPCM 16 ビットです。オーディオのポイントを保存するにはsample buffer、最初のサンプルのポイントを保存します。そうすれば、バッファ内の任意のサンプルのポイントを計算できます。

問題は、オーディオ ストリームに連続したオーディオ サンプルが含まれている場合にのみ計算が正しいことです。ffmpeg のデコードされたオーディオ フレームには常に連続したサンプルが含まれていますか?

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

c++ - OpenCV :: Matタイプのjpeg画像からavcodecを使用してビデオを作成するにはどうすればよいですか?

タイプのjpeg画像に色OpenCV::Matを付け、それらからを使用してビデオを作成しますavcodec。取得したビデオは上下逆で、白黒で、各フレームの各行がシフトされ、対角線が表示されます。そのような出力の理由は何でしょうか?このリンクをたどって、avcodecを使用して取得したビデオをご覧ください。フレームからacpicture_fill作成する関数を使用しています!avFramecv::Mat

PS各cv::MatcvFrameの幅=810、高さ= 610、ステップ= 2432 avFrame(acpicture_fillで埋められている)が2430ではなくlinesize[0]=2430 手動で設定しようとしたが、それでも役に立たなかった。avFrame->linesizep0]=2432

========コード========================================= ================

更新しました

@Alexが提案したように、1〜4行目を以下のコードに変更しました

私が今得ているビデオ(ここ)はほぼ完璧です。逆さまではなく、白黒ではありませんが、RGBコンポーネントの1つが欠落しているようです。すべての茶色/赤の色が青になりました(元の画像ではその逆である必要があります)。何が問題なのですか?フォーマットするためのrescaling(sws_scale)はこれを引き起こしますか?AV_PIX_FMT_YUV420P

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

video - libavcodec はビデオの長さとフレームレートを取得します

でエンコードされたビデオが.3gp h.264あり、C でそのフレームレートとデュレーションを取得しようとしています。ファイルを開いて適切なコーデックを見つけた後に使用するコードは次のとおりです。

出力は次のとおりです。

ドキュメントから、期間が「duration/time_base」であることを意味していることを理解しています6594490 / 180000 = 36.6。ビデオ ファイルの長さは です。6 secondsこの要素がどこから来るのかわかりません6

また、フレームレートは完全にオフになっているようです。

現在、多くのチュートリアルで非推奨の方法が使用されており、ドキュメントに例が記載されていないため、ヘルプを見つけるのは非常に困難です。

どんな助けでも大歓迎です。

ありがとう

編集: 以下のコメントのおかげで、私は以下を印刷することができました

私はまた、これでフレームのタイムスタンプを見つけることができましたmsec:

これは、おおよそのものを返します33fps(私は期待しています30)。しかし、期間を取得する方法がわかりません。ドキュメントには「ストリームの継続時間、AV_TIME_BASE小数秒」と記載されていますが6594490 * 0.000006 = 39.5、正しい継続時間は6.3秒です)。また、正確な fps はわかり30ませんが、上記の数値0.000006からどのように取得するかはわかりません)30

ありがとう

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

ffmpeg - ffmpeg のアップグレード後にデコーダがクラッシュする

最近、ffmpeg を 0.9 から 1.0 にアップグレードしました (Win7x64 および iOS でテスト済み) avcodec_decode_video2。簡単に言うと、ビデオのサイズが変更されるたびにクラッシュが発生します (例: 320x240 から 160x120 に、またはその逆)。

独自のソースから mpeg4 ビデオ ストリームを受信し、次のようにデコードします。

繰り返しますが、上記のすべては、1.0 にアップグレードするまで問題なく機能していました。フレームの寸法が変わるたびに -avcodec_decode_video2クラッシュします。AVCodecContext で幅/高さを割り当てていないことに注意してください-最初もストリームが変更されたときも-それが理由でしょうか?

アイデアをいただければ幸いです。

更新: ctx_.width と ctx_.height を設定しても役に立ちません。

Update2:クラッシュの直前に、次のログ メッセージが表示されます。

mpeg4、レベル 24: "未解放のバッファが 2 つ見つかりました!". レベル 8: 「アサーション i < avci->buffer_count が libavcodec/utils.c:603 で失敗しました」

Update3を 1.1.2 にアップグレードすると、このクラッシュが修正されました。デコーダは、オンザフライで次元の変更に再び対処できます。

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

php - avconvを使用して画像をビデオに変換する方法

次のコードを使用した画像からビデオを作成したい

しかし、出力ビデオを再生しようとすると、ストリームにデータが含まれていないと表示されます