Wie kann ich eine .mkv-Datei verlustfrei in eine .mp4-Datei konvertieren?

119

Ich muss eine Videodatei vom Matroska-Container in den mp4-Container konvertieren. Die Matroska-Datei enthält eine h.264-Videospur und eine AC3-Tonspur. Es sollte möglich sein, dies verlustfrei zu machen, aber wie geht das mit nativen Ubuntu-Tools?

Das Umcodieren ist keine Option.

Seppo Erviälä
quelle
Siehe diese Frage .
Binarylife
2
Dies ist insbesondere eine Lösung zum Konvertieren von Matroska-Dateien, die auf einem Samsung-Fernseher nicht wiedergegeben werden können, in damit kompatible Dateien
siehe
Im Laufe der Jahre habe ich dies als ChromecastStütze H.264mit AACoder MP3in einem MP4Container sehr nützlich gefunden . Es ist sehr einfach, Videos von Ihrem Computer auf ChromecastChrome mit der Google Cast-Erweiterung zu streamen . Ziehen Sie einfach eine Datei MP4mit der richtigen Stream-Codierung per Drag & Drop in ein Browserfenster und starten Sie das Streaming.
Seppo Erviälä

Antworten:

164

Vielleicht ist das einfachste Werkzeug dafür ffmpeg, oder avconvaus dem libav-toolsPaket. Libav ist ein Fork von FFmpeg, zu dem Ubuntu für einige Jahre bis zum Ubuntu 15.04 gewechselt hat. Es ist eines der Backends für viele der in anderen Antworten erwähnten GUI-Tools.

Das Wechseln des Containers ohne erneutes Einfügen von Inhalten könnte nicht einfacher sein:

ffmpeg -i input.mkv -codec copy output.mp4
  • Es erkennt automatisch eine Konvertierung von Matroska in MP4-Container anhand der Eingabe- / Ausgabedateinamen.

  • -codec copyStream kopiert oder "re-muxt" die Streams von der Eingabe zur Ausgabe, ohne sie neu zu codieren. Stellen Sie es sich wie ein Kopieren und Einfügen vor.

  • Das Standardverhalten bei der Stream-Auswahl besteht darin, nur einen Stream pro Stream-Typ auszuwählen. Wenn Ihre Eingabe beispielsweise zwei Videostreams und einen Audiostream enthält, wird nur der Videostream mit der größten Bildgröße ausgewählt. Hinzufügen, -map 0wenn Sie alle Streams aus der Eingabe auswählen möchten.

  • Einige Container unterstützen möglicherweise einige Formate nicht. So überprüfen Sie, ob Ihr gewähltes Container - Format, sei es mkv, mp4oder sogar avihat Unterstützung für alle Inhalte in Dateien (Video, Audio, Untertitel, Daten, usw.). mp4Unterstützt beispielsweise keine SubRip-Untertitel ( .srtDateien).

MestreLion
quelle
6
Um das Audio zu AAC zu transkodieren und das Video als AVC zu avconv -i input.mkv -c:v copy -c:a libfaac output.mp4belassen : (Ich habe ffmpeg verwendet, ich gehe davon aus, dass avconv hier die gleichen Befehlszeilenargumente hat)
camh
@camh: Was Sie gesagt haben, funktioniert, aber beachten Sie bitte zwei Dinge: 1) Das Video bleibt unverändert, unabhängig davon, ob es sich um AVC oder etwas anderes handelt. 2) Es wird nicht nur Audio in AAC konvertiert, sondern auch das Container-Format von mkv in mp4
MestreLion
1
@AquariusPower: Beachten Sie nur, dass das OP die Streams nicht neu zuordnen möchte: Er möchte nur den Container konvertieren und alle Streams behalten.
MestreLion
2
@AquariusPower: hast du einfach versucht mit -map 0beiden audio streams zu bekommen? Wie ich in der Antwort sagte: "Standard-Stream-Auswahlverhalten ist, nur einen Stream pro Stream-Typ auszuwählen"
MestreLion
1
Verwenden Sie die -c:s mov_textOption, wenn Sie z. srtUntertitelspur.
Seppo Erviälä
25

Holen Sie sich die benötigte Software

sudo apt-get install gpac mkvtoolnix

Extrahieren Sie Video und Audio aus einer Matroska-Datei

Zuerst müssen Sie überprüfen, welche Spuren die Matroska-Datei enthält

mkvmerge --identify video.mkv

File 'video.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AC3)

Dann extrahieren Sie Video und Audio entsprechend ihrer Spuren mit:

mkvextract tracks video.mkv 1:video.h264 2:audio.ac3

Extracting track 1 with the CodecID 'V_MPEG4/ISO/AVC' to the file 'video.h264'. Container format: AVC/h.264 elementary stream
Extracting track 2 with the CodecID 'A_AC3' to the file 'audio.ac3'. Container format: Dolby Digital (AC3)
Progress: 100%

