Требуется под Windows перепаковать без потери качества видео и звук из TS в MP4.
Задача, на первый взгляд, тривиальная. Но есть одно большое
НО.
По какой-то
неподвластной мне причине во входном TS-файле нарушается правильная дельта инкремента PCR/PTS/DTS между кадрами, ремуксеры на этот бардак реагируют и в результате вместо вот этого
получается примерно вот такая вот дичь
плееры реагируют на это
и воспроизводят соответственно. Также нарушается покадровое позиционирование. Сам TS-файл воспроизводится нормально, хоть видео из окна плеера грабай :((((.
Нет ли такого волшебного ремуксера под Windows, который просто тупо перебирал бы кадры из входного TS и кадр за кадром сваливал в выходной MP4, проставляя в stts и ctts значения, исходя из жёстко заданной мной дельты (40 миллисекунд для 25 fps и 20 миллисекунд для 50 fps чересстрочного. Если в mdhd стоит стандартный TimeScale=90000, то это будут 3600 и 1800 соответственно). Естественно, надо сохранить правильный порядок B-кадров.
Ну или какие-то магические ключи для стандартных? Я пробовал ffmpeg, VLC PLayer, mp4box, Virtual Dub ;). Ключ -fps у ffmpeg и mp4box не помогает. Mp4box справлялся хорошо, но в глючит в случае перехода PTS или PCR через 0. Я пробовал убрать переход через 0 при помощи TS_Doctor, но вместо одних глюков появляются другие. Файл, исправленный TS_Doctor'ом, также воспроизводится нормально.
Можно, конечно, "причесать" входной TS до или выходной MP4 после ремукса, но хотелось бы получить всё за один проход. На мой взгляд, операция несложная для того, кто глубоко работает с такими файлами.
Для ясности ещё раз повторю. Мне
НЕ нужно менять частоту кадров, мне
НЕ нужно делать из постоянного fps переменный, мне
НЕ нужно делать из переменного fps постоянный.
Я всего лишь хочу, чтобы ремуксер не умничал, и в выходном MP4 была та же кадровая частота, которая изначально
имелась в виду во входном TS.