static void build_full_cmd(char *cmd, size_t nSize, const CONF_GUIEX *conf, const OUTPUT_INFO *oip, const PRM_ENC *pe, const SYSTEM_DATA *sys_dat, const char *input) { CONF_GUIEX prm; //パラメータをコピー memcpy(&prm, conf, sizeof(CONF_GUIEX)); //共通置換を実行 cmd_replace(prm.vid.cmdex, sizeof(prm.vid.cmdex), pe, sys_dat, conf, oip); cmd_replace(prm.vid.stats, sizeof(prm.vid.stats), pe, sys_dat, conf, oip); cmd_replace(prm.vid.tcfile_in, sizeof(prm.vid.tcfile_in), pe, sys_dat, conf, oip); cmd_replace(prm.vid.cqmfile, sizeof(prm.vid.cqmfile), pe, sys_dat, conf, oip); if (!prm.oth.disable_guicmd) { //cliモードでない //自動設定の適用 apply_guiEx_auto_settings(&prm.x264, oip->w, oip->h, oip->rate, oip->scale, sys_dat->exstg->s_local.auto_ref_limit_by_level); //GUI部のコマンドライン生成 build_cmd_from_conf(cmd, nSize, &prm.x264, &prm.vid, FALSE); } //cmdexのうち、読み取られなかったコマンドを追加する if (str_has_char(prm.vid.cmdex)) append_cmdex(cmd, nSize, prm.vid.cmdex, prm.oth.disable_guicmd, conf); //メッセージの発行 if ((conf->x264.vbv_bufsize != 0 || conf->x264.vbv_maxrate != 0) && prm.vid.afs) write_log_auo_line(LOG_INFO, "自動フィールドシフト使用時はvbv設定は正確に反映されません。"); //キーフレーム検出を行い、そのQPファイルが存在し、かつ--qpfileの指定がなければ、それをqpfileで読み込む char auoqpfile[MAX_PATH_LEN]; apply_appendix(auoqpfile, _countof(auoqpfile), pe->temp_filename, pe->append.qp); BOOL disable_keyframe_afs = conf->vid.afs && !sys_dat->exstg->s_local.set_keyframe_as_afs_24fps; if (prm.vid.check_keyframe && !disable_keyframe_afs && PathFileExists(auoqpfile) && strstr(cmd, "--qpfile") == NULL) sprintf_s(cmd + strlen(cmd), nSize - strlen(cmd), " --qpfile \"%s\"", auoqpfile); //1pass目でafsでない、--framesがなければ--framesを指定 if ((!prm.vid.afs || pe->current_x264_pass > 1) && strstr(cmd, "--frames") == NULL) sprintf_s(cmd + strlen(cmd), nSize - strlen(cmd), " --frames %d", oip->n - pe->drop_count + pe->delay_cut_additional_vframe); //解像度情報追加(--input-res) if (strcmp(input, PIPE_FN) == NULL) sprintf_s(cmd + strlen(cmd), nSize - strlen(cmd), " --input-res %dx%d", oip->w, oip->h); //rawの形式情報追加 sprintf_s(cmd + strlen(cmd), nSize - strlen(cmd), " --input-csp %s", specify_input_csp(prm.x264.output_csp)); //fps//tcfile-inが指定されていた場合、fpsの自動付加を停止] if (!prm.x264.use_tcfilein && strstr(cmd, "--tcfile-in") == NULL) { int gcd = get_gcd(oip->rate, oip->scale); sprintf_s(cmd + strlen(cmd), nSize - strlen(cmd), " --fps %d/%d", oip->rate / gcd, oip->scale / gcd); } //出力ファイル const char * const outfile = (prm.x264.nul_out) ? "nul" : pe->temp_filename; sprintf_s(cmd + strlen(cmd), nSize - strlen(cmd), " -o \"%s\"", outfile); //入力 sprintf_s(cmd + strlen(cmd), nSize - strlen(cmd), " \"%s\"", input); }
void inter_instr() { char opt; idx_cmd = 0; if (cmd == NULL || cmd[idx_cmd] == '\0') notif_error("No option"); opt = cmd[idx_cmd++]; if (opt == 'E') return cmd_exit(); next_arg(); if (opt == 'D') return cmd_delete(); if (opt == 'I') return cmd_insert(); if (opt == 'R') return cmd_replace(); notif_error("Invalid option"); }
static AUO_RESULT set_keyframe_from_chapter(std::vector<int> *keyframe_list, const CONF_GUIEX *conf, const OUTPUT_INFO *oip, const PRM_ENC *pe, const SYSTEM_DATA *sys_dat) { AUO_RESULT ret = AUO_RESULT_SUCCESS; //mux設定がなければスキップ if (pe->muxer_to_be_used == MUXER_DISABLED) { //スキップ write_log_auo_line(LOG_INFO, "使用するmuxerが設定されていないため、チャプターからのキーフレーム検出は行いません。"); } else { //チャプターファイル名作成 char chap_file[MAX_PATH_LEN] = { 0 }; const MUXER_SETTINGS *mux_stg = &sys_dat->exstg->s_mux[(pe->muxer_to_be_used == MUXER_TC2MP4) ? MUXER_MP4 : pe->muxer_to_be_used]; const MUXER_CMD_EX *muxer_mode = &mux_stg->ex_cmd[get_mux_excmd_mode(conf, pe)]; strcpy_s(chap_file, _countof(chap_file), muxer_mode->chap_file); cmd_replace(chap_file, _countof(chap_file), pe, sys_dat, conf, oip); chapter_file chapter; if (!str_has_char(chap_file) || !PathFileExists(chap_file)) { write_log_auo_line(LOG_INFO, "チャプターファイルが存在しません。"); //チャプターリストを取得 } else if (AUO_CHAP_ERR_NONE != chapter.read_file(chap_file, CODE_PAGE_UNSET, 0.0)) { ret |= AUO_RESULT_ERROR; write_log_auo_line(LOG_WARNING, "チャプターファイルからチャプター設定を読み取れませんでした。"); //チャプターがない場合 } else if (0 == chapter.chapters.size()) { write_log_auo_line(LOG_WARNING, "チャプターファイルからチャプター設定を読み取れませんでした。"); } else { const double fps = oip->rate / (double)oip->scale; //QPファイルを出力 for (const auto& chap : chapter.chapters) { double chap_time_s = chap->get_ms() / 1000.0; int i_frame = (int)(chap_time_s * fps + 0.5); keyframe_list->push_back(i_frame); } write_log_auo_line_fmt(LOG_INFO, "チャプターファイルから %d箇所 キーフレーム設定を行いました。", chapter.chapters.size()); } } return ret; }