我正在使用fffmpeg进行一些视频工作,现在我得到了一些长号。 我不知道如何获得转码的进度。 我检查了ffmpeg.c,发现大部分时间花费是“转码”, 这是ffmpeg.c#transcode的源代码:
/* parse options and open all input/output files */
ret = ffmpeg_parse_options(argc, argv);
if (ret < 0){
return exit_program(1);
}
if (nb_output_files <= 0 && nb_input_files == 0) {
show_usage();
av_log(NULL, AV_LOG_WARNING, "Use -h to get full help or, even better, run 'man %s'\n", program_name);
return exit_program(1);
}
/* file converter / grab */
if (nb_output_files <= 0) {
av_log(NULL, AV_LOG_FATAL, "At least one output file must be specified\n");
return exit_program(1);
}
if (nb_input_files == 0) {
av_log(NULL, AV_LOG_FATAL, "At least one input file must be specified\n");
return exit_program(1);
}
for (i = 0; i < nb_output_files; i++) {
if (strcmp(output_files[i]->ctx->oformat->name, "rtp"))
want_sdp = 0;
}
current_time = ti = getutime();
if (transcode() < 0){
return exit_program(1);
}
我这样叫ffmpeg:
int execute(int argc,char ** argv) {
print_report(int is_last_report, int64_t timer_start, int64_t cur_time),
return main_return_code; }
有任何想法吗?
非常感谢。
#非常感谢,现在我明白了。 在ffmpeg.c中,功能
secs = FFABS(pts) / AV_TIME_BASE;
us = FFABS(pts) % AV_TIME_BASE;
mins = secs / 60;
secs %= 60;
hours = mins / 60;
mins %= 60;
我有一些代码块:
{{1}}
据此我可以知道转码的持续时间。
答案 0 :(得分:0)
首先获取电影的时长: int64_t 持续时间 = output_files[0]->ctx->duration;
while 循环中的第二个: 您可以使用此公式计算百分比: int百分比 = (int)(((double)(cur_time - timer_start) / (double)(duration )) * 100);