1

私は現在、Qt DesignerツールとV4L2を使用してLinux上のWebサイトからビデオをキャプチャし、C ++でffmpegライブラリを作成するアプリケーションを開発しています。画像をキャプチャするには、libV4L2を使用しても問題はありません。 ffmpeg libsに基づくエンコーダーに送信すると、最初にエンコーダーがビデオファイルを作成し、このファイルにエンコードするための画像を受信します。私の問題は次のとおりです。エンコードは通常行われていますが、再生を開始すると録画したビデオファイルでは、通常の速度に比べて速度が速くなっているようです!だから明らかなことは、問題はビデオエンコーディングにあります、私の質問は、ffmpegエンコーディングスピード画像を管理する方法または機能がありますか????? ご協力ありがとうございました。

4

3 に答える 3

2

FFMpegでカスタムエンコードされたビデオを作成する場合、実際には、出力ファイルに書き込まれる各AVPacketにPTSを設定する必要があります。AVCodecContextのtime_baseを設定すると、コンテナーに何を期待するかが通知されるだけです。PTS(プレゼンテーションタイムスタンプ)は、デコーダー(ビデオを表示するとき)に、その特定のフレームを実際に表示するタイミングを指示します。

例えば:

私はFFMpegのV4L2部分から入手したAVFrameを持っています。まず、av_picture_copyを使用してこのイメージのコピーを作成する方が安全です。(したがって、エンコーダーはAVFrame構造体のすべての追加情報を調べません。)

av_picture_copy( (AVPicture*) picture, (AVPicture*) pFrame, c->pix_fmt, c->width, c->height );

picture->pts = numFrames;

エンコードされたフレームの数に基づいてポイントを設定するようになりました

pDestFrame->pts = numFrames;

今エンコード

numEncodedBytes = avcodec_encode_video( AVCodecCtx, buffer, bufferSize, pDestFrame );

今すぐAVPacketを作成し、再スケーリング後にタイムスタンプを再設定します

AVPacket pkt;
av_init_packet(&pkt);

pkt.pts = av_rescale_q( c->coded_frame->pts, c->time_base, mpVideoStr->time_base );

if ( c->coded_frame->key_frame ) pkt.flags |= AV_PKT_FLAG_KEY;

pkt.stream_index = mpVideoStr->index;
pkt.data = outbuf;
pkt.size = out_size;

最後に、パケットを書き出すことができます

av_write_frame( formatCtx, &pkt );

これがH264ビデオエンコーディングで機能することは知っていますが、これを書いたときはH264にしか関心がなかったため、他のタイプのビデオで機能するかどうかは100%わかりません。

于 2011-09-15T14:24:09.940 に答える
0

写真にタイムスタンプを追加する必要があると思います。
FFMpegは可能な限り高速にエンコード/デコードを行います。自分で同期を作成する必要があります。通常、ビデオのデコードと再生では、フレームにタイムスタンプを付けるか、少なくともオーディオクロックとフレームレートを使用してタイムスタンプを作成できます。
ただし、これは同期の方法と実装方法に大きく依存します。
たぶんFFMpegのチュートリアルはあなたにいくつかの追加のヒントを与えるでしょう

于 2011-05-02T14:33:40.933 に答える
-1

ffmpegファイルを作成するときは、フレームレートを指定する必要があります。使用しているライブラリによって異なりますが、次のようなものを探してください。

pCodecContext->time_base.den = frames_per_second;
pCodecContext->time_base.num = 1;

それ以外の場合、Webカメラから10〜15 fpsを生成しているが、ファイルのデフォルトが30 fpsの場合、高速に再生されます。

Qt ffmpegラッパーについては、http://code.google.com/p/qtffmpegwrapper/を参照してください。

于 2011-05-02T14:46:58.200 に答える