Mux Audio und Video in MP3-Container

MP4Box -fps 24 -add video.h264 -add audio.ac3 video.mp4

AVC-H264 import - frame size 1280 x 720 at 24.000 FPS
Import results: 31671 samples - Slices: 5672 I 125048 P 122648 B - 32288 SEI - 4936 IDR
AC3 import - sample rate 48000 - 6 channels
Saving to video.mp4: 0.500 secs Interleaving

Ich musste die -fps 24Option hinzufügen, da MP4BoxVideo-FPS nicht richtig erkannt wurden. Abhängig von der Verwendung AC3sollte der Audiotrack vor dem Muxen neu codiert werden.

Jetzt haben Sie Streams vom Matroska-Container in den MP4-Container verschoben, ohne an Qualität zu verlieren.

BEARBEITEN: MP4 unterstützt offiziell kein AC3-Audio, daher sollte die Audiospur in ein unterstütztes Format (z. B. AAC, MP3) konvertiert werden, wenn die Datei mit etwas anderem als VLC wiedergegeben werden soll.

Seppo Erviälä
quelle
1
Funktioniert das mit Untertitelspuren?
CyberSkull
11

Sie können Avidemux verwenden

Es hat eine gute GUI-Schnittstelle.

Bei der Konvertierung von mkv nach mp4 wird es nicht neu codiert.

Die Konvertierung erfolgt innerhalb einer Minute (für ein 60-minütiges Video).

  1. sudo apt-get install avidemux

  2. Öffnen Sie die mkv-Datei in Avidemux.

  3. Wählen Sie den abgesicherten Modus, wenn Sie dazu aufgefordert werden.

  4. Lass das Video als Kopie.

  5. Wählen Sie Datei-> Eigenschaften. Überprüfen Sie, ob der Audio-Codec ist aac.

    1. Wenn der Audio-Codec NICHT AAC ist, wählen Sie aac(faac).
    2. Ansonsten lass es wie copy. (Wenn Sie diese Option manchmal verwenden, ist der Ton möglicherweise nicht synchron oder verzerrt. Wählen Sie in diesem Fall aac(faac)stattdessen.)
  6. Wählen Sie mp4für das Format.

  7. Wählen Sie Speichern, Speicherort und geben Sie einen Dateinamen .mp4als Erweiterung ein.

Hinweis: Manchmal (mit einer Wahrscheinlichkeit von ca. 10%) kann dies fehlschlagen. Dann benutze handbrake(re-encode).

Hinweis 2: Es gibt zwei Links, die Ihnen helfen:

http://www.ubuntugeek.com/avidemux-free-video-editor-designed-for-simple-cutting-filtering-and-encoding-tasks.html

http://www.ubuntugeek.com/how-to-convert-mkv-file-into-mp4-file-using-avidemux.html

loksena
quelle
Lief wie am Schnürchen. Ich hatte Synchronisierungsprobleme nach der akzeptierten Antwort, aber nicht mit dieser.
Moränen
funktioniert sehr gut
psychok7
-2

Da MPEG Part 14 h.264 und AC3 nativ ohne Transcodierung unterstützt, können Sie die Datei einfach umbenennen, sodass sie eine .mp4Erweiterung anstelle einer .mkvErweiterung aufweist.

Richard
quelle
3
Es unterstützt möglicherweise die darin enthaltenen Codecs, aber das bedeutet nicht, dass es in einer Anwendung funktioniert, die Matroska nicht versteht. Dies würde nur funktionieren, wenn die Anwendung Matroska unterstützt und die magische Zahl anstelle der Erweiterung betrachtet.
Arda Xi
Durch das Umbenennen der Datei wird das Containerformat nicht konvertiert, und die Anwendung (und die Benutzer) können verwirrt werden. Wie @ArdaXi sagte, müsste die Anwendung Matroska weiterhin unterstützen, um sie abzuspielen.
MestreLion
-2

Sie können HANDBRAKE ausprobieren, indem Sie die PPA hinzufügen, indem Sie diesen Code in das Terminal eingeben:

sudo add-apt-repository ppa:stebbins/handbrake-releases
13east
quelle
Dies scheint ein Video-Transcoder zu sein. Ich möchte die Videospur nicht erneut komprimieren, da sie bereits im h.264-Format vorliegt.
Seppo Erviälä
1
Handbrake ist ein großartiger Transcoder, aber ich würde ihn niemals für die Dateiformatkonvertierung verwenden.
CyberSkull
1
Ich liebe Handbreak absolut, aber leider funktioniert es nur verlustfrei für Audio (und Untertitel). Ich konnte keine Möglichkeit finden, das Video zu kopieren, ohne es zu transkodieren, und das OP forderte speziell eine verlustfreie Formatkonvertierung an.
MestreLion