Конвертировать MP4 видео в формат Xbox 360 может играть

5842
Björn Lindqvist

Вот видео файл, который мой Xbox 360 отказывается воспроизводить:

$ MP4Box -info video.mp4 * Movie Info * Timescale 90000 - Duration 02:18:33.365 Fragmented File no - 2 track(s) File Brand mp42 - version 0 Created: GMT Sat Jul 21 07:08:55 2012  File has root IOD (9 bytes) Scene PL 0xff - Graphics PL 0xff - OD PL 0xff Visual PL: ISO Reserved Profile (0x7f) Audio PL: High Quality Audio Profile @ Level 2 (0x0f) No streams included in root OD  iTunes Info: Encoder Software: HandBrake 0.9.6 2012022800  Track # 1 Info - TrackID 1 - TimeScale 90000 - Duration 02:18:33.235 Media Info: Language "Undetermined" - Type "vide:avc1" - 199318 samples Visual Track layout: x=0 y=0 width=1280 height=688 MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21 AVC/H264 Video - Visual Size 1280 x 688 AVC Info: 1 SPS - 1 PPS - Profile High @ Level 4.1 NAL Unit length bits: 32 Self-synchronized  Track # 2 Info - TrackID 2 - TimeScale 48000 - Duration 02:18:33.365 Media Info: Language "English" - Type "soun:mp4a" - 389689 samples MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40 MPEG-4 Audio MPEG-4 Audio AAC LC - 6 Channel(s) - SampleRate 48000 Synchronized on stream 1  $ avconv -i video.mp4 avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers built on Nov 6 2012 16:51:33 with gcc 4.6.3 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42isomavc1 creation_time : 2012-07-21 07:08:55 encoder : HandBrake 0.9.6 2012022800 Duration: 02:18:33.36, start: 0.000000, bitrate: 2299 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x688, 1973 kb/s, 23.98 fps, 90k tbr, 90k tbn, 180k tbc Metadata: creation_time : 2012-07-21 07:08:55 Stream #0.1(eng): Audio: aac, 48000 Hz, 5.1, s16, 319 kb/s Metadata: creation_time : 2012-07-21 07:08:55 At least one output file must be specified 

Какой инструмент, такой как ffmpeg или mencoder, и какое волшебное заклинание командной строки я должен использовать для перекодирования этого файла в формат, который может воспроизводить Xbox 360? Я хочу, чтобы процесс перекодировки сохранял как можно более высокое качество видео.

С помощью slhck мне удалось создать новый файл mp4 с измененным аудио на два канала. Однако Xbox 360 по-прежнему отказывается играть в нее по какой-то причине. Вот что MP4Box и ffmpeg говорят о новом файле:

$ MP4Box -info final.mp4 * Movie Info * Timescale 1000 - Duration 02:18:33.343 Fragmented File no - 2 track(s) File Brand isom - version 512 Created: GMT Sat Jul 21 07:08:55 2012  File has root IOD (9 bytes) Scene PL 0xff - Graphics PL 0xff - OD PL 0xff Visual PL: Not part of MPEG-4 Visual profiles (0xfe) Audio PL: Not part of MPEG-4 audio profiles (0xfe) No streams included in root OD  iTunes Info: Encoder Software: Lavf53.21.0  Track # 1 Info - TrackID 1 - TimeScale 90000 - Duration 02:18:33.193 Media Info: Language "Undetermined" - Type "vide:avc1" - 199318 samples Visual Track layout: x=0 y=0 width=1280 height=688 MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21 AVC/H264 Video - Visual Size 1280 x 688 AVC Info: 1 SPS - 1 PPS - Profile High @ Level 4.1 NAL Unit length bits: 32 Self-synchronized  Track # 2 Info - TrackID 2 - TimeScale 48000 - Duration 02:18:33.343 Media Info: Language "Undetermined" - Type "soun:mp4a" - 389688 samples MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40 MPEG-4 Audio MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 48000 Synchronized on stream 1 Alternate Group ID 1  $ avconv -i final.mp4  avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers built on Nov 6 2012 16:51:33 with gcc 4.6.3 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'final.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 2012-07-21 07:08:55 encoder : Lavf53.21.0 Duration: 02:18:33.34, start: 0.000000, bitrate: 2161 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x688, 1973 kb/s, 23.98 fps, 90k tbr, 90k tbn, 180k tbc Metadata: creation_time : 2012-07-21 07:08:55 Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 180 kb/s Metadata: creation_time : 2012-07-21 07:08:55 At least one output file must be specified 
4

2 ответа на вопрос

2
slhck

Per the Xbox Engineering Video Playback FAQ, the h.264 requirements are:

  • Video Profiles: Baseline, main, and high (up to Level 4.1) profiles.
  • Video Bitrate: 10 Mbps with resolutions of 1920 x 1080 at 30fps. See question number 11 for more information.
  • Audio Profiles: 2 channel AAC low complexity (LC)
  • Audio Max Bitrate: No restrictions.

Now, as a general command line, this should work:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -crf 23 -c:a libfaac -q:a 100 output.mp4 

Change the -crf and -q:a parameters to vary the quality. Lower CRF means better. 23 is the default, but choose something between 18 and 28 and see if you like the quality. The audio quality for FAAC is in percent, so 100% is the default and higher means better.


In your specific case, all requirements are met, except for the number of audio channels. You have 5.1 audio and need to convert it to 2.0 stereo. We therefore copy the video bitstream and change the number of audio channels using the -ac option:

ffmpeg -i input.mp4 -c:a libfaac -q:a 100 -ac 2 -c:v copy output.mp4

