Я новичок в использовании 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?
Входящие видеокадры имеют правильное разрешение для приятеля 720×576 в формате yuv420p. Некоторые из моих параметров …
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, совместимое с DVD (пакеты данных по 2048 байт). Я понимаю формат видео mpeg2, но меня смущают параметры ffmpeg.
Спасибо!
Задача ещё не решена.