首页 > 解决方案 > `ffmpeg` 的输出是什么意思?

问题描述

我正在转换一个文件,这是输出。这个问题在这里有部分答案,所以我问的是它没有涵盖的部分。我调整了终端的宽度以保留输出历史

[olpc@laptop ~] ffmpeg -i input -c:a copy -s 384x216 output
ffmpeg version N-68778-g5c7227b Copyright (c) 2000-2014 the FFmpeg developers
  built on Dec 29 2014 22:12:54 with gcc 4.9.2 (GCC)

...

frame=2   fps=0.0 q=0.0  size=     0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=3   fps=2.0 q=0.0  size=     0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=5   fps=2.4 q=0.0  size=     0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=8   fps=2.9 q=0.0  size=     0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=10  fps=2.8 q=0.0  size=     0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=12  fps=2.9 q=0.0  size=     0kB time=00:00:00.00 bitrate=   0.0kbits/s
frame=13  fps=2.8 q=0.0  size=     0kB time=00:00:00.02 bitrate=  16.5kbits/s
frame=16  fps=3.1 q=0.0  size=     0kB time=00:00:00.48 bitrate=   0.8kbits/s
frame=19  fps=3.2 q=0.0  size=     0kB time=00:00:00.48 bitrate=   0.8kbits/s
frame=21  fps=3.2 q=0.0  size=     0kB time=00:00:00.48 bitrate=   0.8kbits/s

...

frame=687 fps=0.6 q=29.0 size=  1245kB time=00:00:22.84 bitrate= 446.5kbits/s
frame=688 fps=0.6 q=29.0 size=  1246kB time=00:00:22.84 bitrate= 446.7kbits/s
frame=689 fps=0.6 q=29.0 size=  1248kB time=00:00:22.84 bitrate= 447.5kbits/s
frame=690 fps=0.6 q=29.0 size=  1249kB time=00:00:22.84 bitrate= 447.8kbits/s
frame=691 fps=0.6 q=29.0 size=  1249kB time=00:00:22.84 bitrate= 448.0kbits/s
frame=692 fps=0.6 q=29.0 size=  1251kB time=00:00:22.84 bitrate= 448.7kbits/s
frame=693 fps=0.6 q=29.0 size=  1252kB time=00:00:22.84 bitrate= 448.8kbits/s
frame=694 fps=0.6 q=29.0 size=  1253kB time=00:00:22.84 bitrate= 449.1kbits/s
frame=695 fps=0.6 q=29.0 size=  1254kB time=00:00:22.84 bitrate= 449.7kbits/s
frame=696 fps=0.6 q=29.0 size=  1255kB time=00:00:22.84 bitrate= 449.9kbits/s
frame=697 fps=0.6 q=29.0 size=  1256kB time=00:00:22.84 bitrate= 450.2kbits/s
frame=698 fps=0.6 q=29.0 size=  1256kB time=00:00:22.84 bitrate= 450.3kbits/s
frame=699 fps=0.6 q=29.0 size=  1258kB time=00:00:22.84 bitrate= 451.0kbits/s
frame=699 fps=0.6 q=29.0 size=  1258kB time=00:00:22.87 bitrate= 450.5kbits/s
frame=701 fps=0.6 q=29.0 size=  1261kB time=00:00:23.31 bitrate= 443.1kbits/s

第二段耗时 20 秒:每行 1 秒直到最后一段,最后一段耗时 6 秒才显示。这种模式在文件的整个长度上重复。我的理解是,视频中每 15 帧就有一个控制帧,虽然没有控制帧,但视频以 1fps 的速度处理。

现在,我的问题是:time指的是什么?好像是指视频中的时间,但是为什么前13帧静止不动,然后爬升0.03秒,又跳了0.44秒?

还有,怎么bitrate能从0.0跳到16.5又回到0.8呢?(以上行都更新一秒钟)。我的意思是,如果 7 秒后比特率是 16.5kbit/s,那么它必须至少更新了 105.5kbits。这意味着即使它下一秒什么也不处理,比特率在下一 (8th) 秒后至少会达到 13.2kbit/s。

最后,q代表什么?

标签: ffmpeg

解决方案


部分答案:

bitrate由(文件大小)/(进入视频的时间量)计算得出。当进入文件的时间为 0 时,上面是未定义的,因此比特率被列为 0.0kbits/sec。

因此,当读取到文件 0.02 秒时,输出文件大小必须为 (16.5kbit/s) * (0.02 s) = 0.33kbits,因此它仍然舍入为size=0kB. 但是,在下一次迭代中,读取到文件的时间为 0.48 秒,那么 0.33kbit / 0.48 秒 = 0.7kbits/s。这意味着在第 13 帧和第 16 帧之间,输出文件的大小确实增加了,因为现在输出速度为 0.8kbits / s。

现在为什么它在进行完整的 0.48 秒跳跃之前跳跃了 0.02 秒,这超出了我的理解。也许其他人可以回答这个问题。


推荐阅读