Change the highlighted parts depending on what encoder you have—some FFmpeg versions might not bundle FAAC, so you could use the built-in encoder as well:

ffmpeg -i input.mp4 -c:a aac -strict experimental -ac 2 -c:v copy output.mp4

If you get an error about FFmpeg not being able to downmix 6-channel audio to 2-channels, what you have to do is extract the raw audio, then downsample it with FAAD.

ffmpeg -i input.mp4 -c:a copy audio-6.aac 

Then, downsample to a PCM stereo WAV file:

faad -d -o audio-2.wav audio-6.aac 

And remux it into the video you have. This will not re-encode the video, so it'll retain your original quality, but we'll have to encode the audio again. If you don't have libfaac, see above for the built-in alternative method using aac.

ffmpeg -i input.mp4 -i audio-2.wav -c:v copy -c:a libfaac -map 0:0 -map 1:0 output.mp4 

If the video still doesn't play, you could try re-encoding the whole thing again.

Благодарю. Это почти работает, когда я использую `avconv` вместо` ffmpeg`. Но тогда я получаю ошибку: не могу пересчитать 6 каналов при 48000 Гц до 2 каналов при 48000 Гц Björn Lindqvist 11 лет назад 0
Спасибо, но до сих пор нет игры в кости. Теперь я получаю другую ошибку в вашей последней команде: `[mp4 @ 0x12aea20] Tag [1] [0] [0] [0] / 0x00000001 несовместим с идентификатором выходного кодека '65536'` Björn Lindqvist 11 лет назад 0
Думаю, я понял это сейчас. faad выводит стереозвук PCM, а не AAC. Мы должны будем преобразовать это снова. slhck 11 лет назад 0
Хорошо. Это создает новый видеофайл, который кажется действительным, но Xbox 360 по-прежнему не воспроизводит его. Я обновил свой вопрос информацией `avconv` и` MP4Box`. Björn Lindqvist 11 лет назад 0
Гектометр Я сдаюсь. Если бы у меня был только Xbox, я бы наверняка вам помог, но, насколько я могу судить, файл кажется верным. У вас есть другие видео, которые действительно воспроизводятся на Xbox? Мы могли бы взглянуть на то, что отличается. Вы также пытались перекодировать битовый поток (стерео аудио) видео, может быть, даже с помощью `ffmpeg -i input.mp4 -c: v libx264 -profile: v baseline -c: копия output.mp4`? Это дало бы нам видеопоток с более низким профилем. Хотя Xbox поддерживает до High, это также может быть проблемой. Или файл без аудио (опция `-an`). По крайней мере, мы бы знали, видео это или аудио часть. slhck 11 лет назад 0
Да, у меня есть много других видео, которые воспроизводятся нормально. Но с mp4 это определенно попало. Некоторые работы MP4, но большинство этого не делают. Перекодирование, как в вашем примере команды, уже заняло 24 часа, и я не думаю, что оно когда-либо завершится. Плюс строка состояния ffmpeg читает `frame = 19313100 fps = 233 q = 33.0 size = 6625618kB time = 214.59 bitrate = 252934.5kbits / s dup = 19307954 drop = 0`, и я думаю, что часть" bitrate = 252934.5kbits / s "означает это делает что-то действительно безумное. Если бы был способ перекодировать этот файл в более дружественный формат, я бы определенно использовал его вместо этого, но ничего из того, что я пробовал до сих пор, не сработало. Björn Lindqvist 11 лет назад 0
Если это обычный фильм, и он занимает больше, чем, скажем, полчаса, то с исходным видео что-то не так (битовая ошибка?). Вы можете попробовать перекодировать с помощью `-c: v mpeg4`, который также должен быть совместим с Xbox, но вам нужно больше битрейта, чтобы приспособиться к худшему кодеку. Или попробуйте конвертировать в промежуточный формат без потерь, такой как Huffyuv, в AVI, а затем обратно в x264. Просто чтобы прояснить: нормально ли воспроизводится файл на вашем компьютере? slhck 11 лет назад 0
Не знаете, как вы предлагаете мне перекодировать его? `avconv -i in.mp4 -c: v mpeg4 -profile: v baseline -c: копия out.mp4` не работает. Оригинальное видео воспроизводится без проблем в mplayer, totem и других проигрывателях. Björn Lindqvist 11 лет назад 0
Если вы говорите, что это «не работает», что именно происходит? Команда itslelf не работает или видео не воспроизводится? slhck 11 лет назад 0
Я имею в виду, что avconv не принимает команду, она говорит `[mpeg4 @ 0x1373ca0] [Eval @ 0x7fffba481e00] Неопределенная константа или отсутствует '(' в 'baseline' Невозможно проанализировать значение параметра" baseline "` Björn Lindqvist 11 лет назад 0
Там нет базового профиля для MPEG-4 Visual. Просто пропустите `-profile: v baseline`. Вы можете добавить опцию `-qscale: v 3` для качества (чем ниже, тем лучше,` qscale` уменьшается до 31). slhck 11 лет назад 0
0
AntonChanning

Я пытался сделать то же самое, что и оригинальный постер. По какой-то причине мне не повезло получить инструкции в ответе Слхка на работу. Может быть, потому что мой рабочий ноутбук имеет Ubuntu, который заменил ffmpegна avconv.

Короче говоря, я отказался от использования решения командной строки, установил handbrakeи преобразовал файлы, используя Universalпредустановку. Это производит правильно отформатированные файлы в mp4формате, но дает им m4vрасширения. Переименуйте файлы, чтобы дать им mp4расширения. Это означает то же самое, но Xbox не знает об этом и будет читать их, только если расширение mp4.

Похожие вопросы