Wie konvertiere ich MKV-Videos in verlustfreie MP4-Videos, die mit iOS-Geräten unter Windows kompatibel sind?

10

Ich bin neu in FFmpeg (Windows) und brauche Hilfe.

Ich möchte meine MKVs mit möglichst geringem Qualitätsverlust auf MP4 umstellen. Die MKVs werden mit MakeMKV hergestellt und enthalten unter anderem DTS-Soundtrack. Sie sind verlustfrei. Der Grund, warum ich konvertieren möchte, ist, dass ich vorhabe, es auf iPads und Apple TV zu streamen. iPads unterstützen keine DTS und MKVs. Die MKVs sind sowohl DVDs als auch Blu-Ray. Die MKVs enthalten Videos, Soundtracks und Untertitel.

Ich habe es versucht, bekomme aber aufgrund des DTS-Soundtracks keinen Sound:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

Kann mir jemand helfen?

Welche Codecs soll ich verwenden? MP4 ist das Beste für Apple?

Auffällig
quelle
1
Gibt es bestimmte iPad- und Apple TV-Versionen, auf die Sie abzielen, oder möchten Sie alle unterstützen?
Llogan
2
Hinweis: MP4 ist kein Codec. Es ist nur ein Dateiformat (ein "Container").
Slhck
Ich habe den neuesten iPod Air. Ich habe das neueste Apple TV. Ich weiß, dass MP4 ein Container und kein Codec ist :)
Striky
Bitte geben Sie einige Informationen zu einem Ihrer typischen Eingänge an. Die vollständige Konsolenausgabe von ffmpeg -i input.mkvwird ausreichen.
Llogan
Ich habe versucht, ffmpeg -i input.mkv -c: v copy -c: eine Kopie output.mp4 Dies wurde abgespielt, bekam aber keinen Ton, da Apple kein DTS spielt. Habe auch ffmpeg -i input.mkv -strict experimentell -c: v copy -c: aac -b: a 192k -q: a 6 output.mp4 ausprobiert, aber der Film (sowohl Video als auch Ton) lief auf meinem Computer nicht reibungslos ab iPad Air (sowohl gestreamt als auch heruntergeladen).
Striky

Antworten:

22

MP4 ist in der Tat das beste Format für Apple-Geräte und -Software. DTS wird in der Tat auch nicht unterstützt, viele MP4-Videodateien enthalten zwei Audiospuren, eine DTS- und eine AAC.

Es stehen mehrere Encoder zur Verfügung, die alle im ffmpeg-Wiki dokumentiert sind . Welcher Codec verfügbar ist, hängt davon ab, wie ffmpeg kompiliert wurde. libfdk_aac liefert die besten Ergebnisse, ist jedoch nicht immer verfügbar, da dieser Codec nicht kostenlos ist.

Dinge, die Sie ausprobieren können (ich stelle sie in die Reihenfolge meiner wahrgenommenen Qualität, am besten zuerst)

ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -b:a 128k output.mp4
ffmpeg -i input.mkv -strict experimental -c:v copy -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c:v copy -c:a libfaac -b:a 192k output.mp4

Wenn Sie auch die DTS-Spur beibehalten möchten, verwenden Sie das -mapFlag.

Nicht direkt für OP, aber der OS X-Programm- Subler macht diesen Prozess sehr einfach.

EDIT: Kommentare tl; dr? OP löste das Problem mit dem folgenden Befehl

ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a aac -b:a 384 -c:s copy output.mp4

TIPP: Wenn -c:s copyUntertitel nicht funktionieren, versuchen Sie es -c:s mov_text.
Hat mich mehrfach gerettet.

