MPEG-TS编码

10

我有一个文件需要转换为MPEG-TS格式,以符合以下规格:

基本码流比特率[kbit/s] 视频: 2575 音频: 2 x 192 字幕: - PAT/PMT: - Stuffing: -

组件TS比特率[kbit/s] 视频: 2652 音频: 395 字幕: 45 PAT/PMT: 45 Stuffing: 62 总计: 3200 CBR

额外必需的组件: PAT PMT 空包

可能出现的组件: NIT、SDT、EIT等等。

vcodec="h264"
acodec="mpga"
bitrate="2500"
arate="192"
samplerate=48000
ext="mpg"
mux="ts"
vlc="/usr/bin/vlc"
fmt="mpg"
dst="/home/adam/test/"

for a in *$fmt; do
$vlc -I dummy -vvv "/home/adam/test/" --sout "#transcode{vcodec=$vcodec,venc=x264{profile=main,level=3.0,hrd=cbr,bframes=2},vb=$bitrate,acodec=$acodec,ab=$arate,samplerate=$samplerate,channels=2}:standard{mux=$mux,dst=\"$dst$a.$ext\",ac$
done
使用上述脚本进行编码后,似乎一切都没问题了(视频和音频比特率编解码器都是恒定的),除了两件事情:容器的比特率也应该保持恒定,但实际情况并非如此。同时,Stuffing组件(0x1 ffff)-空包丢失了。请问您能否修改脚本,使得空包和容器比特率都恒定(3.2 Mbps CBR)?
第二个选项是使用ffmpeg进行编码:
ffmpeg -i video_input.mpg -i audio_input.mp2 -acodec copy -tune zerolatency -x264opts bitrate=2600:vbv-maxrate=2600:vbv-bufsize=166:nal_hrd=cbr -vpre libx264-iptv -vcodec libx264 -f mpegts -muxrate 3200K -y output.ts

但如何取消/禁用/删除SDT表格?

1个回答

7
考虑到您已经了解NULL数据包的概念,您可能一直在与商业软件或硬件领域中工作。
CBR(视频)和系统速率(或复用器速率)之间存在差异。当视频被编码为CBR时,例如3.2 Mbps,它可以在该范围内波动几百kbps左右。因此,峰值比特率可能为3.3 Mbps。这很好。添加另外100 kbps的音频,总最大比特率可达到3.4。通常情况下,在这种情况下,人们会将系统速率设置为3.6 Mbps或更高;其中平衡是NULL数据包。
系统速率为3.5 Mbps 不能有任何波动。如果有,基于PCR的同步将无法正常工作,基本上在现场环境中无法正常工作。因此,您可以将3.5 Mbps(大约100毫秒内240个数据包)视为BUS。每个座位都必须填满,以确保运输连续进行。通常,可以这样做,即让一些座位保持空缺。
令人沮丧的是,无论是VLC还是其他开源工具都无法为您完成此操作。
我们以前使用的方法是,我们将这样的VLC生成流发送到IP上(在此情况下,发送没有NULL数据包的TS流是可以的),并通过带有ASI或类似接口的Muxer的输出接收该流,该接口会添加复用器。
或者,您可以使用Manzanita muxer将非NULL TS流转换为正确的TS流。 编辑:
基于评论-如果您只需要禁用SDT,则需要执行两个操作。

1
第二个命令可以正常工作,但我如何从文件中删除SDT表? - adismsc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接