首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“Past duration X.XXX too large”是什么意思?

“Past duration X.XXX too large”是什么意思?
EN

Stack Overflow用户
提问于 2015-06-11 21:51:53
回答 4查看 96.3K关注 0票数 159

当使用ffmpeg编码H.264时,我得到了以下类型的警告:

Past duration 0.603386 too large
Past duration 0.614372 too large
Past duration 0.606377 too large

它们是什么意思?我在网上或ffmpeg文档中没有找到任何清晰的东西。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-20 16:18:37

我收到了数以千计的带有特定编码的警告。我把1080p的视频缩小到了480p。在一个编辑点,由于源激光光盘中的缺陷而出现了一些不可靠的视频,这些消息开始出现,然后出现在之后的每一帧中。他们继续讲下去,就像下面这段简短的摘录:

Past duration 0.901115 too large=  535031kB time=00:54:15.06 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 31 times
Past duration 0.901115 too large=  535031kB time=00:54:15.62 bitrate=1346.3kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 34 times
Past duration 0.901115 too large=  535031kB time=00:54:16.21 bitrate=1346.0kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 36 times
Past duration 0.901115 too large=  535338kB time=00:54:16.83 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 39 times

最初的ffmpeg调用是这样的:

ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower \
                              -crf 17 -c:a copy -y output.mkv

按照这里的建议,我首先在输入中添加了-framerate 60000/1001。这并没有改善任何事情。我保留了-framerate并将-r 60000/1001添加到输出中。这仍然没有改善任何事情。我保留了这两个部分,最后添加了-async 1 -vsync 1。这导致我收到一个警告,仅此而已。该调用是:

ffmpeg -i input.mp4 -framerate 60000/1001 -s 720x480 -c:v libx264 \
           -preset slower -crf 17 -c:a copy -y output.mkv \
           -r 60000/1001 -async 1 -vsync 1

我在MediaInfo的详细转储中发现的唯一区别是删除了在第一个调用中发现的这一行,但在第二个调用中没有:

Delay relative to video                  : -33ms

然而,我检查了文件开头和结尾附近的A/V同步,两个文件之间的同步没有明显的区别。它们的运行时间也是相同的,但这只是在VLC中测量到的最接近的秒。所以我使用ffmpeg检查了帧数,如下所示:

ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -

并在输出末尾查找"frame=#“。

原来源视频有375226帧长,第一次调用产生375195帧,第二次调用产生375200帧。因此,第二次调用的警告消息要少得多,也少了5帧。

随后的测试表明,-framerate-r是不必要的,仅使用两个同步标志就足够了。这产生了与上面的第二个调用相同的结果,所以我找到的解决问题的第三个也是最简单的调用是:

ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower \
                   -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1

还有一个文件随后产生了一堆这样的警告,即使有同步标志,但添加回速率标志“修复”了它(只产生了两个而不是数千个警告)。所以有时第二次调用可以在第三次调用失败的情况下工作,出于我的直接目的,我将采用第二次调用,并希望它能解决大多数这些问题。

这都是在ffmpeg 4.0版本中实现的。

票数 30
EN

Stack Overflow用户

发布于 2015-06-11 21:57:46

查看source code,似乎输入流和输出流中的呈现时间(pts)之间的差异超过了设置为0.6的固定限制。

源代码中的代码片段:

    delta0 = sync_ipts - ost->sync_opts;
    delta  = delta0 + duration;

..。

        if (delta0 < 0 &&
        delta > 0 &&
        format_video_sync != VSYNC_PASSTHROUGH &&
        format_video_sync != VSYNC_DROP) {
        double cor = FFMIN(-delta0, duration);
        if (delta0 < -0.6) {
            av_log(NULL, AV_LOG_WARNING, "Past duration %f too large\n", -delta0);
        } else
            av_log(NULL, AV_LOG_DEBUG, "Cliping frame in rate conversion by %f\n", -delta0);
        sync_ipts += cor;
        duration -= cor;
        delta0 += cor;
    }

这只是一个快速浏览,所以请随时深入挖掘。

票数 51
EN

Stack Overflow用户

发布于 2018-09-22 10:38:10

根据FFmpeg issue #4700 - Past duration 0.999992 too large的说法,这只是一个警告。

使用-loglevel选项停止它:

ffmpeg -loglevel quiet -i input_file.xyz ....

可能的级别是数字或:

"quiet"
"panic"
"fatal"
"error"
"warning"
"info"
"verbose"
"debug"
"trace"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30782771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档