Я пытаюсь преобразовать пару довольно больших файлов MXF в файлы TS, сохраняя кодировку видео и аудио. Выходной TS должен быть файлом CBR Mpeg-2 TS, что, как я знаю, невозможно с ffmpeg. Любая идея для другого предпочтительного инструмента командной строки Linux, который мог бы справиться с этой задачей? Windows тоже вариант, но я хочу конвертировать пару файлов на сервере, поэтому было бы лучше, если бы он был основан на Linux.
Хорошо, благодаря @Mulvya я нашел решение, как я могу создать CBR MPEG-2 TS с начинкой и постоянным постоянным битрейтом и внутри него VBR VPID. Команда для H.264:
$ 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>
Это создаст TS CBR 35 Мбит/с, а внутри TS битрейт VPID будет немного колебаться около 30 Мбит/с, а также битрейт PID 8191 (нулевые PID).
Команда для того, чтобы сделать то же самое, но с HEVC, следующая:
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>
Здесь TS будет с битрейтом 30 Мбит/с, а VPID будет около 25 Мбит/с, эта команда также создаст заполнение (нулевые PID) около 5 Мбит/с.
Также обратите внимание, что битрейт после -x265-params
должен быть в кбит/с.
Гьян
Георгий Стоянов
ffmpeg -i input.mxf -copyts -c copy -muxrate 30M -f mpegts output.ts
Я только хочу добавить начинку. Я также пытался перекодировать видео с помощью команды: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
. Поэтому я хочу, чтобы вывод был полностью плоским. Это можно сделать, установив мультиплексор на гораздо более высокое значение или достигнув полного битрейта видео CBR. Версия ffmpeg — 3.2.4.Гьян
-x264opts nal-hrd=cbr
и мультиплексирование. Укажите значение примерно на 10-12% выше видео+аудио, а точнее, суммы битрейтов потока.Георгий Стоянов
Гьян
x265-params strict-cbr=1:vbv-bufsize=<x>:vbv=maxrate=<bitrate>
+ скорость мультиплексированияГеоргий Стоянов
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
и это ошибка:x265 [error]: Strict-cbr cannot be applied without specifying target bitrate or vbv bufsize
Гьян
-b:v
Георгий Стоянов
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
. Проблема здесь в том, что в выходном TS-файле нет битов заполнения, что создает много ошибок повторения CRC для VPID и вывода. далеко от CBR, битрейт колеблется между 18 и 30 Мбит/с. Для сравнения, команда в x264 фактически создала мультиплексор CBR TS, а внутри мультиплексора битрейт заполнения колебался, но очень незначительно.