int main(int argc, char *argv[]) { const int frame_w = 640; const int frame_h = 480; if (argc < 4) { printf("usage: %s <image file> <subtitle file> <time>\n", argv[0]); exit(1); } char *imgfile = argv[1]; char *subfile = argv[2]; double tm = strtod(argv[3], 0); init(frame_w, frame_h); ASS_Track *track = ass_read_file(ass_library, subfile, NULL); if (!track) { printf("track init failed!\n"); return 1; } ASS_Image *img = ass_render_frame(ass_renderer, track, (int) (tm * 1000), NULL); image_t *frame = gen_image(frame_w, frame_h); blend(frame, img); ass_free_track(track); ass_renderer_done(ass_renderer); ass_library_done(ass_library); write_png(imgfile, frame); return 0; }
ASS_Track *libass_load_subtitles(LibassConfiguration *libass_conf, char *subtitles_path) { ASS_Track *subtitles = NULL; subtitles = ass_read_file(libass_conf->library, subtitles_path, "utf-8"); if (subtitles == NULL){ printf("Couldn't load the subtitles : %s\n",subtitles_path); exit(EXIT_FAILURE); } }
bool BigPotSubtitleAss::openSubtitle(const string& filename) { //函数的参数是char*,为免意外复制一份 auto s = filename; //if (checkFileExt(filename)) _track = ass_read_file(_lib, (char*)s.c_str(), NULL); haveSubtitle_ = (_track != nullptr); if (haveSubtitle_) subfilename_ = filename; return haveSubtitle_; }
int main(int argc, char *argv[]) { if (argc < 5) { printf("usage: %s <video_file> <subtitle_file>\n", argv[0]); exit(1); } char *videofile = argv[1]; char *subfile = argv[2]; const int frame_w = atoi(argv[3]); const int frame_h = atoi(argv[4]); init(frame_w, frame_h); ASS_Track *track = ass_read_file(ass_library, subfile, NULL); if (!track) { printf("track init failed!\n"); return 1; } char file[1000]; sprintf(file, "gen_%s_%s.sh", videofile, subfile); FILE *p; p = fopen(file, "w"); int i = 0; double prevous_time = 0; double this_time = 0; for (i = 0; i < track->n_events; ++i) { ASS_Event *event = track->events + i; char s[1000]; int j = 0; int ok = 0; while (!ok) { ok = 1; if (event->Text[j] == '{') { while (event->Text[j] && event->Text[j] != '}') { ++j; } ++j; ok = 0; } } this_time = (event->Start + event->Duration / 2) * 1.0 / 1000.0; prevous_time = this_time - 20; if (prevous_time <= 0) prevous_time = 0; fprintf(p, "./merge.sh %s %s %010.2lf %010.2lf %010.2lf \"%s\" %d %d\n", videofile, subfile, prevous_time, this_time - prevous_time, this_time, event->Text + j, frame_w, frame_h); } fclose(p); return 0; }
int main(int argc, char *argv[]) { /*if (argc < 3) { printf("usage: %s <image file> <subtitle file> <time>\n", argv[0]); exit(1); }*/ char *subfile = "in.ass"; double tm = 10; ass_library = ass_library_init(); if (!ass_library) { printf("ass_library_init failed!\n"); exit(1); } ass_set_message_cb(ass_library, msg_callback, NULL); ass_renderer = ass_renderer_init(ass_library); if (!ass_renderer) { printf("ass_renderer_init failed!\n"); exit(1); } track = ass_read_file(ass_library, subfile, NULL); if (!track) { printf("track init failed!\n"); return 1; } int frame_w = track->PlayResX; int frame_h = track->PlayResY; ass_set_frame_size(ass_renderer, frame_w, frame_h); ass_set_fonts(ass_renderer, "font.ttf", "Sans", 1, NULL, 1); ass_set_cache_limits(ass_renderer, 100, 1); SDL_Init(SDL_INIT_VIDEO); SDL_CreateWindowAndRenderer(frame_w, frame_h, 0, &window, &renderer); SDL_SetRenderDrawColor(renderer, 47, 163, 254, 255); emscripten_set_main_loop(loop, 0, 1); //SDL_Quit(); //ass_free_track(track); //ass_renderer_done(ass_renderer); //ass_library_done(ass_library); return 0; }
bool SubtitleProcessorLibASS::process(const QString &path) { if (!ass::api::loaded()) return false; if (m_track) { ass_free_track(m_track); m_track = 0; } m_track = ass_read_file(m_ass, (char*)path.toUtf8().constData(), NULL); if (!m_track) { qWarning("ass_read_file error, ass track init failed!"); return false; } processTrack(m_track); return true; }
static av_cold int init_ass(AVFilterContext *ctx) { AssContext *ass = ctx->priv; int ret = init(ctx); if (ret < 0) return ret; /* Initialize fonts */ ass_set_fonts(ass->renderer, NULL, NULL, 1, NULL, 1); ass->track = ass_read_file(ass->library, ass->filename, NULL); if (!ass->track) { av_log(ctx, AV_LOG_ERROR, "Could not create a libass track when reading file '%s'\n", ass->filename); return AVERROR(EINVAL); } return 0; }
static void VS_CC assInit(VSMap *in, VSMap *out, void **instanceData, VSNode *node, VSCore *core, const VSAPI *vsapi) { AssData *d = (AssData *) * instanceData; vsapi->setVideoInfo(d->vi, 2, node); d->ass_library = ass_library_init(); if(!d->ass_library) { vsapi->setError(out, "failed to initialize ASS library"); return; } ass_set_message_cb(d->ass_library, assDebugCallback, (void *)d->debuglevel); ass_set_extract_fonts(d->ass_library, 0); ass_set_style_overrides(d->ass_library, 0); d->ass_renderer = ass_renderer_init(d->ass_library); if(!d->ass_renderer) { vsapi->setError(out, "failed to initialize ASS renderer"); return; } ass_set_font_scale(d->ass_renderer, d->scale); ass_set_frame_size(d->ass_renderer, d->vi[0].width, d->vi[0].height); ass_set_margins(d->ass_renderer, d->margins[0], d->margins[1], d->margins[2], d->margins[3]); ass_set_use_margins(d->ass_renderer, 1); if(d->linespacing) ass_set_line_spacing(d->ass_renderer, d->linespacing); if(d->sar) { ass_set_aspect_ratio(d->ass_renderer, (double)d->vi[0].width / d->vi[0].height * d->sar, 1); } if(d->fontdir) ass_set_fonts_dir(d->ass_library, d->fontdir); ass_set_fonts(d->ass_renderer, NULL, NULL, 1, NULL, 1); if(d->file == NULL) { char *str, *text, x[16], y[16]; size_t siz; const char *fmt = "[Script Info]\n" "ScriptType: v4.00+\n" "PlayResX: %s\n" "PlayResY: %s\n" "[V4+ Styles]\n" "Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n" "Style: Default,%s\n" "[Events]\n" "Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n" "Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,%s\n"; sprintf(x, "%d", d->vi[0].width); sprintf(y, "%d", d->vi[0].height); text = strrepl(d->text, "\n", "\\N"); siz = (strlen(fmt) + strlen(x) + strlen(y) + strlen(d->style) + strlen(text)) * sizeof(char); str = malloc(siz); sprintf(str, fmt, x, y, d->style, text); free(text); d->ass = ass_new_track(d->ass_library); ass_process_data(d->ass, str, strlen(str)); free(str); } else { d->ass = ass_read_file(d->ass_library, (char *)d->file, (char *)d->charset); } if(!d->ass) { vsapi->setError(out, "unable to parse input file"); return; } }