2011-11-25 13 views
9

tengo un archivo que necesito para convertir a MPEG-TS para que se ajuste el siguiente especificación:MPEG-TS Codificación

Primaria tasa de bits de la corriente [kbit/s] de vídeo: 2575 de audio: 2 x 192 subtítulo: - PAT/PMT: - relleno: -

Componente TS bitrate [kbit/s] video: 2652 audio: 395 subtítulo: 45 PAT/PMT: 45 relleno: 62 total : 3200 CBR

componentes necesarios adicionales: PAT PMT paquetes nulos

componentes que podrían aparecer: NIT, SDT, EIT, etc.

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 

Después de la codificación con la secuencia de comandos por encima de todo parece estar bien (para el códec de bitrate tanto de video como de audio es constante) aparte de dos cosas: El bitrate del contenedor también debe permanecer en CBR, pero este no es el caso. Además, falta el componente de relleno (0x1 ffff) - paquete nulo. ¿Es posible que corrija el script para hacer que el paquete nulo y la tasa de bits del contenedor sean constantes (3,2 Mbps CBR)?

La segunda opción es la codificación con 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 

pero la forma de desarmar/desactivar/eliminar tabla SDT?

Respuesta

4

Dado que conoce el concepto de paquetes NULL, es posible que haya estado trabajando con software o hardware de calidad comercial en esta área.

Hay una diferencia entre CBR (de video) y la velocidad del sistema (o la velocidad del multiplexor). Cuando el video está codificado como CBR, digamos a 3.2 Mbps, está bastante bien que fluctúe unos pocos cientos de kbps alrededor de ese margen. Entonces, la tasa de bits pico, podría ser de 3.3 Mbps. Esto está bastante bien. Al agregar otros 100 kbps de audio, la tasa de bits máxima total puede ser 3.4. Por lo general, uno establecería la tasa del sistema por encima de 3,6 Mbps o más en ese caso; donde el equilibrio son paquetes NULL.

La tasa del sistema 3.5 Mbps NO PUEDE fluctuar en absoluto. Si lo hace, la sincronización basada en PCR no funcionará y, básicamente, las cosas no funcionarán en un entorno en vivo. Así que, básicamente, puedes pensar que 3.5 Mbps (alrededor de 240 paquetes en 100 milisegundos) se pueden considerar como un BUS. cada asiento debe ser llenado para asegurar que el transporte sea continuo. Por lo general, se hace de tal manera que pocos asientos permanecerán vacíos.

Lo triste es que ni VLC ni ninguna otra herramienta en código abierto lo hará por usted.

El truco que solíamos utilizar era, que solíamos enviar ese tipo de flujo producido VLC sobre IP (donde el envío de flujo TS sin paquetes NULL está bien, y lo recibimos a través de un Muxer con ASI o tal interfaz, que habría agregado muxer.

Alternativamente, puede usar Manzanita muxer para convertir su secuencia de TS no nulo en la transmisión de TS adecuada.

EDIT:
Basado en el comentario - si todo lo que necesita hacer es desactivar SDT - hay dos cosas que hay que hacer.

  1. Elimina todos los paquetes del PID que corresponde a la tabla SDT. Si no está demultiplexando y volviendo a multiplexar por completo, una forma rápida de hacerlo podría ser volver a marcar el número PID de 13 bits con un número PID de paquete NULL.

  2. Elimina la referencia del valor SDT PID en la tabla PAT. Esto esencialmente significa que usted produce un paquete de 3 a 4 que es corregido PAT; y reemplace todas las secuencias de paquetes PAT en la secuencia por estos paquetes corregidos.

+1

El segundo comando funciona bien, pero ¿cómo puedo eliminar la tabla SDT del archivo? – adismsc