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.
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-params
in Kbps angegeben werden sollte.
Gyan
Georgi Stojanow
ffmpeg -i input.mxf -copyts -c copy -muxrate 30M -f mpegts output.ts
Ich 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.Gyan
-x264opts nal-hrd=cbr
und auch muxrate. Geben Sie einen Wert an, der etwa 10–12 % über Video und Audio liegt, oder genauer gesagt, der Summe der Stream-Bitraten.Georgi Stojanow
Gyan
x265-params strict-cbr=1:vbv-bufsize=<x>:vbv=maxrate=<bitrate>
+ MuxrateGeorgi Stojanow
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
und dies ist der Fehler:x265 [error]: Strict-cbr cannot be applied without specifying target bitrate or vbv bufsize
Gyan
-b:v
Georgi Stojanow
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
Das 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.