Преобразование файлов MXF в CBR TS

Я пытаюсь преобразовать пару довольно больших файлов MXF в файлы TS, сохраняя кодировку видео и аудио. Выходной TS должен быть файлом CBR Mpeg-2 TS, что, как я знаю, невозможно с ffmpeg. Любая идея для другого предпочтительного инструмента командной строки Linux, который мог бы справиться с этой задачей? Windows тоже вариант, но я хочу конвертировать пару файлов на сервере, поэтому было бы лучше, если бы он был основан на Linux.

FFmpeg может создавать CBR TS. Какую команду вы пробовали?
@mulvya 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.
При перекодировании с использованием x264 добавьте -x264opts nal-hrd=cbrи мультиплексирование. Укажите значение примерно на 10-12% выше видео+аудио, а точнее, суммы битрейтов потока.
@Mulvya, это работает, хотя размер начинки довольно большой, выходной файл действительно CBR. Я заметил, что после определенного размера видео битрейта вывод начинает выглядеть не так однородно, но этот вариант должен подойти для любого битрейта видео до 250-300 Мбит/с. Вы случайно не знаете ту же команду, но на этот раз для HEVC? Или только как перепаковать контейнер из mxf в ts и установить битрейт TS?
Для x265 x265-params strict-cbr=1:vbv-bufsize=<x>:vbv=maxrate=<bitrate>+ скорость мультиплексирования
@Mulvya, к сожалению, командная строка, которую вы мне отправляете, возвращает ошибку. Я использовал следующую командную строку: 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
@Mulvya, да, вы правы, я забыл добавить параметр битрейта видео 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, а внутри мультиплексора битрейт заполнения колебался, но очень незначительно.

Ответы (1)

Хорошо, благодаря @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должен быть в кбит/с.