問題タブ [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.
.net - .NETにFFMpeg、libavutil、libavformat、libavcodecの動作するP / Invoke宣言のセットはありますか?
私は現在、.NETからlibavutil、libavformat、libavcodec(すべてFFMpegの一部)にアクセスしようとしています。
現在、 Windows32ビット用に毎晩実行される共有FFMpegパッケージの自動ビルドからライブラリを取得しています。
ffmpeg-sharpプロジェクトのコードも使用しています。そのプロジェクトでは、コンパイルされていなかったいくつかのクラスを削除しました(これらは、P / Invoke宣言ではなくラッパークラスです)。
コードは正常にコンパイルされますが、いくつかの問題が発生しています。
まず、av * .dllのビルドでは、cdecl呼び出し規約PInvokeStackImbalanceException
を使用しているようです。これは、を呼び出そうとしたときにいくつかの呼び出し規約を受け取っていたためav_open_input_file
です。これは、正しく機能させるために変更するのに十分簡単でした。AVFormatContext
構造にデータが入力されます。
その後av_find_stream_info
、ファイル内のストリームに関する情報を取得するために呼び出したいと思います。ただし、AVFormatContext
への呼び出しから取得したものを使用してそれを呼び出すと、保護されたメモリから読み取りまたは書き込みを行おうとしていることを示すav_open_input_file
anがスローされます。AccessViolationException
誰かがP/Invokeを使用して、P / Invokeを介してlibavutil、libavformat、およびlibavcodec dllライブラリにアクセスし、それを機能させましたか?
コマンドラインバージョンのFFMpegを使用することは、解決策ではありますが、この場合は実行可能な解決策ではありませんが、ライブラリを介してアクセスする必要があります。この理由は、必要なことを実行するにはディスクをあまりにも多くスラッシングする必要があり(非常に高解像度のビデオのフレームごとの分析を実行する必要があります)、ディスクを避けたいためです。できるだけ。
c - ffmpeg (libavcodec) 警告: エンコードされたフレームが大きすぎます
libavcodec (ffmpeg) を使用して生のピクセル データを mp4 形式にエンコードしようとしています。すべてがうまくいき、適切な品質の .avi ファイルを取得していますが、コーデックで「エンコードされたフレームが大きすぎます」という警告が表示されることがあります。そして、それが行われるたびに、いくつかのフレームの一部 (通常はフレームの下部) が文字化けしたり、すべてが混同されたりします。この警告がいつ表示されるか教えてください。以下は、エンコーダーに使用している設定です。
よろしく、
c++ - FFmpeg:再エンコードせずに、エンコードされたメディアデータをあるコンテナーから別のコンテナーに配置する方法は?
たとえば、私は file.mp3 を持っています。目的の形式でビデオ (FLV など) なしでサウンドを再生できることがわかっているので、mp3 コンテナーから ffmpeg を使用してエンコードされた mp3 データを flv に配置する方法 (記事/コードサンプルを取得する場所)これ)?
cmd からではなく、ffmpeg をライブラリとして使用する C++ からという意味です。(タグを参照)
ffmpeg - Linux 用の MS-DRM クライアント ライブラリはありますか?
ライブラリ (libavformat と libavcodec) を使用して、いくつかの MMS ストリーミング URL をデコードしました。ただし、それらの一部はDRMで保護されています。それらをデコードしようとすると、ライブラリはそれについて警告します
libavformat/asfdec.c:
変数 s は構造体 AVFormatContext です。私の質問は、鍵をどこで入手するのですか? DRMキーでデコードするようです。
私は ASF Spec を見て、asfdec.c にパッチを当てようとしました。これで、取得ライセンスの URL とキー ID がわかりました。この問題は、「Linux 用の MS-DRM クライアント ライブラリはありますか?」と書き換えることができます。(旧: ffmpeg で DRM を使用して MMS ストリーミング URL をデコードする方法は?)
ライセンス URL とキー ID を使用してコンテンツ キーを取得することはできますか?
c++ - ffmpeg による Wma デコード
私はffmpegが初めてで、api-example.cを使用してwmaファイルをデコードしようとしました。ただし、プログラムを実行すると、次のエラーが表示されました
「frame_lenオーバーフロー」。このエラーを修正する方法を知っている人はいますか?
これが私のコードです:
私はかなり長い間これにこだわっています。私を助けてください。誰かが私のコードの何が問題なのか知っていますか?
ありがとう、
イザック
ffmpeg - ffmpeg 経由で x264 を使用するには、どのパラメーターが必要ですか?
私は AVI ファイルを持っています。最初にそれを Raw 形式にデコードしました。次に、.h264 形式でエンコードしたいと思います。libavcodec.dll と libavformat.dll を使用しています。ポイントは、avcodec_open(AVCodecContext,AVCodec) からコーデックを開こうとすると開かないということです。lib x264 でこのメソッドを実行するために指定する必要があるいくつかのパラメーターがありませんか? どんな助けでも大歓迎です。ありがとう
ffmpeg - FFmpeg でのバイト単位のシーク
以下について、アドバイスをいただければ幸いです。FFmpeg の libavformat に基づくビデオ コンバーターを開発しています。正確なシーク API を実装する必要があります。まず、すべてのパケットのプレゼンテーション タイムスタンプ (PTS) を保存するビデオ ストリームのインデクサーを開発しました。次に、エンコーダーはこのインデックスを使用してビデオ ファイルをシークします。この操作の前に、たとえば、ファイルを mp4 コンテナーに再多重化します。内部に正しいインデックスがないビデオ、またはビデオにインデックスがまったくないビデオには、Remux が必要です。もちろん、以前に作成されたインデックスを使用して、バイトごとのシークを実装する必要があります。これを実装するために多くの方法を試しましたが、成功しませんでした。FFmpeg で正確なバイト単位のシークを実装する方法をご存知でしょうか? よろしくお願いします。
libavcodec - av_register_all()とavcodec_register()
av_register_all()を呼び出す代わりに、使用する単一のデコーダーを選択する例はありますか?私はavcodec_register()、av_register_codec_parser()などを呼び出さなければならないと思います...
問題は、av_register_all()を使用しない場合、av_open_input_file()が-2で失敗するため、どの関数を正確に呼び出す必要があるかということです。
android - ffmpeg - 使用する必須フィルター
Android用のffmpegをコンパイルしています。構成でどのフィルターが必須なのか疑問に思っています。誰かが知っているなら、私に提案してください。
c - libavcodec を使用した mpegts コンテナー内の raw H264 フレーム
次の問題について助けていただければ幸いです。
H264 圧縮ビデオ フレームを生成するカメラ付きのガジェットがあり、これらのフレームはアプリケーションに送信されています。これらのフレームはコンテナーではなく、生データのみです。
ffmpeg 関数と libav 関数を使用して、後で使用できるビデオ ファイルを作成したいと考えています。
フレームをデコードしてからエンコードすると、すべて正常に動作し、有効なビデオ ファイルが得られます。(デコード/エンコードの手順は通常のlibavコマンドです。ここでは特別なことは何もありません。万能のインターネットから取得しました。それらは堅実です)...ただし、デコードとエンコードで多くの時間を無駄にしているので、この手順をスキップして、フレームを出力ストリームに直接配置します。さて、問題が発生します。
エンコーディングを生成するために思いついたコードは次のとおりです。
変数は次のようになります。
frameData
カメラから送信されたデコード済みフレーム データで、前のステップでデコードされvideoOutBuf
、データを保持するためのプレーンな uint8_t バッファーです。
フレームをデコードせずに、次のようなデータを単純に通過させるようにアプリケーションを変更しました。
どこ
frameData
は生の H264 フレームで、生の H264 フレームcurrentFrameSize
のサイズです。フレームごとにガジェットから取得するバイト数。
そして突然、アプリケーションが正しく動作しなくなり、生成されたビデオが再生できなくなります。パケットに正しい PTS を設定していなかったので、これは明らかです。私がしたことは次のとおりです(私は必死です、このアプローチからそれを見ることができます:))
ここtimestamps
で実際には、上記の作業コードによって生成され、ファイルに書き込まれた PTS のリストです (はい、正しく読んでください。10 分間のセッションですべての PTS をログに記録し、それらを使用したかったのです)。
アプリケーションはまだ機能しません。
さて、ここで私は何をすべきか見当もつかないので、ここに質問があります:
libav 関数を使用して「mpegts」ビデオ ストリームを作成し、既にエンコードされたビデオ フレームをストリームに挿入し、それを使用してビデオ ファイルを作成したいと考えています。どうすればいいのですか?
ありがとう。