FFmpeg-如何获得转码进度?

时间:2018-09-29 03:01:12

标签: ffmpeg

我正在使用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) {

如果是CONFIG_AVDEVICE

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}}

据此我可以知道转码的持续时间。

1 个答案:

答案 0 :(得分:0)

首先获取电影的时长: int64_t 持续时间 = output_files[0]->ctx->duration;

while 循环中的第二个: 您可以使用此公式计算百分比: int百分比 = (int)(((double)(cur_time - timer_start) / (double)(duration )) * 100);