Konvertieren Sie mp4-Videos in ein Format, das von der Xbox 360 wiedergegeben werden kann

5908
Björn Lindqvist

Hier ist eine Videodatei, die meine Xbox 360 nicht abspielen kann:

$ 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 

Welches Tool wie ffmpeg oder mencoder und welche magische Befehlszeilenbeschwörung sollte ich verwenden, um diese Datei in ein Format umzuwandeln, das von der Xbox 360 unterstützt wird? Ich möchte, dass der Transkodierungsprozess eine möglichst gute Videoqualität beibehält.

Mit der Hilfe von slhck habe ich es geschafft, eine neue mp4-Datei zu erstellen, deren Audio auf zwei Kanäle geändert wurde. Die Xbox 360 weigert sich jedoch aus irgendeinem Grund immer noch, sie zu spielen. Folgendes sagen MP4Box und ffmpeg über die neue Datei:

$ 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 Antworten auf die Frage

2
slhck

Pro der Xbox Technik Video - Wiedergabe FAQ sind die h.264 Anforderungen:

  • Videoprofile: Grund-, Haupt- und Hochprofile (bis Stufe 4.1).
  • Videobitrate: 10 Mbps mit Auflösungen von 1920 x 1080 bei 30 fps. Siehe Frage Nr. 11 für weitere Informationen.
  • Audioprofile: 2-Kanal-AAC mit geringer Komplexität (LC)
  • Audio Max Bitrate: Keine Einschränkungen.

Als allgemeine Befehlszeile sollte dies funktionieren:

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

Ändern Sie die Parameter -crfund -q:a, um die Qualität zu variieren. Niedriger CRF bedeutet besser. 23 ist die Standardeinstellung, aber wählen Sie etwas zwischen 18 und 28 und sehen Sie, ob Ihnen die Qualität gefällt. Die Audioqualität für FAAC ist in Prozent, daher ist 100% die Standardeinstellung und höher bedeutet besser.


In Ihrem speziellen Fall werden alle Anforderungen mit Ausnahme der Anzahl der Audiokanäle erfüllt. Sie haben 5.1 Audio und müssen es in 2.0 Stereo konvertieren. Wir kopieren daher den Video-Bitstream und ändern die Anzahl der Audiokanäle mit der -acOption :

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

Ändern Sie die hervorgehobenen Teile in Abhängigkeit vom verwendeten Encoder. Einige FFmpeg-Versionen enthalten möglicherweise kein FAAC-Paket. Sie können also auch den integrierten Encoder verwenden:

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

Wenn Sie eine Fehlermeldung erhalten, dass FFmpeg 6-Kanal-Audio nicht auf 2-Kanal-Downmix heruntermischen kann, müssen Sie das Roh-Audio extrahieren und es mit FAAD herunterrechnen .

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

Laden Sie dann eine PCM-Stereo-WAV-Datei herunter:

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

Und remux es in das Video, das du hast. Dadurch wird das Video nicht erneut codiert. Die ursprüngliche Qualität bleibt jedoch erhalten. Wir müssen das Audio jedoch erneut codieren. Wenn nicht libfaac, sehen Sie oben die integrierte Alternativmethode mit aac.

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

Wenn das Video immer noch nicht abgespielt wird, können Sie versuchen, das Ganze erneut zu kodieren.

