@DWZ

Как сремуксить TS -> MP4, игнорируя тайминги, жёстко задав частоту кадров?

Требуется под Windows перепаковать без потери качества видео и звук из TS в MP4.

Задача, на первый взгляд, тривиальная. Но есть одно большое НО.

По какой-то неподвластной мне причине во входном TS-файле нарушается правильная дельта инкремента PCR/PTS/DTS между кадрами, ремуксеры на этот бардак реагируют и в результате вместо вот этого

5dad5c1b69b5d822823322.png

получается примерно вот такая вот дичь

5dad5c43d0655524309369.png

плееры реагируют на это

5dad5c63861ea772806346.png

и воспроизводят соответственно. Также нарушается покадровое позиционирование. Сам 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.
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
@DWZ Автор вопроса
Если вкратце - разбить на потоки и сремуксить обратно.

ffmpeg -i source.mp4 -map 0:v -vcodec copy -bsf:v h264_mp4toannexb source-video.h264 -acodec copy -bsf:a aac_adtstoasc output.aac

ffmpeg -fflags +genpts -r 25 -i source-video.h264 -i output.aac -с copy output.mp4


После "-r" подставить свою кадровую частоту. Подробности см. Как восстановить тайм-коды в RAW h.264 и AAC без перекодировки?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы