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.
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-params
debe estar en Kbps.
gian
Georgi Stoyanov
ffmpeg -i input.mxf -copyts -c copy -muxrate 30M -f mpegts output.ts
Solo 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.gian
-x264opts nal-hrd=cbr
y 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.Georgi Stoyanov
gian
x265-params strict-cbr=1:vbv-bufsize=<x>:vbv=maxrate=<bitrate>
+ muxrateGeorgi Stoyanov
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.ts
y este es el error:x265 [error]: Strict-cbr cannot be applied without specifying target bitrate or vbv bufsize
gian
-b:v
Georgi Stoyanov
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.ts
El 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.