Muxing in TS: H264 + AC3 5.1
Привет, Гость ( Вход | Регистрация )
Клуб Янча Трекер КВН ВиКи Правообладателям | Помощь Поиск Участники Календарь |
Muxing in TS: H264 + AC3 5.1
adware |
Суббота, 24 Ноября 2007, 14:23
Сообщение
#1
|
Видеоман Группа: Team RDA Сообщений: 4232 Регистрация: 22 Ноя '03 Откуда: SOME @ EDGES OF EUROPA 2 Юзер Цитировать |
Muxing in TS: H264 + AC3 5.1 = FPS & synchro problems
Проблема синхронизации при муксинге в TS потоков H264 и AC3: Муксирование в TS видео H264 720p и аудио AC3 5.1 (переименованного в MPA) приводит к нарастающему опережению звука относительно видео, на длине файла 4Gb такое опережение составляет к концу порядка 1-2 секунд, и это делает получившийся TS неприменимым. Если бы рассинхрон получался до 100ms, это еще можно было бы терпеть, но 1-2 секунды - это уже полный брак. Подробности процесса: - Поток H264 демуксируется из MKV в RAW H264 с помощью MKVExtract GUI, а затем муксируется в MP4 с помощью Yamb/MP4Box, с заданием правильного FPS, который соответствует конкретному фильму (как правило, 23.976 fps, очень редко 25.000 fps). Это не самый быстрый способ помещения H264 в MP4, но самый распространенный. Правильное значение FPS для конкретного фильма можно узнать проигрывая MKV фильм со звуком AC3 внутри него, через декодер FFDSHOW/Libavcodec, и зайдя в свойства фильтра ffdshow video decoder > Info & debug, и там видим реальный/правильный FPS проигрываемого потока, при этом разумеется в проигрываемом MKV файле рассинхрона со звуком нет до самого конца фильма. - Более быстрый способ помещения H264 потока из MKV в MP4 - это ремуксирование из MKV в MP4 через GDSMux, входящий в последний отдельный пакет Haali Media Splitter - http://haali.cs.msu.ru/mkv/MatroskaSplitter.exe Через него можно сразу поместить и AC3 дорожки в MP4, чего не позволяет ни один другой муксер, и такой файл MP4 H264+AC3 прекрасно проигрывается на ПК, и синхронизация со звуком идеальна до самого конца фильма. К сожалению такой файл MP4 H264+AC3 не открывает XMuxer Pro 2.2. Поэтому мы муксируем только видео H264 в MP4 через GDSMux, а звук AC3 демуксируем из MKV и переименовываем в MPA. - Загружаем Xmuxer в окно Mux полученный любым из двух вышеописанных способов MP4 файл и AC3(переименованный в MPA) звук, задаем PCR=40, при этом для видео задается PES ID = 224, а для аудио PES ID = 189. Нажимаем Start, в итоге получаем TS файл, в котором нарастающее опережение звука относительно видео, на длине файла 4Gb такое опережение составляет к концу порядка 1-2 секунд. При этом муксирование в TS контейнер MP4 H264 + звук AAC в отдельном MP4 контейнере, в полученном TS файле рассинхрона нет, все идеально до самого конца фильма, при этом для звука AAC мы задаем PES ID 192. Если же задавать PES ID 192 для AC3 звука, то в полученном TS файле вместо звука получается тишина с периодичным кваканьем-помехами. То есть проблема рассинхрона имеется только при муксировании H264 с AC3 звуком, а при муксировании с AAC звуком рассинхрона нет. Примечания: - у всех RAW H264 720p потоков в заголовке прописан профиль High@Level 5.1 (такой заголовой формируется по умолчанию в некоторых кодировщиках H264 типа MeGUI) - у всех RAW H264 720p потоков в заголовке прописан FPS=23.98, очень редко прописан FPS=25.00, при этом при муксировании в MP4 были заданы соответственно FPS 23.976 или FPS 25.000, именно при этих значениях идеальна синхронизация звука с видео в MKV или MP4 контейнерах. при этом рассинхрон мы получаем в TS смуксированном через XMuxer независимо от значения FPS в заголовке RAW H264 потока, и независимо от FPS который задавался при муксировании RAW H264 в MP4 контейнер. даже при муксировании в TS через XMuxer MP4 файла с частотой 25.000 fps, в котором был RAW H264 поток с частотой 25.000 fps в заголовке, мы все равно получаем опережение звука относительно видео на те же 1-2 секунды к концу 4Gb TS файла. - FPS заголовка RAW H264 потока можно посмотреть при ремуксинге из RAW H264 в MP4 контейнер через FFMPEG.exe: http://ffdshow.faireal.net/mirror/ffmpeg/ffmpeg.rev8797.7z ffmpeg.exe -i "Video.h264" -vcodec copy Video.mp4 при этом первый раз запускаем эту команду, и через несколько секунд прерываем муксинг нажатием Ctrl+C, а потом запускаем эту же команду заново, и он спросит "Overwrite?", при этом на экране мы сможем увидеть симпортированные параметры RAW H264 потока: разрешение и FPS - полученный TS файл, в котором видео H264 720p, с профилем High@Level 5.1 в его заголовке, корректно проигрывается на ПК только через MPEG сплиттер от Gabest "Mpeg Splitter" 1.0.0.4 (фильтр MpegSplitter.ax - входит в пакет K-Lite 3.01 Full: http://www.codecguide.com/download_kl.htm), либо через встроенный в Media Player Classic сплиттер для MPEG PS/TS/PVA. Если же мы пытаемся использовать Haali Media Splitter при проигрывании полученного TS файла, то звук играется, а видео не показывается. Через Haali Media Splitter мы не можем проиграть видео из смуксенного через XMuxer TS файла, в котором в заголовке RAW H264 видеопотока прописаны профили: High@Level 5.1 / High@Level 5.0 / High@Level 3.2, другие же профили в заголовке он распознает корректно, и показывает видео. Сплиттеры от Elecard не пробовал, не знаю что получится. При этом декодирование видео TS файла, в котором видео H264 720p, с профилем High@Level 5.1 в его заголовке, во всех случаях корректно осуществляется только через Cyberlink H.264/AVC Decoder (PDVD7.x) от плейера Cyberlink PowerDVD 7.3 Ultra Deluxe (с поддержкой Blu-Ray и HD-DVD дисков), если мы используем этот декодер совместно с плейером Media Player Classic. Если же мы используем декодер FFDSHOW Libavcodec или CoreAVC Pro 1.3, то на некоторых TS H264 720p файлах с заголовком High@Level 5.1, мы получаем мусор на экране вместо нормального видео, хотя часть таких TS H264 файлов, смуксенных через XMuxer, проигрывается нормально этими же декодерами, а в контейнерах MKV или MP4 абсолютно все H264 фильмы проигрываются корректно. Готов выложить фрагменты для разбирательств. С чем связана такая задача помещения в TS контейнер H264 видео со звуком AC3? С тем что появился стационарный HD-плейер KISS DP-1600, который первый из HD-плейеров собран на чипе Sigma Designs EM8622L, и поддерживает воспроизведение видео в формате H264, но он не понимает контейнер MKV, а только TS и MP4. В ближайшее время также ожидается появление еще ряда других HD-плейеров на чипе EM8634 с поддержкой H264 видео, но в них тоже врядли будет поддержка MKV, а только TS и MP4. При помещении в MP4 контейнер по спецификации туда нельзя засунуть AC3 звук, а только AAC, а перекодировать из AC3 5.1 в AAC 5.1 - это по 40 минут на каждую звуковую дорожку 1 фильма длиной 1 час 40 минут, поэтому было бы очень хорошо если бы удалось муксировать с нормальной синхронизацией через XMuxer в TS формат H264 поток и AC3 звук, тогда не надо будет перекодировать AC3 в AAC. А готовых фильмов H264 720p в интернете полно (свыше 1000 фильмов), и все они в MKV контейнере, 100% из них имеют звук AC3, и 99% из них имеют в заголовке RAW H264 потока профиль High@Level 5.1 P.S. есть на мой взгляд 2 пути решения этих проблем: 1) долгий, но правильный - внести исправления и доработки в модули XMuxer (как минимум дать возможность задавания вручную FPS муксинга для RAW H264 потока, как это сделано в муксерах MKVToolnix/MKVMerge GUI и Yamb/MP4Box) 2) быстрый, но некрасивый - рассказать какие байты в заголовке RAW H264 потока надо исправлять через HEX редактор, чтобы исправить значение FPS и тип профиля на требуемое нам, при которых не будет проблем с муксингом через XMuxer, синхронизацией, а также со сплиттерами и декодерами. -------------------- |
Lo-Fi Версия | CMSBlog | Сейчас: Пятница, 01 Ноября 2024, 3:02 |