Konvertieren Sie MXF-Dateien in CBR TS

Ich versuche, einige ziemlich große MXF-Dateien in TS-Dateien zu konvertieren, wobei die Video- und Audiocodierung erhalten bleibt. Der Ausgabe-TS muss eine CBR Mpeg-2 TS-Datei sein, von der ich weiß, dass sie mit ffmpeg nicht möglich ist. Irgendeine Idee für ein anderes vorzugsweise Linux-Befehlszeilentool, das diese Aufgabe erledigen könnte? Windows ist auch eine Option, aber ich möchte ein paar Dateien auf einem Server konvertieren, deshalb wäre es besser, wenn es auf Linux basiert.

FFmpeg kann CBR TS erzeugen. Welchen Befehl hast du probiert?
@mulvya ffmpeg -i input.mxf -copyts -c copy -muxrate 30M -f mpegts output.tsIch möchte nur die Füllung hinzufügen. Ich habe auch versucht, das Video mit dem Befehl zu transkodieren: 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. Ich möchte also, dass die Ausgabe vollständig flach ist. Dies könnte durch Einstellen der Muxrate auf einen viel höheren Wert oder durch Erreichen einer vollständigen CBR-Videobitrate erfolgen. Die ffmpeg-Version ist 3.2.4.
Wenn Sie mit x264 transcodieren, fügen Sie hinzu -x264opts nal-hrd=cbrund auch muxrate. Geben Sie einen Wert an, der etwa 10–12 % über Video und Audio liegt, oder genauer gesagt, der Summe der Stream-Bitraten.
@Mulvya, es funktioniert, obwohl die Größe der Füllung ziemlich groß ist, ist die Ausgabedatei tatsächlich CBR. Mir ist aufgefallen, dass die Ausgabe ab einer bestimmten Größe der Video-Bitrate nicht mehr so ​​einheitlich aussieht, aber diese Option sollte für alles bis zu einer Video-Bitrate von 250-300 Mbit / s in Ordnung sein. Kennen Sie zufällig denselben Befehl, aber diesmal für HEVC? Oder nur, wie man den Container von mxf nach ts umpackt und die Bitrate des TS einstellt?
Für x265 x265-params strict-cbr=1:vbv-bufsize=<x>:vbv=maxrate=<bitrate>+ Muxrate
@Mulvya, leider gibt die Befehlszeile, die Sie mir senden, einen Fehler zurück. Ich habe die folgende Befehlszeile verwendet: 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.tsund dies ist der Fehler:x265 [error]: Strict-cbr cannot be applied without specifying target bitrate or vbv bufsize
Ja, Sie müssen die Bitrate beibehalten-b:v
@Mulvya, ja, du hast Recht, ich habe vergessen, die Video-Bitrate-Option hinzuzufügen. 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.tsDas Problem hier ist, dass die Ausgabe-TS-Datei keine Stopfbits enthält, was viele CRC-Wiederholungsfehler in der VPID und der Ausgabe verursacht weit von CBR entfernt ist, schwankt die Bitrate zwischen 18 und 30 Mbps. Zum Vergleich hat der Befehl in x264 tatsächlich einen CBR TS Mux erstellt und innerhalb des MUX schwankte die Stuffing-Bitrate, aber sehr wenig.

Antworten (1)

Okay, dank @Mulvya habe ich eine Lösung gefunden, wie ich CBR MPEG-2 TS mit Füllung und konstanter Bitrate und darin VBR VPID erstellen kann. Der Befehl für H.264 lautet:

$ 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>

Dadurch wird ein CBR TS mit 35 MBit/s erstellt, und innerhalb des TS schwankt die Bitrate der VPID ein wenig um 30 MBit/s herum, ebenso die Bitrate von PID 8191 (Null-PIDs).

Der Befehl, um dasselbe zu tun, aber mit HEVC, lautet wie folgt:

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>

Hier hat der TS eine Bitrate von 30 Mbit/s und die VPID etwa 25 Mbit/s. Dieser Befehl erzeugt auch Füllungen (Null-PIDs) bei etwa 5 Mbit/s.
Bitte beachten Sie auch, dass die Bitrate danach -x265-paramsin Kbps angegeben werden sollte.