2

私はFFMpegを初めて使用し、コマンドラインオプション -f dvd を使用するのと同等のことをしたいのですが、私のアプリではlibav APIを使用しています。FFMpeg のソースでは、オプションはいくつかのパラメーターを次のように設定します。

 opt_video_codec(o, "c:v", "mpeg2video");
 opt_audio_codec(o, "c:a", "ac3");
 parse_option(o, "f", "dvd", options);

 parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
 parse_option(o, "r", frame_rates[norm], options);
 parse_option(o, "pix_fmt", "yuv420p", options);
 av_dict_set(&o->g->codec_opts, "g", norm == PAL ? "15" : "18", AV_DICT_DONT_OVERWRITE);

 av_dict_set(&o->g->codec_opts, "b:v", "6000000", AV_DICT_DONT_OVERWRITE);
 av_dict_set(&o->g->codec_opts, "maxrate", "9000000", AV_DICT_DONT_OVERWRITE);
 av_dict_set(&o->g->codec_opts, "minrate", "0", AV_DICT_DONT_OVERWRITE); // 1500000;
 av_dict_set(&o->g->codec_opts, "bufsize", "1835008", AV_DICT_DONT_OVERWRITE); // 224*1024*8;

 av_dict_set(&o->g->format_opts, "packetsize", "2048", AV_DICT_DONT_OVERWRITE);  // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack.
 av_dict_set(&o->g->format_opts, "muxrate", "10080000", AV_DICT_DONT_OVERWRITE); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8

 av_dict_set(&o->g->codec_opts, "b:a", "448000", AV_DICT_DONT_OVERWRITE);
 parse_option(o, "ar", "48000", options);

これらは libav api とどのように関連していますか?

着信ビデオ フレームは、yuv420p 形式で 720x576 の pal の正しい解像度です。私のパラメータのいくつか...

pCodec = avcodec_find_encoder(AV_CODEC_ID_MPEG2VIDEO);

pContext->bitrate = 48000000;
pContext->width = 720;
pContext->height = 576;

AVRational fps = {1,25};
pContext->time_base = fps;

pContext->gop_size = 15;
pContext->max_b_frmaes = 2;
pContext->pix_fmt = AV_PIX_FMT_YUV420P;

av_set_dict(&pDict,"packet_size","2048",0); // This seems to be ignored?

avcodec_open2(pContext,pCodec,&pDict);

AVDictionary...辞書とは何ですか? エンコーディングプロセスとどのように関連していますか? コードの設定のコレクションを渡すための単なるユーザー辞書ですか?

最終的には、既に pal dvd の正しいサイズと形式になっている着信ビデオ フレームをトランスコードし、dvd 準拠の mpeg2 ビデオ (2048 バイトのデータ パケット) を出力できるようにしたいと考えています。mpeg2 ビデオ形式は理解していますが、ffmpeg パラメータと混同しています。

ありがとう!

4

0 に答える 0