問題タブ [libavformat]
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.
ffmpeg - キーフレームはキーフレームではありませんか?AV_PKT_FLAG_KEYはAV_PICTURE_TYPE_Iにデコードされません
フラグにAV_PKT_FLAG_KEYを含むパケットをデコードした後、Iフレームを取得することを期待していましたが、代わりにPフレームを取得しました。
に電話した後:
健全性チェックとして以下を印刷します。
出力を返します:
私が期待していたとき:
ここで、「1」==AV_PKT_FLAG_KEY。「I」はAV_PICTURE_TYPE_Iを指し、
この動作は正しいですか?(私はMPEG2ビデオをデコードしています)。
ffmpeg - libavformatを介してH264ストリームをMP4ファイルに多重化するにはどうすればよいですか
最初にマルチメディア ファイル (test.mp4 ファイル、ビデオ コーデック ID は H264 など) をデコードし、ビデオ ストリームとオーディオ ストリームを取得し、次にオーディオ ストリームをいくつか変更し、最後にエンコードするアプリケーションを実現したいと考えています。ビデオ ストリーム (libx264 を使用) とオーディオ ストリームを結果ファイル (result.mp4) に変換します。効率を高めるために、ビデオ ストリームのデコードとエンコードを省略し、関数「av_read_frame」でビデオ パケットを取得し、関数「av_write_frame」で結果ファイルに直接出力しました。ただし、出力ファイルには画像がなく、出力ファイルのサイズはかなり小さいです。
ffmpeg コードを追跡したところ、関数 "av_write_frame->mov_write_packet->ff_mov_write_packet" で、関数 "ff_avc_parse_nal_units" を呼び出して nal ユニットのサイズを取得することがわかりましたが、戻り値は非常に小さい (208 バイトなど)。
MP4 ファイルの H264 ストリームが Annex-B 形式で保存されていないため、開始コード (0x000001) が見つかりません。H264 ストリームを Annex-B 形式に変更して、すべてのフレームの先頭に手動で開始コードを追加しましたが、まだ機能しません。
誰でもヒントを教えてもらえますか? どうもありがとう。以下は、私のものと同様のコードです:
ffmpeg - fpsが推測であり、正確な値ではないのはいつですか?
ビデオ処理にはlibavcodecを使用しています。
のドキュメントはAVStream->r_frame_rate
言う
私はいくつかのmp4とaviビデオ(25fps)を試しましr_frame_rate
たが、常に25 fpsを期待したとおりでした。それで、ドキュメント...is just a guess!
に、常に正確なfpsが得られると書かれている理由を理解したいと思います。いつ変わるの?
c++ - raw pcm から OGG Vorbis への libav オーディオ エンコーディングの例
現在、複数の独自フォーマットのゲーム メディア アセットを変換し、よりオープンなフォーマットに変換するツールに取り組んでいます。libav ライブラリhttp://libav.org/を使用して、WAV、mp3、ect 形式から生の pcm にデコードしstd::vector<char>
(正常に完了しました)、それを ogg vorbis にエンコードしようとしています。ドキュメントでを使用しようとしてapi-example.c
います。https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decoding_encoding.cしかし、トーン生成が終了し、AVPacket エンコーディングが開始する場所で立ち往生しているため、ほとんど進歩していません。
std::vector
ファイル(できればogg vorbis)に書き出す生のpcmファイル(または)からのオーディオエンコーディングの実例を教えてもらえますか?
image - AVFrame から RGB へ - アーティファクトのデコード
プログラムで mp4 ビデオ ファイル (h264 コーデックを使用) を単一の RGB イメージに変換したいと考えています。コマンド ラインでは、次のようになります。
このコマンドを使用すると、素敵な画像のセットが生成されます。しかし、プログラムで同じことをしようとすると、一部の画像 (おそらく B および P フレーム) が奇妙に見えます (たとえば、差分情報などで歪んだ領域があります)。読み取りと変換コードは次のとおりです。
B および P フレームからの情報がすべてのフレームに含まれるように、各最終イメージがすべてのイメージ データを表示するようにビデオ ストリームを変換するにはどうすればよいですか?
[編集:]アーティファクトを示すサンプル画像はこちら: http://imageshack.us/photo/my-images/201/sampleq.jpg/
よろしく、
ffmpeg - avformat_write_header が無効なヘッダーを生成する (MPG が壊れる)
実行時に 3D エンジンからの入力画像からビデオ ファイルをレンダリングしています (実際の画像ファイルは渡さず、RGB メモリのみを渡します)。これは、ビデオ コーデックとして CODEC_ID_H264 を使用して MP4 を出力する場合に完全に機能します。
しかし、CODEC_ID_MPEG2VIDEO を使用して MPG ファイルを作成したい場合、結果のファイルは単に壊れています。ビデオを正しく再生できるプレーヤーはなく、その MPG を別の MPG ファイルと連結し、結果の MP4 を別のステップで変換したい場合、結果の .mp4 ファイルには両方のビデオが含まれますが、元の MPG ビデオからの多くのフレーム (およびビデオ! サウンドは問題なく動作します) は単純にスキップされます。
最初は MPG -> MP4 変換が問題だと思っていましたが、ビデオ レンダリング エンジンからの最初の MPG が既に壊れていることに気付きました。ただし、壊れているのがシステム ヘッダーなのかシーケンス ヘッダーなのかはわかりません。または、それがまったく異なるものである可能性がある場合。
ご覧になりたい場合は、次のファイルをご覧ください: http://www.file-upload.net/download-7093306/broken.mpg.html
ここでも、ビデオ レンダリング エンジンから MP4 を直接作成する場合、まったく同じ多重化コードが問題なく機能するため、入力データ、swscale() などは正しいと確信しています。唯一の違いは、CODEC_ID_H264 が使用され、いくつかの追加変数 (qmin、qmax など) が設定されていることです。これらはすべて H264 に固有であるため、影響はありません。
また、avformat_write_header も av_write_trailer もエラーを報告しません。
追加情報として、VLC プレーヤーで MPG のコーデック データを表示する場合、FPS、解像度、およびフォーマットを表示できません (640x360、30 fps および 4:2:0 YUV を表示する必要があります)。
MinGW を使用してソースからコンパイルした、かなり新しい (おそらく 2 ~ 3 か月前の) FFmpeg バージョンを使用しています。
これを解決する方法についてのアイデアは大歓迎です。現在、私はそれらから外れています:)
c - 既存のオーディオ ストリームの最後にオーディオを追加することはできますか?
libavformat を使用して、デコードとエンコードのオーディオ クラスを実装することができました。mp3、ogg などを作成して読み取ることができます。
さて、「既存の音声ファイルの最後に録音する」機能を追加したいと思います。つまり、既存のストリームの最後に (オーディオ データの) 新しいフレームをいくつか追加します。(私のファイルは、ストリームが 1 つだけのオーディオ ファイルのみです)。
要約すると、私はこれを試してみましたが成功しませんでした:
そして、最初の av_write_frame でクラッシュします。
考えられる理由は 3 つありますが、その方法がわかりません。
入力ファイルと出力ファイルは同じです。AVFormatContext と AVOutputFormat を初期化するにはどうすればよいですか?
avformat_alloc_output_context2(&AVFormatContext , NULL, NULL, ファイル名); AVOutputFormat = AVFormatContext ->oformat; avformat_open_input(&AVFormatContext , ファイル名, NULL, NULL)
AVStream を取得したら、最後までシークする必要がありますか? どのように ?
avio_open(&AVFormatContext->pb, filename, AVIO_FLAG_WRITE); を使用する必要がありますか? ?
前もって感謝します。それについてのサンプルには何も見つかりませんでしたが、サンプルやアイデアがあれば... :)
c++ - FFMPEGからOpenGLテクスチャへ
AVFrameをopenglテクスチャに変換するにはどうすればよいですか。実際、オーディオ(オーディオは機能しています)とビデオを出力するレンダラーを作成しましたが、ビデオは出力されません。これが私のコードです:
テクスチャの作成:
コード情報:_texture変数は、テクスチャIDを保持するGLuintです
AVFrameを取得してOpenGLテクスチャに変換する関数:
コード情報:スレッドがAVFrameを格納するキューがあります。この関数は、AVFrameを取得するために頻繁に呼び出され、NULLを取得するまで呼び出されなくなります。
それは実際には機能していません。(私はスタックオーバーフローのいくつかの質問を調べようとしましたが、それはまだ機能していません)何か例、またはそこでのエラーを修正するのを手伝ってくれる人はいますか?
追加データ: GL_RGBをGL_RGBAに変更してフォーマットを試してみましたが、GL_RGBAを試してみるとクラッシュします(幅と高さが非常に大きいため、とにかくサイズを変更しようとしました)。サイズをPowerOf2に変更しようとしましたが、まだ機能しません。
1編集:
スレッド関数:
スレッド作成機能:
これは、NextVideoFrameを含むクラスと_textureメンバーを指します。
解決済み:
私はdatenwolfのヒントのいくつかに従いました、そして今ビデオはオーディオ/ビデオで正しく表示されています:
visual-c++ - VisualStudio2008でのzeranoelibavcodecビルドの使用
Visual Studio 2008でzeranoeのlibavcoded共有ビルドを使用しようとしています。デバッグモードでlibavcodecを使用してアプリケーションをテストしましたが、正常に実行されています。しかし、リリースバージョンでアプリケーションをビルドしようとすると、正常にコンパイルされますが、実行中に「プロシージャエントリポイントCoCreateInstanceがdynamincリンクライブラリavcodec-54.dllに見つかりませんでした」というエラーが表示されます。この問題を解決するために私。
android - ffmpeg ライブラリとコンバーター クラスのコンパイルに関する問題
このプロジェクトを参照として使用しています。コードはhttp://roman10.net/src/affmpeg.zipで入手できます。
プロジェクトが提案するものとは異なる構成でffmpegを使用してこのプロジェクトをコンパイルしようとしています。新しい libffmpeg.so をコンパイルし、プロジェクトに追加しました。ただし、「UnsatisfiedLinkError」が発生しています
converter.so ファイルを再コンパイルすることにしましたが、ndk-build コマンドを実行すると、次のメッセージが表示されます。
これを修正して機能させるにはどうすればよいですか?