jornane
quelle
Ich glaube nicht, dass der VBR-Modus des internen AAC-Encoders wie vorgesehen funktioniert. Als ich das letzte Mal nachgesehen habe, war es kaputt. Gehen Sie besser mit CBR und verwenden Sie VBR für die anderen Encoder ( libfdkund libfaac)
slhck
Ich habe auch gelesen, dass libfdk_aac das beste Ergebnis liefert. Ich habe die statische 32-Bit-Version für Windows heruntergeladen (git-9722a6a (2014-05-24)). Wie kann ich überprüfen, ob ich den libfdk-Codec habe? Edit: Ich bekomme unbekannten Encoder 'libfdk_aac'. Wo kann ich es herunterladen oder gibt es einen fast genauso guten Audio-Codec?
Striky
Habe sowohl ffmpeg -i input.mkv -c: v copy -c: a libfdk_aac -b: eine 128k output.mp4 als auch ffmpeg -i input.mkv -c: v copy -c: eine libfaac -b: eine 192k-Ausgabe ausprobiert .mp4 No go :(
Striky
@Striky "No go :(" Ich habe den letzten Befehl mit einem neuen ffmpeg von Homebrew versucht, funktioniert für mich. Können Sie mehr Details darüber geben, warum es für Sie nicht funktioniert?
jornane
@slhck: Ich habe gerade die -c:a aac -q:a 6Einstellungen ausprobiert und das Ergebnis mit verglichen. -c:a libfaac -b:a 192kMeiner Meinung nach liefert der aac- Codec bessere Ergebnisse als libfaac . Da sich die Codecs jedoch in der Entwicklung befinden, kann sich dies ändern. libfdk_aac wird wahrscheinlich noch bessere Ergebnisse liefern, aber ich habe es momentan nicht verfügbar.
Jornane
0

Ich weiß, dass dies eine alte Frage ist - und bereits eine Antwort hat -, aber ich wollte einige Befehle, die ich verwende, mit FFmpeg unter macOS teilen.

Ein x264-Video-codiertes MP4 mit AAC-Audio von einem MKV

Grundlegende Konvertierung eines MKV mit einem MP4 darin, aber Konvertieren des Audios in AAC bei 128k. Beachten Sie die Zuordnungen: -map 0:0bedeutet die erste ( 0) Spur von der Quelleneingabe ( 0) und -map 0:1die zweite ( 1) Spur von derselben Quelleingabe ( 0). Ich mache das gerne in Fällen, in denen es mehrere Audiospuren gibt, also könnte ich so etwas wie auswählen -map 0:3, um die dritte Spur zu bekommen.

ffmpeg -i input.mkv \
       -c:v copy \
       -c:a aac -b:a 128k \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

Ein HEVC / x265-Video, das MP4 mit AAC-Audio von einem MKV codiert

Dies ähnelt dem obigen x264-Befehl, verwendet jedoch stattdessen HEVC / x265, um eine kleinere Dateigröße mit dem gleichen - wenn nicht sogar qualitativ besseren - Video von der Quell-MKV zu erhalten. Beachten Sie, dass ich iOS-Videos bei Verwendung von HEVC / x265 lieber auf 720 skaliere. Die Qualität für die Wiedergabe ohne zu viel Rauschen ist auf meinem MacBook, iPad und iPhone solide. Stellen Sie nur sicher, dass Ihre Hardware und Ihr Betriebssystem die HEVC / x265-Wiedergabe unterstützen. Und seien Sie gewarnt: HEVC / x265 ist sehr CPU-intensiv. Wenn Ihr Computer also nicht über viel CPU-Leistung verfügt, kann es ungefähr einen Tag dauern, bis 90 Minuten Video codiert sind.

ffmpeg -i input.mkv \
       -vf scale=-1:720 \
       -c:v libx265 -crf 20 \
       -c:a aac -b:a 128k \
       -threads 4 \
       -tag:v hvc1 \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

Hier finden Sie eine Aufschlüsselung aller anderen Kernparameter als Eingabe- und Ausgabedateien.

  • -vf scale=-1:720: Skalieren Sie das Video auf 720 Höhe und berechnen Sie automatisch die Breite. Beachten Sie, dass FFmpeg möglicherweise einige MKVs aus Gründen erstickt, die mir nicht 100% klar sind. Sie müssten daher die Breite explizit wie folgt einstellen : -vf scale=1280:720. Experimentieren Sie und sehen Sie, was für Sie funktioniert.
  • -c:v libx265 -crf 20: Das libx265ist der Videocodierungscodec. Das -crf 20ist der CRF (Constant Rate Factor) . Die Standard-CRF, wenn Sie sie nicht angeben, ist 28, aber - ab sofort - finden Sie die Qualität ziemlich genau ... Meh. Ich bevorzuge 20, da es eine sehr gute Balance zwischen Qualität und Dateigröße ist.
  • -threads 4: Ich möchte Thread-Anzahl angeben. 4 ist das, was mein System jetzt verarbeiten kann, aber manchmal raste ich es auf 2 oder 3. Eine höhere Anzahl ist schneller, wenn Sie über genügend CPUs verfügen, um damit umzugehen.
  • -tag:v hvc1: Die magische Metadateneinstellung für iOS-Geräte zur ordnungsgemäßen Wiedergabe von HEVC / x265-Videos.

Und das war es auch schon!

JakeGould
quelle