ffmpeg VBR - > CBR转换和MPEG-2 TS视频文件的流媒体

时间:2017-06-06 14:24:52

标签: ffmpeg streaming video-streaming

我正在尝试使用ffmpeg将源VBR SPTS MPEG-2 TS文件转换为CBR。我正在使用的代码如下:

#!/bin/bash

pkill ffmpeg

ffmpeg \
        -re -i source.ts -c copy \
        -muxrate 18000K \
        -f mpegts \
        udp://destination_ip:1234?pkt_size=1316

源VPID比特率为~10Mbps,APID为296Kbps。所以根据我的理解,这段代码应该提供18Mbp​​s的CBR,其中所有PID的多路复用和比特率之间的差异用空包填充。

问题在于输出远非完美。总体比特率最好是半CBR。它的范围在12Mbps到15Mbps之间,我看到很多PCR准确性和PCR重复错误以及VPID和APID上的CC错误。

2 个答案:

答案 0 :(得分:2)

一些想法:

  • 确保您拥有ffmpeg的最新版本,因为在某些时候有一个错误会在流复制时弄乱PCR插入
  • 如果您想要恒定的UDP输出,则必须使用bitrate选项,如:

    -flush_packets 0 -f mpegts "udp://destination_ip:1234?pkt_size=1316&bitrate=18000000"
    
  • UDP是一种不可靠的协议,您可能会遇到数据包丢失(遗憾的是,bitrate选项仅适用于UDP现在的AFAIK)
  • 如果您有专用连接但仍然遇到CC错误,请检查目标OS最大UDP缓冲区大小并确保它可以处理18 Mbps

答案 1 :(得分:0)

  1. 也指定-minrate-maxrate
  2. 使用-bufsize大于bitrate
  3. -muxrate设置为bufsize
  4. 最后的命令:

    ffmpeg \  
        -re -i source.ts \  
        -b:v 10500k \  
        -minrate 10500k \  
        -maxrate 10500k \  
        -bufsize 18000k \  
        -muxrate 18000k \  
        -f mpegts \  
        udp://destination_ip:1234?pkt_size=1316