Convierta archivos MXF en CBR TS

Estoy tratando de convertir un par de archivos MXF bastante grandes en archivos TS conservando la codificación de video y audio. El TS de salida debe ser un archivo CBR Mpeg-2 TS, lo cual sé que no es posible con ffmpeg. ¿Alguna idea para otra herramienta de línea de comandos preferiblemente de Linux que pueda manejar esta tarea? Windows también es una opción, pero quiero convertir un par de archivos en un servidor, por eso sería mejor si estuviera basado en Linux.

FFmpeg puede producir CBR TS. ¿Qué comando probaste?
@mulvya ffmpeg -i input.mxf -copyts -c copy -muxrate 30M -f mpegts output.tsSolo quiero agregar el relleno. También he intentado transcodificar el video con el comando: ffmpeg -i input.mxf -vcodec libx264 -b:v 20M -minrate:v 20M -maxrate:v 20M -bufsize:v 14M -acodec mp2 -ac 2 -b:a 192k -f mpegts output.ts. Así que quiero que la salida sea completamente plana. Esto podría hacerse configurando la muxrate a un valor mucho más alto o logrando una tasa de bits de video completamente CBR. La versión de ffmpeg es 3.2.4.
Si transcodifica usando x264, agregue -x264opts nal-hrd=cbry también muxrate. Proporcione un valor de aproximadamente un 10-12 % por encima de video+audio, o más precisamente, la suma de las tasas de bits de transmisión.
@Mulvya, funciona, aunque el tamaño del relleno es bastante grande, el archivo de salida es CBR. He notado que después de un cierto tamaño de la tasa de bits de video, la salida comienza a verse no tan uniforme, pero esta opción debería estar bien para una tasa de bits de video de hasta 250-300 Mbps. ¿Conoces el mismo comando pero esta vez para HEVC? ¿O simplemente cómo volver a envolver el contenedor de mxf a ts y establecer la tasa de bits del TS?
Para x265 x265-params strict-cbr=1:vbv-bufsize=<x>:vbv=maxrate=<bitrate>+ muxrate
@Mulvya, desafortunadamente, la línea de comando que me envías devuelve un error. He usado la siguiente línea de comando: ffmpeg -i HD_Plus_Fussball25_FINISH_v06_R128_.mxf -c:v libx265 -x265-params strict-cbr=1:vbv-bufsize=25000:vbv-maxrate=25000 -muxrate 30000 -c:a copy -f mpegts test.tsy este es el error:x265 [error]: Strict-cbr cannot be applied without specifying target bitrate or vbv bufsize
Sí, necesitas mantener la tasa de bits-b:v
@Mulvya, sí, tiene razón, olvidé agregar la opción de tasa de bits de video. ffmpeg -i input.mxf -c:v libx265 -x265-params strict-cbr=1:vbv-bufsize=25000:vbv-maxrate=25000:muxrate=30000:bitrate=25000 -c:a copy -f mpegts output.tsEl problema aquí es que el archivo TS de salida no tiene bits de relleno, lo que genera muchos errores de repetición de CRC en el VPID y la salida. está lejos de CBR, la tasa de bits fluctúa entre 18 y 30 Mbps. A modo de comparación, el comando en x264 en realidad creó un CBR TS mux y dentro del MUX, la tasa de bits de relleno fluctuaba pero muy poco.

Respuestas (1)

De acuerdo, gracias a @Mulvya, encontré una solución sobre cómo puedo crear CBR MPEG-2 TS con relleno y tasa de bits constante constante y dentro de él VBR VPID. El comando para H.264 es:

$ ffmpeg -i <input> \
-c:v libx264 -x264opts nal-hrd=cbr \
-b:v 30M -minrate:v 30M -maxrate:v 30M -muxrate 35M -bufsize:v 25M \
-c:a aac -ac 2 -b:a 128k \
-f mpegts <output.ts>

Esto creará 35 Mbps CBR TS y dentro del TS, la tasa de bits del VPID fluctuará un poco alrededor de 30 Mbps, y también la tasa de bits de PID 8191 (PID nulos).

El comando para hacer lo mismo pero con HEVC es el siguiente:

ffmpeg -i <input> \
-c:v libx265 -b:v 25M -muxrate 30M \
-x265-params strict-cbr=1:vbv-bufsize=25000:vbv-maxrate=25000 \
-c:a aac -ac 2 -b:a 128k \
-f mpegts <output.ts>

Aquí el TS tendrá una tasa de bits de 30 Mbps y el VPID rondará los 25 Mbps, este comando también creará relleno (PID nulos) alrededor de 5 Mbps.
Tenga en cuenta también que la tasa de bits posterior -x265-paramsdebe estar en Kbps.