Столкнулся на днях с проблемой. Очень захотелось посмотреть фильм в формате mkv на большом экране телевизора. Я использую ushare для просмотра видео через xbox 360. Но на xbox, как оказалось, проигрывается достаточно малая часть существующих форматов. И естественно mkv в этот список не входит.
Видео форматы поддерживаемые Xbox 360
Далее приведены форматы, которые должны проигрыватсья на xbox. У меня получилось только с avi-контейнером (видео кодек xvid, аудио — mp3). Пробывал еще mp4, но мои файлы так и не завелись.
AVI
- File extensions: .avi, .divx
- Containers: AVI
- Video profiles: MPEG-4 Part 2 (Simple Profile and Advanced Simple Profile)
- Video bit rate: 5 Mbps with resolutions of 1280 × 720 at 30 fps.
- Audio profiles: Dolby® Digital (2 channel and 5.1 channel), MP3
- Audio max bit rate: No restrictions.
H.264
- File extensions: .mp4, .m4v, mp4v, .mov, .avi
- Containers: MPEG-4, QuickTime
- Video profiles: Baseline, main, and high (up to level 4.1)
- Video bit rate: 10 Mbps with resolutions of 1920 × 1080 at 30 fps.
- Audio profiles: AAC, 2-channel, Low Complexity
- Audio max bit rate: No restrictions.
MPEG-4
- File extensions: .mp4, .m4v, .mp4v, .mov, .avi
- Containers: MPEG-4, QuickTime
- Video profiles: MPEG-4 Part 2 (Simple Profile and Advanced Simple Profile)
- Video bit rate: 5 Mbps with resolutions of 1280 × 720 at 30 fps.
- Audio profiles: AAC, 2-channel, Low Complexity
- Audio max bit rate: No restrictions.
WMV
- File extensions: .wmv
- Containers: ASF
- Video profiles: WMV7 (WMV1), WMV8 (WMV2), WMV9 (WMV3), VC-1 (WVC1 or WMVA) in simple, main, and advanced up to level 3
- Video bit rate: 15 Mbps with resolutions of 1920 × 1080 at 30 fps.
- Audio profiles: WMA7/8, WMA9 Pro (stereo and 5.1), WMA Lossless
- Audio max bit rate: No restrictions.
Необходимые программы
- ffmpeg: без комментариев;
- mkvtoolnix: для работы с mkv;
- audacity: если необходимо перекодировать многоканальный звук в 2-х канальный (подскажите способ попроще!);
- mediainfo: для просмотра информации о медиа файлах (дополнительно).
Перекодировка в avi (xvid + mp3)
Достаточно долго я мучился козалось бы с простой задачей. Возможно как-то и возможно с помощью ffmpeg за один раз перекодировать из mkv в avi. У меня это не получилось. Основной проблемой оказалось перевести 6-ти канальный звук aac в стерео mp3. ffmpeg и lame наотрез отказались это делать. Поэтому все опперации разбил как можно мельче и не пытался найти хитрого решения в одну строчку. Главное, что мой файл все-таки стал проигрываться!
Весь процесс сводится к следующим манипуляциям:
- Извлечение необходимых видео и аудио дорожек;
- Перекодирование звука (mp3);
- Перекодирование видео (xvid);
- Сборка в один файл (avi).
Для начала узнаем что у нас внутри mkv-файла:
$ mediainfo video.mkv
Вместо mediainfo в данном случае можно использовать mkvinfo из состава mkvtoolnix. Плюс mediainfo в том, что он позволяет просматривать содержимое любого видио контейнера.
Видим нечто подобное:
General Complete name : video.mkv Format : Matroska File size : 1.08 GiB Duration : 1h 28mn Overall bit rate : 1 755 Kbps Movie name : Film Encoded date : UTC 2008-08-11 01:22:23 Writing application : mkvmerge v2.0.2 ('You're My Flame') built on Jul 3 2007 05:59:18 Writing library : libebml v0.7.7 + libmatroska v0.8.1 Cover : Yes / Yes / Yes / Yes / Yes Video ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : High@L3.1 Format settings, CABAC : Yes Format settings, ReFrames : 10 frames Muxing mode : Container profile=Unknown@3.1 Codec ID : V_MPEG4/ISO/AVC Duration : 1h 28mn Width : 720 pixels Height : 432 pixels Display aspect ratio : 2.35:1 Original display aspect ratio : 1.667 Frame rate : 25.000 fps Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Title : Film Writing library : x264 core 61 Encoding settings : cabac=1 / ref=10 / deblock=1:-3:0 / analyse=0x3:0x133 / me=umh / subme=7 / psy_rd=0.800000 / brdo=1 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=0 / threads=1 / nr=0 / decimate=1 / mbaff=0 / bframes=6 / b_pyramid=1 / b_adapt=2 / b_bias=0 / direct=1 / wpredb=1 / bime=1 / keyint=300 / keyint_min=25 / scenecut=35 / rc=crf / crf=17.6 / rceq='blurCplx^(1-qComp)' / qcomp=1.00 / qpmin=10 / qpmax=51 / qpstep=4 / ip_ratio=1.40 / pb_ratio=1.30 / aq=2:1.10 / zones=125253,132448,q=35 Language : English Audio #1 ID : 2 Format : AAC Format/Info : Advanced Audio Codec Format version : Version 4 Format profile : LC Format settings, SBR : No Codec ID : A_AAC Duration : 1h 28mn Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFE Sampling rate : 48.0 KHz Title : Russian AAC-LC 6Ch 48KHz ~288Kbps Language : Russian Audio #2 ID : 3 Format : AAC Format/Info : Advanced Audio Codec Format version : Version 4 Format profile : LC Format settings, SBR : No Codec ID : A_AAC Duration : 1h 28mn Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFE Sampling rate : 48.0 KHz Title : English AAC-LC 6Ch 48KHz ~289Kbps Language : English
Возможно наличие дополнительных материалов, субтитров и т.п. Но они нам не нужны. Выбираем необходимые треки, а именно видео с id 1 и русское аудио с id 2.
$ mkvextract tracks video.mkv 1:video.h264 2:audio.aac
Далее необходимо перекодировать 6-ти канальную звуковую дорожку aac в 2-х канальную mp3. Для этого я использовал audacity. Импортировал файл, а затем экспортировал его в mp3. Консольный вариант для подобной операции я не нашел. Если известен пишите! Как указывал выше ffmpeg и lame с этим у меня не справились. Может им надо указать какие-то хитрые параметры?
Дальше надо перекодировать h264 видео с помощью xvid кодека. Битрейд выбираем такой же как и был. Значения по умолчанию сильно качество портят.
$ ffmpeg -i video.h264 -b 1000k -vcodec libxvid -vtag xvid -aspect 16:9 video.avi
Теперь все можно собрать в один файл:
$ ffmpeg -i video.h264 -i audio.mp3 -vcodec copy -acodec copy out.avi
Обновляем ushare и avi-файл можно смотреть на xbox.
Используемые ссылки
P.S.
Cy6erBr4in подсказал, что fuppes должен налету перекодировать видео. Попробую. Это конечно будет удобнее. Только вот сомнения гложут, что все корректно перекодироваться будет. А также думаю, что не потянет мой компьютер вовремя все перекодировать.
P.S.S.
Перекодировку аудио в случае с 6-ти каналами можно сделать так:
$ ffmpeg -i audio.aac -acodec ac3 -ab 192k tmp.ac3 $ ffmpeg -i tmp.ac3 -acodec libmp3lame -ab 192k -ac 2 audio.mp3
Подсмотрено тут. Вариант с использование опции -strict experimental
у меня не заработал.
3 комментария:
Перекодировать звук из 6-ти канального в стерео можно тем-же ffmpeg:
$ ffmpeg -y -i "input.mkv" -map 0.x -vn -acodec libfaac -ab 128k -ac 2 -ar 48000 -strict experimental "output.aac"
Не работает у меня так с ffmpeg-0.5_p20373:
Resampling with input channels greater than 2 unsupported.
Can not resample 6 channels @ 48000 Hz to 2 channels @ 48000 Hz
2derand
Удалось перекодировать в 2 канала через промежуточный файл как у вас описано http://derand.blogspot.com/2010/07/iphoneipod-touch-ipad.html:
$ ffmpeg -y -i -map 0.1 -vn -acodec ac3 -ab 128k ./tmp.ac3
$ ffmpeg -y -i ./tmp.ac3 -vn -acodec libmp3lame -ab 128k -ac 2 .mp3
Отправить комментарий