我正在尝试使用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。所以根据我的理解,这段代码应该提供18Mbps的CBR,其中所有PID的多路复用和比特率之间的差异用空包填充。
问题在于输出远非完美。总体比特率最好是半CBR。它的范围在12Mbps到15Mbps之间,我看到很多PCR准确性和PCR重复错误以及VPID和APID上的CC错误。
答案 0 :(得分:2)
一些想法:
ffmpeg
的最新版本,因为在某些时候有一个错误会在流复制时弄乱PCR插入如果您想要恒定的UDP输出,则必须使用bitrate
选项,如:
-flush_packets 0 -f mpegts "udp://destination_ip:1234?pkt_size=1316&bitrate=18000000"
UDP
是一种不可靠的协议,您可能会遇到数据包丢失(遗憾的是,bitrate
选项仅适用于UDP
现在的AFAIK)答案 1 :(得分:0)
-minrate
和-maxrate
。-bufsize
大于bitrate
。-muxrate
设置为bufsize
。最后的命令:
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