2011-11-25 31 views
9

Tôi có một tập tin mà tôi cần phải chuyển đổi sang định dạng MPEG-TS để nó phù hợp với đặc điểm kỹ thuật dưới đây:MPEG-TS Encoding

Tiểu dòng bitrate [kbit/s] video: 2575 âm thanh: 2 x 192 phụ đề: - PAT/PMT: - nhồi: -

Component TS bitrate [kbit/s] video: 2652 âm thanh: 395 phụ đề: 45 PAT/PMT: 45 nhồi: 62 Tổng số : 3200 CBR

bổ sung thành phần cần thiết: PAT PMT gói Null

Linh kiện mà có thể bật lên: NIT, SDT, thuế TNDN, vv

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 

Sau khi mã hóa với kịch bản trên tất cả mọi thứ dường như được ok (cho cả hai video và audio bitrate codec là không đổi) ngoài hai điều: Bitrate của container cũng nên vẫn còn CBR nhưng đây không phải là trường hợp. Ngoài ra, thành phần nhồi (0x1 ffff) - thiếu gói tin rỗng. Bạn có thể sửa kịch bản để tạo gói tin rỗng cũng như tốc độ bit của hằng số container (3,2 Mbps CBR) không?

Lựa chọn thứ hai được mã hóa với 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 

nhưng làm thế nào để bỏ đặt/vô hiệu hóa/gỡ bỏ bảng SDT?

Trả lời

4

Cho rằng bạn biết về khái niệm gói NULL, bạn có thể đã làm việc với phần mềm hoặc phần cứng cấp thương mại trong lĩnh vực này.

Có sự khác biệt giữa CBR (của video) và tỷ lệ hệ thống (hoặc tỷ lệ ghép kênh). Khi video được mã hóa dưới dạng CBR, với tốc độ 3,2 Mb/giây, nó khá ổn khi nó dao động vài trăm kbps xung quanh biên độ đó. Tốc độ bit cao nhất có thể là 3,3 Mb/giây. Điều này khá ổn. Thêm 100 kbps âm thanh khác, tổng tốc độ bit tối đa có thể là 3,4. Thông thường, người ta sẽ đặt tốc độ Hệ thống trên 3,6 Mbps trở lên trong trường hợp đó; nơi cân bằng là các gói NULL.

Tỷ lệ hệ thống 3,5 Mbps KHÔNG THỂ dao động chút nào. Nếu có, đồng bộ hóa dựa trên PCR sẽ không hoạt động và về cơ bản, mọi thứ sẽ không hoạt động trong môi trường sống. Vì vậy, về cơ bản, bạn có thể nghĩ đến 3,5 Mbps (khoảng 240 gói trong 100 mili giây) có thể được coi là BUS. mỗi chỗ ngồi phải được lấp đầy để đảm bảo rằng việc vận chuyển liên tục. Thông thường, nó được thực hiện như một cách mà vài chỗ ngồi sẽ vẫn còn trống.

Phần đáng buồn là, cả VLC lẫn bất kỳ công cụ nào khác trong nguồn mở đều sẽ làm điều đó cho bạn. Chúng tôi sử dụng để gửi luồng VLC được sản xuất qua IP (nơi gửi luồng TS mà không có gói NULL là ok - và nhận được thông qua đầu ra từ một Muxer với ASI hoặc giao diện như vậy, trong đó

Hoặc bạn có thể sử dụng Manzanita muxer để chuyển đổi luồng TS không trống của bạn thành luồng TS thích hợp.

EDIT:
Dựa trên những nhận xét - nếu tất cả các bạn cần làm là để vô hiệu hóa SDT - có hai điều cần phải làm.

  1. Xóa tất cả các gói khỏi PID tương ứng với bảng SDT. Nếu bạn không hoàn toàn demuxing và tái muxing - một cách nhanh chóng để làm điều đó có thể được tái đóng dấu số 13 bit PID bởi một số gói PID NULL.

  2. Xóa tham chiếu giá trị PID SDT trong bảng PAT. Điều này về cơ bản có nghĩa là bạn tạo ra 3 đến 4 gói được sửa chữa PAT; và thay thế tất cả các chuỗi gói PAT trong luồng bằng các gói được sửa chữa này.

+1

Lệnh thứ hai hoạt động tốt nhưng làm cách nào tôi có thể xóa bảng SDT khỏi tệp? – adismsc

Các vấn đề liên quan