FFmpeg 无法维持恒定的比特率

FFmpeg 无法维持恒定的比特率

我是 StackOverflow 新手。我不知道如何正确组织问题。

我正在尝试为我的项目创建媒体流服务器,其中树莓派摄像头将流式传输到 nginx rtmp 服务器,而我的计算机将定期从流中分块并将其保存为.h264

这是我正在运行的 ffmpeg 命令picamera(我正在使用 python 2.7 和 picamera 库)。

cmdline = ['ffmpeg', '-i','-','-vcodec','copy','-crf','30','-maxrate','2M','-bufsize',' 1M','-an', '-f','flv', Cam_URL]
logger.debug("Starting the streaming process to server")
rtmpstream = subprocess.Popen(cmdline, stdin=subprocess.PIPE)
try:
    camera.framerate = 24
    camera.resolution = (1280, 720)
    camera.brightness = int(config_hash['Brightness'])
    camera.rotation = int(config_hash['Rotation'])
    camera.iso = int(config_hash['ISO'])
    camera.sharpness = int(config_hash['Sharpness'])
    camera.start_recording(rtmpstream.stdin, quality = 20,bitrate = 0, format = 'h264')

ffmpeg在我的计算机上:

ffmpeg -i (media server url) -vcodec copy -maxrate 2M -bufsize 1M qwertyuip.h264

在录制之前,pi 上的比特率保持恒定在 2Mbits 左右,但当我开始在 PC 上录制时,pi 上的比特率会疯狂增加到 11000kbits。这耗尽了我所有的带宽。

您能帮助我保持几乎恒定的比特率吗?

答案1

选项-vcodec copy-maxrate 2M是互斥的:如果流被复制(aot重新编码),ffmpeg 对数据速率没有影响(除了填充) - 因此相机输出的数据速率将是ffmpeg 传输的数据速率。

您有两个选择:

  • 重新编码视频(类似-c:v h264 -b:v 2M),但我怀疑 RasPi 在运行摄像头服务器时是否有足够的能力做到这一点
  • 让您的相机服务器产生合理的输出速率。这是我解决问题的方法,首先查看它允许哪些输出选项和设置。

相关内容