我需要将一个文件转换为MPEG-TS,以使其符合以下规范:
基本视频流比特率kbit/s视频: 2575音频:2x192字幕:- PAT/PMT:- Stuffing:--
组件TS比特率kbit/s视频: 2652音频: 395字幕: 45 PAT/PMT: 45填充: 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在使用上面的脚本进行编码之后,除了两件事之外,一切似乎都是正常的(对于视频和音频比特率编解码都是恒定的):容器的比特率也应该保持为CBR,但事实并非如此。此外,填充组件(0x1ffff)-空包丢失。您是否可以更正脚本,使空数据包以及容器常量(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表?
发布于 2011-11-27 17:56:01
考虑到您知道空包的概念,您可能在这方面使用了商业级别的软件或硬件。
CBR (视频)和系统速率(或多路复用器速率)之间存在差异。当视频编码为CBR,比如说3.2Mbps时,它在这个边缘附近波动几百kbps是很好的。所以峰值比特率,可以说是3.3Mbps。这挺好的。再加上100 kbps的音频,总最大比特率可达3.4。通常,在这种情况下,将系统速率设置为3.6Mbps或更多;其中余额为空包。
系统速率3.5Mbps根本不能波动。如果是这样的话,基于PCR的同步就不会起作用,而且基本上,在实际的环境中也是行不通的。因此,基本上,您可以认为3.5Mbps( 100毫秒内约240个数据包)可以被认为是总线。每个座位必须填满,以确保运输是连续的。通常情况下,这样做的方式是很少有座位会保持空的。
可悲的是,无论是VLC还是开源中的任何其他工具都不会为您做这件事。
我们过去使用的黑客是,我们用来通过IP发送这样的VLC生成的流(其中发送TS流没有空包是可以的,并通过带有ASI或类似接口的muxer的输出接收它,这将增加Muxer )。
或者,您可以使用曼扎尼塔将非空TS流转换为适当的TS流。
编辑:
基于这个注释--如果你需要做的就是禁用SDT --有两件事需要做。
https://stackoverflow.com/questions/8269969
复制相似问题