Неправильная частота кадров, искаженное воспроизведение файлов isom/mp4, ремиксированных из H.264/AC3 MPEG-TS

ПРИМЕЧАНИЕ. Этот вопрос заменен новым , пожалуйста, не отвечайте под этим сообщением.

Что произошло?

  • [Редактировать] Файл DVB («файл1») в формате TS H.264/AC3@50i не может быть правильно преобразован в любой из следующих форматов: isom/mp4; QuickTime MOV; Матроска

  • Другой файл DVB («файл2») в формате TS MPEG-2/MP2@59.94i может быть правильно преобразован в любой из следующих форматов: MPEG; изом/mp4. QuickTime MOV и Матроску не пробовал.

  • [Обновление] Еще один файл в формате TS H.264/AAC@29.97p может быть корректно перемультирован в isom/mp4 без проблем, не требуя каких-либо переключателей ffmpeg, кроме копии -i, -c.

Технические подробности

  • FFMpeg сообщает о миллионах следующих сообщений об ошибках с любой возможной комбинацией этих переключателей или без нее: -fflags +genpts, -fflags +igndts, -fflags +discardcorrupt

    • Командная строкаffmpeg.exe -fflags +igndts -fflags +genpts -fflags +discardcorrupt -i INPUT -c copy -format mp4 OUTPUT
    • Сообщение об ошибке 1:
      [mp4 @ address] pts не имеет значения
      Последнее сообщение повторяется xxx раз
    • Сообщение об ошибке 2:
      [mp4 @ address] Немонотонный DTS в выходном потоке 0:0. Предыдущий... Текущий... Переход на..., бла-бла
  • AVIDemux завершает работу с неправильными метаданными и ошибочным воспроизведением. Свойства файла и поведение при воспроизведении напоминают созданные FFMpeg.

    • Частота кадров становится переменной, должна быть 50i
    • Средняя частота кадров не является правильным значением, показывая очень странные цифры.
    • Частота кадров при воспроизведении ненормальная, колеблется между прочим. 59.94 и 39.хх
  • [Изменить] MP4box выдает следующие предупреждения 2 раза и создает неровное изображение с неправильной частотой кадров, как указано выше. Если вы внимательно просмотрите получившееся видео, вы увидите изображение с множеством блоков; этого нет в исходном файле.

    • Командная строкаmp4box.exe -fps 50 -add "INPUT#video" OUTPUT
    • Сообщение об ошибке:
      [MPEG-2 TS] Сигнал о разрыве PID xx PCR, но разница мала (diff xx us - PCR diff xx vs prev PCR diff 0) - игнорировать его

Мои вопросы, подробно

1 Что такое "DTS" и "PTS"? Кажется, они мешают успешному ремуксированию.
2 Это связано с повреждением файла или ошибкой программного обеспечения (см. https://trac.ffmpeg.org/ticket/4768 и https://trac.ffmpeg.org/ticket/502 )?
3 Если это программная ошибка, каковы обходные пути?
4 Приветствуется любое работоспособное решение, преобразующее транспортные потоки MPEG в MP4. MPEG-TS занимает слишком много накладных расходов и плохо поддерживается на разных платформах и системах.

Диагностическая информация
- дамп MediaInfo для файла 1, файла 2 и файла 1, преобразованный в mp4 с помощью FFMpeg
http://pastebin.ca/3966322

Что значит поврежденное воспроизведение - ошибки декодирования? Скорость воспроизведения всегда неправильная или меняется?
@Mulvya, скорость воспроизведения всегда неправильная; изображение кадра выглядит нормально; декодер может работать, но, видимо, файл непригоден для использования.
Сохраняет ли ремукс TS в TS скорость воспроизведения? File1 store methodнеобычен. Попробуйте с ffmbc . Если вы не можете скомпилировать, получите более старый двоичный файл с сайта videohelp.com/software/ffmbc.
@Mulvya , TS→TS remux работает в FFMpeg со следующими указанными параметрами: -mpegts_service_type advanced_codec_digital_hdtv -mpegts_m2ts_mode false -mpegts_flags system_b; работает в FFMbc с -fflags +genptsуказанным. TS→mp4 преуспел в FFMbc (0.7.2) с -fflags +genpts -f mp4указанным. Взлом ffmbc сработал для этого и некоторых других файлов, с остальными все равно не получилось. Проблема, по-видимому, связана с отметкой времени. Новый вопрос был опубликован, чтобы заменить этот.

Ответы (1)

Чтобы ответить на часть вашего вопроса (и добавить пару других сокращений, с которыми вы столкнетесь):

  • PTS = отметка времени презентации
  • DTS = отметка времени декодирования
  • PCR = опорный сигнал программы
  • SCR = эталон системных часов

Элементарные потоки MPEG переупорядочивают кадры для передачи. PTS указывает порядок, в котором кадры должны быть повторно собраны. DTS сообщает декодеру, нужно ли декодировать кадр, до его отображения (поскольку на него ссылается кадр P или B). PCR или SCR представляют собой шкалу времени, на которую ссылаются PTS и DTS.

tstools и другие анализаторы транспортных потоков могут помочь вам определить, находится ли проблема PCR/PTS/DTS в исходном файле или нет.

Ссылки, которые вы предоставили, просто замечательны! Однако я еще больше запутался после прочтения PDF-стр. 43-44. Хотя PTS не может быть монотонным в результате двунаправленного кодирования, это не должно вызывать затруднений у надлежащего (де)мультиплексора, потому что (i) поток передается и принимается в соответствии с DTS, который должен быть (a) монотонным и ( б) <= PTS-1, и (ii) каждое поле должно иметь осмысленный PTS. Если миллион «pts не имеет значения» и «немонотонный DTS» в FFMpeg реален, как возможно безупречное воспроизведение исходного файла ts (который у меня есть)?
Определенно маловероятно, что проблема с источником не обнаруживается во время воспроизведения и возникает только во время перекодирования. Но когда я хочу убедиться в чем-то в транспортном потоке, я прогоняю его через анализатор. Иногда вы улавливаете что-то тонкое, неправильное, что один декодер может исправить, а другой подавляет.