Pasha_49
01-06-2012, 14:33
Доброго времени суток! Пытаюсь настроить автоматическое "кодирование" фильмов из mkv/avi в mp4. Нужно сделать это автоматизированно и максимально быстро.
Цель: просто поменять контейнер, без перекодирования и потери качества, с сохранением всех звуковых дорожек, субтитров, и т.д. Нужно чтоб эти фильмы можно было проигрывать в flash плеере, и на компьютере через обыкновенные плееры.
Для mkv: Поскольку нужно всё автоматизировать и сделать максимально быстро, то придётся извращаться. MP4 контейнер требует звук в aac. Видео в контейнере mkv уже ужато всяческими x264. Поэтому видео кодировать не нужно, достаточно извлекать видео дорожку. Аудиодорожки тоже надо извлекать. Те, что в aac мы только извлекаем. А те, что в ac3, dts, придётся перекодировать в aac.
К сожалению не нашёл метода кодирования сразу всего файла. Для автоматизации всё будет кодироваться на линуксе, и нужны только консольные программы. ffmpeg не умеет адекватно кодировать фильмы из mkv в mp4 с сохранением качества, и всех дорожек. Он по умолчанию берет только первую дорожку, вырезая остальные. Параметры -map 0:1 и т.д. в 50% работают некорректно(т.к. видео файлы бывают разными, и даже при правильном указании количества дорожек ffmpeg часто ругается).
Пришлось с помощью mediainfo, или mkvmerge, или ffprobe пропарсить всю информацию о видео файле. С помощью mkvextract tracks извлечь все дорожки, сабы. С помощью ffmpeg перекодировать ac3, dts аудиодорожки в aac. А потом MP4Box'ом упаковать в mp4 контейнер с перемещением метаданных в начало. Всё работает отлично, видео можно смотреть на любом плеере с выбором аудиодорожек. Смотреть во flash и html5 плеере с перемоткой на любой момент(псевдостриминг).
Но сталкнулся с проблемой. Например для кодирования видео рамером около 10-30 GB. Если в видеофайле много звуковых дорожек, то чем больше дорожек в получаемом MP4 файле, тем дольше его открывают все плееры. Возможно причина в том, что плеер не может нормально определить продолжительность фильма. В исходном файле длина виде и аудио дорожек одинакова. Но в mp4 некоторые аудиодорожки могут отличаться по длине от видео. И чем больше таких дорожек, тем проблемнее открыть видео(плеер может минуту думать и вычислять длину фильма).
Почему при извлечении дорожек и упаковке их в mp4 меняется продолжительность? Как можно "исправить" mp4 файл, чтоб он нормально открывался при большом количестве аудиодорожек? Или может кто знает другой способ кодирования mkv в mp4 без потери качества и дорожек?
Цель: просто поменять контейнер, без перекодирования и потери качества, с сохранением всех звуковых дорожек, субтитров, и т.д. Нужно чтоб эти фильмы можно было проигрывать в flash плеере, и на компьютере через обыкновенные плееры.
Для mkv: Поскольку нужно всё автоматизировать и сделать максимально быстро, то придётся извращаться. MP4 контейнер требует звук в aac. Видео в контейнере mkv уже ужато всяческими x264. Поэтому видео кодировать не нужно, достаточно извлекать видео дорожку. Аудиодорожки тоже надо извлекать. Те, что в aac мы только извлекаем. А те, что в ac3, dts, придётся перекодировать в aac.
К сожалению не нашёл метода кодирования сразу всего файла. Для автоматизации всё будет кодироваться на линуксе, и нужны только консольные программы. ffmpeg не умеет адекватно кодировать фильмы из mkv в mp4 с сохранением качества, и всех дорожек. Он по умолчанию берет только первую дорожку, вырезая остальные. Параметры -map 0:1 и т.д. в 50% работают некорректно(т.к. видео файлы бывают разными, и даже при правильном указании количества дорожек ffmpeg часто ругается).
Пришлось с помощью mediainfo, или mkvmerge, или ffprobe пропарсить всю информацию о видео файле. С помощью mkvextract tracks извлечь все дорожки, сабы. С помощью ffmpeg перекодировать ac3, dts аудиодорожки в aac. А потом MP4Box'ом упаковать в mp4 контейнер с перемещением метаданных в начало. Всё работает отлично, видео можно смотреть на любом плеере с выбором аудиодорожек. Смотреть во flash и html5 плеере с перемоткой на любой момент(псевдостриминг).
Но сталкнулся с проблемой. Например для кодирования видео рамером около 10-30 GB. Если в видеофайле много звуковых дорожек, то чем больше дорожек в получаемом MP4 файле, тем дольше его открывают все плееры. Возможно причина в том, что плеер не может нормально определить продолжительность фильма. В исходном файле длина виде и аудио дорожек одинакова. Но в mp4 некоторые аудиодорожки могут отличаться по длине от видео. И чем больше таких дорожек, тем проблемнее открыть видео(плеер может минуту думать и вычислять длину фильма).
Почему при извлечении дорожек и упаковке их в mp4 меняется продолжительность? Как можно "исправить" mp4 файл, чтоб он нормально открывался при большом количестве аудиодорожек? Или может кто знает другой способ кодирования mkv в mp4 без потери качества и дорожек?