10

以下の仕様に合うようにMPEG-TSに変換する必要のあるファイルがあります。

エレメンタリストリームビットレート[kbit/s]ビデオ:2575オーディオ:2 x 192字幕:-PAT / PMT:-スタッフィング:-

コンポーネントTSビットレート[kbit/s]ビデオ:2652オーディオ:395サブタイトル:45 PAT / PMT:45スタッフィング:62合計:3200 CBR

追加の必要なコンポーネント:PATPMTNullパケット

ポップアップする可能性のあるコンポーネント: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

上記のスクリプトでエンコードした後、2つのことを除いてすべてが正常であるように見えます(ビデオとオーディオの両方のビットレートコーデックは一定です):コンテナのビットレートもCBRのままである必要がありますが、そうではありません。また、スタッフィングコンポーネント(0x1 ffff)-nullパケットがありません。スクリプトを修正して、nullパケットとコンテナ定数(3,2 Mbps CBR)のビットレートを作成することは可能ですか?

2番目のオプションは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テーブルを設定解除/無効化/削除する方法は?

4

1 に答える 1

7

NULL パケットの概念を認識していれば、この領域で商用グレードのソフトウェアまたはハードウェアを使用している可能性があります。

CBR (ビデオの) とシステム レート (またはマルチプレクサ レート) には違いがあります。ビデオが CBR としてエンコードされている場合、たとえば 3.2 Mbps の場合、そのマージン付近で数百 kbps 変動してもまったく問題ありません。したがって、ピークビットレートは 3.3 Mbps と言えます。これで結構です。さらに 100 kbps のオーディオを追加すると、合計最大ビットレートは 3.4 になります。その場合、通常、システム レートを 3.6 Mbps 以上に設定します。ここで、balance は NULL パケットです。

システム レート 3.5 Mbpsはまったく変動できません。その場合、PCR ベースの同期は機能せず、基本的にライブ環境では機能しません。つまり、基本的には 3.5 Mbps (100 ミリ秒で約 240 パケット) を BUS と考えることができます。輸送が確実に継続されるように、すべての座席を満席にする必要があります。通常、空席が少なくなるように行われます。

悲しいことに、VLC もオープンソースの他のツールもそれをしてくれません。

私たちが使用していたハックは、そのようなVLCで生成されたストリームをIP経由で送信するために使用したものでした(NULLパケットなしでTSストリームを送信しても問題ありません-ASIまたはマルチプレクサを追加したインターフェースを備えたマルチプレクサからの出力を介してそれを受信します) .

または、 Manzanita マルチプレクサを使用して、null 以外の TS ストリームを適切な TS ストリームに変換することもできます。

編集:
コメントに基づいて-SDTを無効にするだけでよい場合は、2つのことを行う必要があります。

  1. SDT テーブルに対応する PID からすべてのパケットを削除します。完全に分離して再多重化していない場合 - これを行う簡単な方法は、13 ビットの PID 番号を NULL パケットの PID 番号で再スタンプすることです。

  2. PAT テーブルの SDT PID 値の参照を削除します。これは基本的に、修正されたPAT である 3 ~ 4 個のパケットを生成することを意味します。ストリーム内のすべての PAT パケット シーケンスをこれらの修正済みパケットに置き換えます。

于 2011-11-27T17:56:01.043 に答える