📄 main.c
字号:
open_edit = 1; } else if (!stricmp(arg, "-set-kms")) { char szTK[20], *ext; CHECK_NEXT_ARG if (nb_track_act>=MAX_CUMUL_OPS) { fprintf(stdout, "Sorry - no more than %d track operations allowed\n", MAX_CUMUL_OPS); return 1; } strncpy(szTK, argv[i+1], 19); ext = strchr(szTK, '='); tracks[nb_track_act].act_type = 3; tracks[nb_track_act].trackID = 0; if (!strnicmp(argv[i+1], "all=", 4)) { tracks[nb_track_act].kms = argv[i+1] + 4; } else if (!ext) { tracks[nb_track_act].kms = argv[i+1]; } else { tracks[nb_track_act].kms = ext+1; ext[0] = 0; tracks[nb_track_act].trackID = atoi(szTK); ext[0] = '='; } open_edit = 1; nb_track_act++; i++; } else if (!stricmp(arg, "-split")) { CHECK_NEXT_ARG split_duration = atof(argv[i+1]); i++; split_size = 0; } else if (!stricmp(arg, "-split-size") || !stricmp(arg, "-splits")) { CHECK_NEXT_ARG split_size = atoi(argv[i+1]); i++; split_duration = 0; } else if (!stricmp(arg, "-split-chunk") || !stricmp(arg, "-splitx")) { CHECK_NEXT_ARG if (!strstr(argv[i+1], ":")) { fprintf(stdout, "Chunk extraction usage: \"-splitx start->end\" expressed in seconds\n"); return 1; } sscanf(argv[i+1], "%lf:%lf", &split_start, &split_duration); split_duration -= split_start; split_size = 0; i++; } /*meta*/ else if (!stricmp(arg, "-set-meta")) { CHECK_META_OPS metas[nb_meta_act].act_type = 0; parse_meta_args(&metas[nb_meta_act], argv[i+1]); nb_meta_act++; open_edit = 1; i++; } else if (!stricmp(arg, "-add-item")) { CHECK_META_OPS metas[nb_meta_act].act_type = 1; parse_meta_args(&metas[nb_meta_act], argv[i+1]); nb_meta_act++; open_edit = 1; i++; } else if (!stricmp(arg, "-rem-item")) { CHECK_META_OPS metas[nb_meta_act].act_type = 2; parse_meta_args(&metas[nb_meta_act], argv[i+1]); nb_meta_act++; open_edit = 1; i++; } else if (!stricmp(arg, "-set-primary")) { CHECK_META_OPS metas[nb_meta_act].act_type = 3; parse_meta_args(&metas[nb_meta_act], argv[i+1]); nb_meta_act++; open_edit = 1; i++; } else if (!stricmp(arg, "-set-xml")) { CHECK_META_OPS metas[nb_meta_act].act_type = 4; parse_meta_args(&metas[nb_meta_act], argv[i+1]); nb_meta_act++; open_edit = 1; i++; } else if (!stricmp(arg, "-rem-xml")) { CHECK_META_OPS metas[nb_meta_act].act_type = 6; if (parse_meta_args(&metas[nb_meta_act], argv[i+1])) i++; nb_meta_act++; open_edit = 1; } else if (!stricmp(arg, "-dump-xml")) { CHECK_META_OPS metas[nb_meta_act].act_type = 7; parse_meta_args(&metas[nb_meta_act], argv[i+1]); nb_meta_act++; i++; } else if (!stricmp(arg, "-dump-item")) { CHECK_META_OPS metas[nb_meta_act].act_type = 8; parse_meta_args(&metas[nb_meta_act], argv[i+1]); nb_meta_act++; i++; } else if (!stricmp(arg, "-package")) { CHECK_NEXT_ARG pack_file = argv[i+1]; i++; } else if (!stricmp(arg, "-brand")) { char *b = argv[i+1]; CHECK_NEXT_ARG major_brand = GF_4CC(b[0], b[1], b[2], b[3]); open_edit = 1; if (b[4]==':') minor_version = atoi(b+5); i++; } else if (!stricmp(arg, "-ab")) { char *b = argv[i+1]; CHECK_NEXT_ARG if (nb_alt_brand_add>=MAX_CUMUL_OPS) { fprintf(stdout, "Sorry - no more than %d brand remove operations allowed\n", MAX_CUMUL_OPS); return 1; } brand_add[nb_alt_brand_add] = GF_4CC(b[0], b[1], b[2], b[3]); nb_alt_brand_add++; open_edit = 1; i++; } else if (!stricmp(arg, "-rb")) { char *b = argv[i+1]; CHECK_NEXT_ARG if (nb_alt_brand_rem>=MAX_CUMUL_OPS) { fprintf(stdout, "Sorry - no more than %d brand remove operations allowed\n", MAX_CUMUL_OPS); return 1; } brand_rem[nb_alt_brand_rem] = GF_4CC(b[0], b[1], b[2], b[3]); nb_alt_brand_rem++; open_edit = 1; i++; }#endif else if (!stricmp(arg, "-languages")) { PrintLanguages(); return 0; } else if (!stricmp(arg, "-h")) { if (i+1== (u32) argc) PrintUsage(); else if (!strcmp(argv[i+1], "extract")) PrintExtractUsage(); else if (!strcmp(argv[i+1], "dump")) PrintDumpUsage(); else if (!strcmp(argv[i+1], "swf")) PrintSWFUsage();#ifndef GPAC_READ_ONLY else if (!strcmp(argv[i+1], "general")) PrintGeneralUsage(); else if (!strcmp(argv[i+1], "hint")) PrintHintUsage(); else if (!strcmp(argv[i+1], "import")) PrintImportUsage(); else if (!strcmp(argv[i+1], "format")) PrintFormats(); else if (!strcmp(argv[i+1], "encode")) PrintEncodeUsage(); else if (!strcmp(argv[i+1], "crypt")) PrintEncryptUsage(); else if (!strcmp(argv[i+1], "meta")) PrintMetaUsage();#endif else if (!strcmp(argv[i+1], "all")) {#ifndef GPAC_READ_ONLY PrintGeneralUsage(); PrintHintUsage(); PrintImportUsage(); PrintFormats(); PrintEncodeUsage(); PrintEncryptUsage(); PrintMetaUsage();#endif PrintExtractUsage(); PrintDumpUsage(); PrintSWFUsage(); } else PrintUsage(); return 0; } else if (!stricmp(arg, "-v")) verbose = 1; else if (!stricmp(arg, "-tag-list")) { fprintf(stdout, "Supported iTunes tag modifiers:\n"); for (i=0; i<nb_itunes_tags; i++) { fprintf(stdout, "\t%s\t%s\n", itags[i].name, itags[i].comment); } return 0; } else { fprintf(stdout, "Option %s unknown. Please check usage\n", arg); return 1; } } if (!inName) { PrintUsage(); return 1; } if (raw_cat) { char chunk[4096]; FILE *fin, *fout; s64 to_copy, done; fin = gf_f64_open(raw_cat, "rb"); if (!fin) return 1; fout = gf_f64_open(inName, "a+b"); if (!fout) { fclose(fin); return 1; } gf_f64_seek(fin, 0, SEEK_END); to_copy = gf_f64_tell(fin); gf_f64_seek(fin, 0, SEEK_SET); done = 0; while (1) { u32 nb_bytes = fread(chunk, 1, 4096, fin); fwrite(chunk, 1, nb_bytes, fout); done += nb_bytes; fprintf(stdout, "Appending file %s - %02.2f done\r", raw_cat, 100.0*done/to_copy); if (done >= to_copy) break; } fclose(fin); fclose(fout); return 0; } gf_log_set_level(verbose ? GF_LOG_DEBUG : GF_LOG_INFO); gf_log_set_tools(GF_LOG_CONTAINER|GF_LOG_SCENE|GF_LOG_PARSER|GF_LOG_AUTHOR|GF_LOG_CODING); if (quiet) { gf_log_set_level(0); gf_set_progress_callback(NULL, progress_quiet); } /*init libgpac*/ gf_sys_init(); if (do_saf && !encode) { switch (get_file_type_by_ext(inName)) { case 2: case 3: case 4: encode = 1; break; } } if (dump_mode == 1 + GF_SM_DUMP_SVG) { if (strstr(inName, ".srt") || strstr(inName, ".ttxt")) import_subtitle = 2; } if (import_subtitle && !trackID) {#ifndef GPAC_READ_ONLY GF_MediaImporter import; file = gf_isom_open("ttxt_convert", GF_ISOM_OPEN_WRITE, NULL); memset(&import, 0, sizeof(GF_MediaImporter)); import.dest = file; import.in_name = inName; e = gf_media_import(&import); if (e) { fprintf(stdout, "Error importing %s: %s\n", inName, gf_error_to_string(e)); gf_isom_delete(file); gf_delete_file("ttxt_convert"); return 1; } strcpy(outfile, outName ? outName : inName); if (strchr(outfile, '.')) { while (outfile[strlen(outfile)-1] != '.') outfile[strlen(outfile)-1] = 0; outfile[strlen(outfile)-1] = 0; } dump_timed_text_track(file, gf_isom_get_track_id(file, 1), dump_std ? NULL : outfile, 1, (import_subtitle==2) ? 2 : dump_srt); gf_isom_delete(file); gf_delete_file("ttxt_convert"); if (e) { fprintf(stdout, "Error converting %s: %s\n", inName, gf_error_to_string(e)); return 1; } return 0;#else fprintf(stdout, "Error: read-only version\n"); return 1;#endif }#ifndef GPAC_READ_ONLY if (nb_add) { u8 open_mode = GF_ISOM_OPEN_EDIT; if (force_new) { open_mode = (do_flat) ? GF_ISOM_OPEN_WRITE : GF_ISOM_WRITE_EDIT; } else { FILE *test = fopen(inName, "rb"); if (!test) { open_mode = (do_flat) ? GF_ISOM_OPEN_WRITE : GF_ISOM_WRITE_EDIT; if (!outName) outName = inName; } else fclose(test); } open_edit = 1; file = gf_isom_open(inName, open_mode, tmpdir); if (!file) { fprintf(stdout, "Cannot open destination file %s: %s\n", inName, gf_error_to_string(gf_isom_last_error(NULL)) ); return 1; } for (i=0; i<nb_add; i++) { e = import_file(file, szTracksToAdd[i], import_flags, import_fps, agg_samples); if (e) { fprintf(stdout, "Error importing %s: %s\n", szTracksToAdd[i], gf_error_to_string(e)); gf_isom_delete(file); return 1; } } /*unless explicitly asked, remove all systems tracks*/ if (!keep_sys_tracks) remove_systems_tracks(file); needSave = 1; if (!conv_type && can_convert_to_isma(file)) conv_type = GF_ISOM_CONV_TYPE_ISMA; } if (nb_cat) { if (!file) { u8 open_mode = GF_ISOM_OPEN_EDIT; if (force_new) { open_mode = (do_flat) ? GF_ISOM_OPEN_WRITE : GF_ISOM_WRITE_EDIT; } else { FILE *test = fopen(inName, "rb"); if (!test) { open_mode = (do_flat) ? GF_ISOM_OPEN_WRITE : GF_ISOM_WRITE_EDIT; if (!outName) outName = inName; } else fclose(test); } open_edit = 1; file = gf_isom_open(inName, open_mode, tmpdir); if (!file) { fprintf(stdout, "Cannot open destination file %s: %s\n", inName, gf_error_to_string(gf_isom_last_error(NULL)) ); return 1; } } for (i=0; i<nb_cat; i++) { e = cat_isomedia_file(file, szFilesToCat[i], import_flags, import_fps, agg_samples, tmpdir); if (e) { fprintf(stdout, "Error appending %s: %s\n", szFilesToCat[i], gf_error_to_string(e)); gf_isom_delete(file); return 1; } } /*unless explicitly asked, remove all systems tracks*/ if (!keep_sys_tracks) remove_systems_tracks(file); needSave = 1; if (conv_type && can_convert_to_isma(file)) conv_type = GF_ISOM_CONV_TYPE_ISMA; }#endif#ifndef GPAC_READ_ONLY else if (chunk_mode) { if (!inName) { fprintf(stdout, "chunk encoding syntax: [-outctx outDump] -inctx inScene auFile\n"); return 1; } e = EncodeFileChunk(inName, outName ? outName : inName, input_ctx, output_ctx, tmpdir); if (e) fprintf(stdout, "Error encoding chunk file %s\n", gf_error_to_string(e)); return e ? 1 : 0; }#endif else if (encode) {#ifndef GPAC_READ_ONLY FILE *logs = NULL; if (do_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -