我有一个需要转换为 MPEG-TS 的文件,以使其符合以下规范:
基本流比特率 [kbit/s] 视频:2575 音频:2 x 192 字幕:- PAT/PMT:- 填充:-
分量 TS 比特率 [kbit/s] 视频:2652 音频:395 字幕:45 PAT/PMT:45 填充:62 总计:3200 CBR
其他必需组件:PAT PMT Null 数据包
可能弹出的组件: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,但事实并非如此。此外,填充组件 (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 表?