ffmpeg输出中的fps是什么意思? [英] What does the fps mean in the ffmpeg output?

查看:76
本文介绍了ffmpeg输出中的fps是什么意思?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用ffmpeg流式传输一个静态png文件,它基本上使用了我的所有CPU.对我来说似乎有点贪婪,即使我将fps限制在输入和输出大小上,我仍然看到打印出了巨大的fps.

I am streaming a static png file with ffmpeg and it uses basically all my CPU. It seems a bit greedy to me, and even though I limited the fps on the input and output size, I am seeing a huge fps printed out.

w:\ffmpeg\bin>ffmpeg.exe -loop 1 -framerate 1 -i w:\colorbar2.png -r 10 -vcodec libx264 -pix_fmt yuv420p -r 10 -f mpegts udp://127.0.0.1:10001?pkt_size=1316
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)

Input #0, png_pipe, from 'w:\colorbar2.png':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: png, pal8, 320x240 [SAR 3779:3779 DAR 4:3], 1 fps, 1 tbr, 1 tbn, 1 tbc
[libx264 @ 00000000002fb320] using SAR=1/1
[libx264 @ 00000000002fb320] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 00000000002fb320] profile High, level 1.2
Output #0, mpegts, to 'udp://127.0.0.1:10001?pkt_size=1316':
  Metadata:
    encoder         : Lavf56.16.102
    Stream #0:0: Video: h264 (libx264), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=-1--1, 10 fps, 90k tbn, 10 tbc
    Metadata:
      encoder         : Lavc56.19.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
Press [q] to stop, [?] for help
frame=561310 fps=579 q=25.0 size=  144960kB time=15:35:25.80 bitrate=  21.2kbits/s dup=505179 drop=0

如您所见,帧计数器快速上升,并且在最后一行报告 fps = 579 .我现在很困惑,如果还提到每秒低帧以上(输出10fps,输入1 fps),那么fps意味着什么?

As you can see the frame counter goes up quickly and fps=579 is reported on the last line. I am confused now, what does that fps mean, if above the low frame per secs are also mentioned (output 10fps, input 1 fps)

我在做错什么,并且鉴于正在传输的是静态文件,我该如何进一步降低CPU负载.

What am I doing wrong and how could I reduce CPU load more given that it's a static file that is being streamed.

谢谢!

推荐答案

ffmpeg 尝试尽可能快地进行解码和编码.仅仅因为将输出设置为每秒10帧并不意味着它将以每秒10帧的速度实时(解码).

ffmpeg attempts to decode and encode as fast as it can. Just because you set the output to be 10 frames per second does not mean that it will (de|en)code realtime at 10 frames per second.

尝试使用 -re 输入选项.从 ffmpeg cli-tool文档:

Try the -re input option. From the ffmpeg cli-tool documentation:

以原始帧速率读取输入.主要用于模拟抓拍装置或实时输入流(例如,从文件中读取时).不该是与实际的抓取设备或实时输入流配合使用(可以导致数据包丢失).默认情况下, ffmpeg 尝试读取输入尽可能快地.此选项将减慢输入到输入的原始帧速率.这对实时输出(例如实时流式传输).

Read input at native frame rate. Mainly used to simulate a grab device or live input stream (e.g. when reading from a file). Should not be used with actual grab devices or live input streams (where it can cause packet loss). By default ffmpeg attempts to read the input(s) as fast as possible. This option will slow down the reading of the input(s) to the native frame rate of the input(s). It is useful for real-time output (e.g. live streaming).

示例:

ffmpeg.exe -re -loop 1 -framerate 10 -i w:\colorbar2.png -c:v libx264 \
-tune stillimage -pix_fmt yuv420p -f mpegts udp://127.0.0.1:10001?pkt_size=1316

这篇关于ffmpeg输出中的fps是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