video - 如何将 openRTSP 中的 MP4 文件编码优化到与 FFmpeg 相同的级别?

标签 video ffmpeg openrtsp

我目前使用如下命令接收并存储来自带有 openRTSP 的摄像机的 RTSP 流:

openRTSP -4 "rtsp://192.168.41.185/rtsp_tunnel?h26x=4&line=1&inst=2" > movie.mp4

我可以使用 FFmpeg 做同样的事情:
ffmpeg -i "rtsp://192.168.41.185/rtsp_tunnel?h26x=4&line=1&inst=2" -vcodec copy movie.mp4

来自相机的视频帧为 1280x720 (H.264),速度约为 30 fps,并带有毫秒时间戳。当我查看由 ffmpeg 创建的 movie.mp4 时,它看起来非常漂亮,视频流中的秒数似乎相当准确.相反,如果我查看由 openRTSP 创建的movie.mp4,视频时间戳中的秒数肯定比现实中的秒长。因此,视频上的一秒钟实际上可以持续两秒钟。我做了几次测试,这不是网络性能或处理从相机接收到的消息的问题。 原因似乎是消息被编码到这个 MP4 容器中的部分 .

FFmpeg 这样做比 openRTSP 快得多吗?

我可以以某种方式优化 openRTSP 中的 MP4 编码吗?

最佳答案

好的,是不是 性能问题,而是 openRTSP 无法从 RTSP 流中检测到正确帧速率的问题。我准确记录了 60 秒,按照建议,我使用了 ffprobe获取有关比特流的更多信息:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output-00000-00060.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isom
    creation_time   : 2018-07-02 03:30:01
  Duration: 00:04:00.13, start: 0.000000, bitrate: 46 kb/s
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt470bg/iec61966-2-1), 1280x720 [SAR 561:560 DAR 187:105], 45 kb/s, 15 fps, 15 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2018-07-02 03:30:01
      handler_name    : ?Apple Alias Data Handler
      encoder         : H.264

有两点不对:
  • 问题 #1:帧速率不是 15 fps,但相机配置为尝试发送 30 fps。
  • 问题 #2:持续时间是 4:00,但应该是 1:00

  • 对于问题 #1:可能是 我的错 .我应该手动指定帧速率,因为 openRTSP 没有从流中获取它。我应该指定选项 -f 30 .

    对于问题 #2:给出选项后 -f 30我仍然得到一个持续时间为 2:00 而不是 1.00 的视频文件。 我猜问题在于相机在 中发送数据进步的模式,而不是 隔行扫描模式。也许 openRTSP 的默认设置是隔行扫描模式。所以当我将帧速率加倍到 -f 60一切都好。

    也许有人可以证实我的猜测?

    关于video - 如何将 openRTSP 中的 MP4 文件编码优化到与 FFmpeg 相同的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51130778/

    相关文章:

    ffmpeg - 如何在 1920x1080 视频中使用 "standard PAL"标志

    ffmpeg - 使用 openRTSP 和 ffmpeg 录制视频

    swift - AVFoundation 连接视频和音频

    html - FFMPEG:从网络摄像头创建连续视频

    ios - 从 Swift 中的 AVCaptureSession 获取输出以发送到服务器

    android - chromecast - 基于 chromecast 示例实现 'play OR enqueue'

    php - FFMPEG 在打开输出流#0 :0 - maybe incorrect parameters such as bit_rate, 速率、宽度或高度的编码器时无法转码 mp4 错误

    video - ffprobe 获取最后一个音频/视频数据包的 pts