我正在使用 ffmpeg 流式传输静态 png 文件,它基本上使用了我所有的 CPU。这对我来说似乎有点贪婪,尽管我限制了输入和输出大小的 fps,但我看到打印出巨大的 fps。
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,帧计数器快速上升,最后一行报告fps=579 。我现在很困惑,如果还提到了每秒低帧数(输出 10fps,输入 1 fps),那么 fps 是什么意思?
我做错了什么以及如何减少 CPU 负载,因为它是一个正在流式传输的静态文件。
谢谢!
ffmpeg尝试尽可能快地解码和编码。仅仅因为您将输出设置为每秒 10 帧并不意味着它将以每秒 10 帧的速度(de|en)实时编码。
尝试-re输入选项。来自ffmpegcli-tool 文档:
以本机帧速率读取输入。主要用于模拟抓取设备或实时输入流(例如从文件读取时)。不应与实际的抓取设备或实时输入流一起使用(可能会导致数据包丢失)。默认情况下
ffmpeg尝试尽快读取输入。此选项会将输入的读取速度减慢至输入的本机帧速率。它对于实时输出(例如直播)很有用。
例子:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3139 次 |
| 最近记录: |