Vielen Dank. Es funktioniert fast, wenn ich 'avconv' anstelle von 'ffmpeg' verwende. Aber dann bekomme ich den Fehler: Kann 6 Kanäle bei 48000 Hz nicht auf 2 Kanäle bei 48000 Hz resample Björn Lindqvist vor 11 Jahren 0
Danke aber trotzdem keine Würfel. Jetzt erhalte ich bei Ihrem letzten Befehl einen anderen Fehler: `[mp4 @ 0x12aea20] Tag [1] [0] [0] [0] / 0x00000001 nicht kompatibel mit der Ausgabecodec-ID '65536' ' Björn Lindqvist vor 11 Jahren 0
Denke, ich habe es jetzt verstanden. "faad" gibt PCM-Stereo-Audio aus, nicht AAC. Wir müssen das noch einmal konvertieren. slhck vor 11 Jahren 0
In Ordung. Dadurch wird eine neue Videodatei erstellt, die scheinbar gültig ist. Die Xbox 360 spielt sie jedoch nicht ab. Ich habe meine Frage mit "avconv" und "MP4Box" aktualisiert. Björn Lindqvist vor 11 Jahren 0
Hm. Ich gebe auf. Wenn ich nur eine Xbox zum Ausprobieren hätte, würde ich Ihnen sicherlich helfen, aber soweit ich das beurteilen kann, scheint die Datei gültig zu sein. Hast du noch andere Videos, die tatsächlich auf der Xbox abgespielt werden? Wir könnten einen Blick darauf werfen, was anders ist. Haben Sie auch versucht, den (Stereo-Audio-) Video-Bitstream neu zu codieren, vielleicht sogar mit `ffmpeg -i input.mp4 -c: v libx264 -profile: v baseline -c: eine Kopie output.mp4`? Dies würde uns einen Videostream mit geringerem Profil geben. Obwohl die Xbox bis zu High unterstützt, könnte dies ebenfalls ein Problem sein. Oder eine Datei ohne Audio (`-an`-Option). Zumindest wissen wir, ob es sich um den Video- oder Audioteil handelt. slhck vor 11 Jahren 0
Ja, ich habe viele andere Videos, die gut abgespielt werden. Aber mit mp4 ist es definitiv ein Hit. Einige mp4 funktionieren, aber die meisten nicht. Das erneute Kodieren wie in Ihrem Beispielbefehl hat bereits 24 Stunden gedauert und ich glaube nicht, dass es jemals abgeschlossen werden wird. Außerdem liest die ffmpeg-Statuszeile `frame = 19313100 fps = 233 q = 33.0 size = 6625618kB time = 214.59 bitrate = 252934.5 kbit / s dup = 19307954 drop = 0` und ich denke, der Teil" bitrate = 252934.5kbits / s "bedeutet es macht etwas wirklich Verrücktes. Wenn es eine Möglichkeit gäbe, diese Datei in ein freundlicheres Format umzucodieren, würde ich das definitiv verwenden, aber nichts, was ich bisher ausprobiert habe, hat funktioniert. Björn Lindqvist vor 11 Jahren 0
Wenn es sich nur um einen normalen Film handelt, der mehr als eine halbe Stunde dauert, liegt ein Fehler (Bitfehler?) Des Quellvideos vor. Sie könnten versuchen, die Neucodierung mit `-c: v mpeg4` durchzuführen, die ebenfalls mit der Xbox kompatibel sein sollte, aber Sie benötigen mehr Bitrate, um den schlechteren Codec zu unterstützen. Oder versuchen Sie, ein verlustfreies Zwischenformat wie Huffyuv in eine AVI-Datei zu konvertieren, und dann zurück zu x264. Nur um klar zu sein: Spielt die Datei normalerweise auf Ihrem Computer? slhck vor 11 Jahren 0
Sie sind sich nicht sicher, wie Sie vorschlagen, sie neu zu codieren? `avconv -i in.mp4 -c: v mpeg4 -profile: v baseline -c: eine copy out.mp4` funktioniert nicht. Das Originalvideo wird problemlos in Mplayer, Totem und anderen Spielern abgespielt. Björn Lindqvist vor 11 Jahren 0
Wenn Sie sagen, dass es "nicht funktioniert", was passiert genau? Funktioniert der Befehl nicht oder wird das Video nicht abgespielt? slhck vor 11 Jahren 0
Was ich damit meine, ist, dass avconv den Befehl nicht akzeptiert, er sagt: [mpeg4 @ 0x1373ca0] [Eval @ 0x7fffba481e00] Nicht definierte Konstante oder fehlt '(' in 'Baseline' Kann den Optionswert "Baseline" `nicht parsen.) Björn Lindqvist vor 11 Jahren 0
Es gibt kein Basisprofil für MPEG-4 Visual. Lassen Sie einfach die `-profile: v baseline` aus. Sie können die Option "-qscale: v 3" für die Qualität hinzufügen (niedriger bedeutet besser, "qscale" sinkt auf 31). slhck vor 11 Jahren 0
0
AntonChanning

Ich habe versucht, das gleiche wie das Originalposter zu machen. Aus irgendeinem Grund hatte ich kein Glück, die Anweisungen in der Antwort von slhck zu finden. Vielleicht, weil meine Arbeit Laptop hat ubuntu, die ersetzt wurde ffmpegmit avconv.

Um es kurz zu machen: Ich habe die Verwendung einer Befehlszeilenlösung aufgegeben handbrakeund die Dateien mit der UniversalVoreinstellung installiert und konvertiert . Dadurch wurden korrekt formatierte Dateien im mp4Format erzeugt, sie erhalten jedoch m4vErweiterungen. Benennen Sie die Dateien um, um ihnen mp4Erweiterungen zu geben . Es bedeutet dasselbe, aber die Xbox weiß das nicht und wird sie nur lesen, wenn die Erweiterung ist mp4.