問題タブ [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.
c - スタンドアロン プログラムではなく、ライブラリとして FFmpeg を使用できますか?
作成中のプログラムにビデオ変換機能を追加したいと考えています。これを行うためのFFmpegのコマンドラインインターフェースは単純ffmpeg -i InputFile OutputFile
ですが、ライブラリとして利用する方法はありますffmpeg_convert(InputFile, OutputFile)
か?
libavcodec を直接使用する必要がないことを願っています。フォーマット間の変換は 1 行の関数よりもはるかに複雑になると思います。これを行うためにFFmpegを簡単に改造できない場合、それをベースにした別のライブラリがおそらくありますか? libvlc について聞いたことがありますが、それはビデオ変換ではなく、ビデオ再生API のみを公開しているようです。
ありがとう。
c - libavcodec で音声を aac にエンコードする
libavcodec (2010 年 3 月 3 日現在の最新の git) を使用して生の pcm を aac にエンコードしています (libfaac サポートが有効になっています)。これを行うには、毎回 codec_context->frame_size サンプルを使用して avcodec_encode_audio を繰り返し呼び出します。最初の 4 つの呼び出しは正常に返されますが、5 番目の呼び出しは返されません。gdb を使用して中断すると、スタックが破損します。
audacity を使用して pcm データを .wav ファイルにエクスポートすると、コマンドライン ffmpeg を使用して問題なく aac に変換できるので、これは間違いだと思います。
私の問題を再現する小さなテスト プログラムを作成しました。ここで利用可能なファイルからテスト データを読み取ります: http://birdie.protoven.com/audio.pcm (署名付き 16 ビット LE pcm の約 2 秒)
FAAC を直接使用すればすべて動作させることができますが、ビデオもエンコードして両方を mp4 に書き込んでいるため、libavcodec を使用できればコードは少しきれいになります。
ffmpeg バージョン情報:
コーデックのコンテキストで設定していない、または間違って設定しているものはありますか? どんな助けでも大歓迎です!
ここに私のテストコードがあります:
encoding - MPEG-2 4:2:2プロファイルをエンコードするときに4:2:2クロマを使用するようにlibavcodecを設定するにはどうすればよいですか?
libavcodec(ffmpeg)を使用したプロジェクトがあります。メインレベルの4:2:2プロファイルでMPEG-2ビデオをエンコードするために使用しています。AVCodecContextでピクセル形式PIX_FMT_YUV422Pを選択していますが、取得しているビデオ出力のすべての色が間違っており、エンコーダーがバッファーを誤って読み取っているように見えます。 4:2:2より。これが私のコーデックのセットアップです:
結果のビデオフレームのスクリーングラブはhttp://ftp.limeboy.com/images/screen_grab.pngで見ることができます(入力は標準のカラーバーでした)。
プロセスのさまざまな時点でデバッグフレームをTGA形式に出力して確認しましたが、libavcodecがフレームをエンコードする時点までは、すべて問題なくダンディであることが確認できます。
どんな援助も大歓迎です!
乾杯、マイク。
c++ - RGB画像をH264にエンコードするFFMpeg
2 つの入力ピン (オーディオ用に 1 つ、ビデオ用に 1 つ) を持つ DirectShow フィルターを開発しています。ビデオをH264に、オーディオをAACにエンコードし、RTPを使用して多重化/ストリーミングするために、FFMpegのlibavcodec/libavformat/libavutilを使用しています。これまでのところ、libavcodec を使用してビデオとオーディオを正しくエンコードできましたが、FFMpeg が RTP 多重化もサポートしているようです。残念ながら、H264 エンコーディングと RTP 多重化を実行する方法を示すサンプル コードは見つかりません。良いサンプルを知っている人はいますか?
iphone - avcodec_encode_video 呼び出し時の EXC_BAD_ACCESS
一連のCGImageからビデオをディスクに書き出すために使用しているObjective-Cクラスがあります(これはObj-C固有のものではないと思いますが)。(ピクセルデータを取得するために上部で使用しているコードは、Apple から取得したものです: http://developer.apple.com/mac/library/qa/qa2007/qa1509.html )。コーデックとコンテキストを正常に作成しました。EXC_BAD_ACCESS を取得すると、avcodec_encode_video に到達するまで、すべてがうまくいきます。これは簡単な修正だと思いますが、どこが間違っているのかわかりません。
簡潔さのためにいくつかのエラーチェックを行いました。「c」は、正常に作成された AVCodecContext* です。
私はそれを何十回も踏みました。ここにいくつかの数字があります...
- データの長さ = 408960
- picture_buff = 0x5c85000
- picture->data[0] = 0x5c85000 -- avpicture_fill が機能したことを意味します...
- outbuf_size = 408960
そして、avcodec_encode_video で EXC_BAD_ACCESS を取得します。関連性があるかどうかはわかりませんが、このコードのほとんどは api-example.c からのものです。XCode を使用して、Snow Leopard で armv6/armv7 用にコンパイルしています。
助けてくれてありがとう!
ubuntu - ubuntu の ffmpeg の問題 (libavcodec.so)
Ubuntu を実行し、ここから Java で ffmpeg ラッパーを使用しようとしています: http://code.google.com/p/javacv/
他のシステムでは正常に動作するようですが、Ubuntu では次のエラーでプロジェクトがクラッシュします: Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'avcodec_decode_video2': /usr/lib/i686/cmov/libavcodec .so: 未定義のシンボル: avcodec_decode_video2
ただし、ffmpeg はコマンド ラインからうまく機能します。
JavaCV の作成者は、このリンクを確認するように勧めました: http://linux-tipps.blogspot.com/2009/05/pretending-package-is-installed-by.html
おそらく私は何か間違ったことをしていますが、このように libavcodec51 を再インストールすることはできません。
質問は次のとおりです。 1. 上記の解決策は優れているので、どうにかして成功させる必要がありますか? 2. 問題を解決する他の方法は何ですか?
事前にご提案いただきありがとうございます。
c++ - problem: FFMPEG seeking with av_seek_frame using byte positions
I am trying to get the av_seek_frame() function to go to a byte position I specify. I am implementing a frame accurate seeking mechanism for my application, and the way I see it, I will scan the entire video file, and store byte positions for each keyframe in a struct. I found out where to get the current byte position: AVPacket.pos. I now test this position with av_seek_frame
like this:
However, this does not seem to do the right thing, when I call av_read_frame
, it just starts with frame 23. If I do not seek, it starts at frame 1.
php - libavcodec と php
libavcodec http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/api-example_8c-source.htmlの c の例を参照してください 。これは、オーディオとビデオ (フレームごと) のエンコード/デコードです。私はこのようなものを意図していますが、php.
アップロードと同時に動画を変換したい。例: ユーザーが 100 MB のビデオをアップロードします。サーバーが最初のデータを受信すると、変換してからアップロードが行われるのを待ちます。
誰かが私を助けることができますか?ありがとうございました
c# - オーディオ再生を実装するための最良の方法
私はファイルパスを読み込んでオーディオファイルを再生するアプリケーションに取り組んでいます。既存のコーデックと無料/オープンユーティリティを使用して、これをできるだけシンプルにしようとしています。これを行うための最良の方法についていくつか提案をお願いします。私には2つのアイデアがあり、どちらもFFmpegに関係しています。
- ユーザーが再生するファイルのパスを読み取ることができる簡単なGUIを作成し、ffplay.exeプロセスをバックグラウンドで実行してファイルを再生します。
- libavcodecを使用し、それで利用可能な機能に基づいてプロジェクトを作成するだけで、さらに深く掘り下げることができます。
これについて私が持っている主な目標はほんのわずかです。
- 複数のファイルを途切れることなく読み込んで再生できる
- トラック内の任意の場所(合計時間のパーセントに基づく)で再生を開始します
- 任意の時間が経過したら再生を停止し、次のトラックに移動します
私の2つの方法のうち、このプロジェクトで最も実用的と思われるのはどちらですか?あなたが提案するFFmpegの代わりに、より良い(あるいはおそらく機能集約的ではない)ものはありますか?
これは、C#で記述されたWindowsアプリケーション用です。
編集:私がFFmpegを始めた理由の1つは、多くのファイルタイプ、特にMP3、AAC、Flacを処理できることです。
Edit2:libavcode.dllの使用が最良のオプションである場合は、C#での実装に関する情報を入手することも役立ちます。
c++ - ffmpeg(libavcodec)を使用してRTP経由でH264ビデオをデコードする際の問題
AvCodecContextのprofile_idc、level_idc、extradata、extradata_sizeを、SDPのprofile-level-idetsprop-parameter-setで設定しました。
コード化されたスライス、SPS、PPS、およびNAL_IDR_SLICEパケットのデコードを分離します。
初期化:
uint8_t start_sequence [] = {0、0、1}; int size = recv(id_de_la_socket、(char *)rtpReceive、65535,0);
コード化されたスライス:
結果:ConsumedBytes>0およびGotPicture>0(多くの場合)
SPSおよびPPS:
同一のコード。結果:ConsumedBytes>0およびGotPicture= 0
普通だと思います
新しいカップルSPS/PPSを見つけたら、extradataとextrada_sizeをこのパケットのペイロードとそのサイズで更新します。
NAL_IDR_SLICE:
Nalユニットタイプは28です=>idrフレームが断片化されているため、2つの方法でデコードを試みました
1)最初のフラグメント(RTPヘッダーなし)の前にシーケンス0x000001を付けて、avcodec_decode_videoに送信します。次に、残りのフラグメントをこの関数に送信します。
2)最初のフラグメント(RTPヘッダーなし)の前にシーケンス0x000001を付け、残りのフラグメントをそれに連結します。このバッファをデコーダに送信します。
どちらの場合も、エラーは発生しません(ConsumedBytes> 0)が、フレームは検出されません(GotPicture = 0)...
何が問題ですか ?