Ary*_*ame 3 ffmpeg cpu-usage http-live-streaming
嗨,我正在休息一个hls流作为hls流
SETLOCAL
:loop
ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt
goto loop
Run Code Online (Sandbox Code Playgroud)
但它使用%15-20的CPU我必须在同一台服务器上制作16个流,但我不能.
我不能像下载.ts文件一样配置克隆m3u8?
Ger*_*csy 13
默认情况下,即使您不使用任何与编码相关的参数,FFmpeg也会尝试重新编码输入.
如果您只想按原样复制流,则应尝试使用streamcopy函数:
-c:v copy -c:a copy
Run Code Online (Sandbox Code Playgroud)
通过复制传入的流,您可以完全跳过编码过程.
所以你的命令看起来像这样:
ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -c:v copy -c:a copy -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt
Run Code Online (Sandbox Code Playgroud)
(不确定它是否会起作用.)
当您需要重新编码传入流时,应考虑在命令中添加一些编码参数.
默认情况下,ffmpeg尝试匹配源参数和质量,这在实时应用程序中并不总是最佳.
"非常快,超高速和超快"的h264预设是获得性能提升的良好开端.
-c:v h264 -preset:v ultrafast
Run Code Online (Sandbox Code Playgroud)
您还可以使用CRF(恒定速率因子)编码,更高比特率等.
有关H264 enoding的更多信息:https://trac.ffmpeg.org/wiki/Encode/H.264
Mar*_*elo 11
虽然这个问题已经得到了回答,但我认为它缺少一个不涉及调整命令参数的答案,但可以与其他工具或命令一起使用,而不仅仅是FFmpeg.
该请将CPULimit工具正是为此而设计的,而不是只为FFmpeg的同时也为你想减少这种资源的利用任何其他CPU密集型的过程将有效地开展工作.
CPUlimit最重要的参数是-l,它允许您指定允许进程使用的CPU百分比(作为其上限).
请注意,此限制取决于机器具有的CPU /内核/线程数,例如,如果机器有8个CPU,则CPULimit -l有效值的范围为0到800(0当然是无用的,800和800)意思是完全不限制过程,因为800%意味着所有的机器处理能力).
使用8 CPU机器的一半容量的示例:
cpulimit -l 400 ffmpeg ...
Run Code Online (Sandbox Code Playgroud)
希望这有助于解决这个特定问题以及将来的类似需求.
小智 5
-re (input)
Run Code Online (Sandbox Code Playgroud)
以本机帧速率读取输入。主要用于模拟抓取设备或实时输入流(例如从文件读取时)。不应与实际抓取设备或实时输入流(可能导致数据包丢失)一起使用。
默认情况下,FFmpeg 尝试尽可能快地读取输入。此选项会将输入的读取速度减慢到输入的本机帧速率。它对于实时输出(例如实时流媒体)很有用。
| 归档时间: |
|
| 查看次数: |
14714 次 |
| 最近记录: |