Comment convertir un fichier .mkv en un fichier .mp4 sans perte?

119

J'ai besoin de convertir un fichier vidéo de Matroska conteneur en conteneur MP4. Le fichier Matroska contient une piste vidéo h.264 et une piste sonore AC3. Cela devrait être possible de le faire sans perte, mais comment le faire avec les outils natifs Ubuntu?

Le transcodage n'est pas une option.

Seppo Erviälä
la source
Voir cette question .
Binarylife
2
Il s'agit en particulier d'une solution permettant de convertir les fichiers Matroska qui ne seront pas lus sur un téléviseur Samsung en fichiers compatibles
knocte
Au fil des ans, j'ai trouvé cela très utile comme Chromecastsupport H.264avec AACou MP3dans un MP4conteneur. Il est très facile de diffuser des vidéos à partir de votre ordinateur Chromecastsi vous avez Chrome avec l’extension Google Cast. Il suffit de glisser-déposer un MP4encodage de flux correct dans la fenêtre du navigateur et de lancer le streaming.
Seppo Erviälä

Réponses:

164

Peut-être le moyen le plus simple pour cela est ffmpeg, ou avconvdu libav-toolspaquet. Libav est un fork de FFmpeg, sur lequel Ubuntu est passé pendant quelques années jusqu’à Ubuntu 15.04. C'est l'un des moteurs de la plupart des outils d'interface graphique mentionnés dans d'autres réponses.

Changer de conteneur sans renfermer le contenu ne pourrait être plus simple:

ffmpeg -i input.mkv -codec copy output.mp4
  • Il détecte automatiquement une conversion de conteneur Matroska vers MP4 en fonction des noms de fichiers d'entrée / de sortie.

  • -codec copyles copies de flux, ou "re-muxes", les flux de l’entrée à la sortie sans réencodage. Pensez-y comme un copier-coller.

  • Le comportement de sélection de flux par défaut consiste à sélectionner un seul flux par type de flux. Par exemple, si votre entrée comporte deux flux vidéo et un flux audio, seul le flux vidéo présentant la plus grande taille d'image sera sélectionné. Ajoutez -map 0si vous voulez sélectionner tous les flux de l'entrée.

  • Certains conteneurs peuvent ne pas prendre en charge certains formats. Vérifiez donc si le format de conteneur que vous avez choisi , qu’il soit mkv, mp4ou même aviprend en charge tout le contenu de vos fichiers (vidéo, audio, sous-titres, données, etc.). Par exemple, mp4ne prend pas en charge les sous-titres SubRip ( .srtfichiers).

MestreLion
la source
6
Pour transcoder l'audio au format AAC, en laissant la vidéo au format AVC: avconv -i input.mkv -c:v copy -c:a libfaac output.mp4(j'ai utilisé ffmpeg, je suppose que avconv a les mêmes arguments de ligne de commande ici)
camh
@camh: Ce que vous avez dit fonctionne, mais veuillez noter 2 choses: 1) La vidéo restera telle quelle, peu importe si c'est AVC ou autre chose; 2) Il convertira non seulement l’audio au format AAC, mais également le format de conteneur de mkv à mp4
MestreLion
1
@AquariusPower: sachez que l'OP ne veut pas remapper les flux: il souhaite convertir le conteneur uniquement et conserver tous les flux.
MestreLion
2
@AquariusPower: avez-vous simplement essayé -map 0d'obtenir les deux flux audio? Comme je l'ai dit dans la réponse: "Le comportement par défaut de sélection de flux consiste à ne sélectionner qu'un seul flux par type de flux"
MestreLion
1
Utilisez l' -c:s mov_textoption si vous devez conserver, par exemple. srtpiste de sous-titres.
Seppo Erviälä
25

Obtenir le logiciel nécessaire

sudo apt-get install gpac mkvtoolnix

Extraire la vidéo et l'audio du fichier matroska

Vous devez d’abord vérifier les pistes que contient le fichier matroska avec

mkvmerge --identify video.mkv

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

Extrayez ensuite la vidéo et l'audio en fonction de leurs pistes avec:

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%

Audio et vidéo Mux dans le conteneur MP4

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

J'ai dû ajouter une -fps 24option car je MP4Boxne détectais pas correctement les images par seconde. En fonction de l'utilisation, AC3la piste audio doit être ré-encodée dans quelque chose d'autre avant le multiplexage.

Maintenant, vous avez remodelé les flux du conteneur matroska dans le conteneur mp4 sans perte de qualité.

EDIT: MP4 ne prenant pas officiellement en charge l’audio AC3, la piste audio doit donc être convertie dans un format pris en charge (par exemple, AAC, MP3) si vous voulez que le fichier puisse être lu avec autre chose que VLC.

Seppo Erviälä
la source
1
Cela fonctionnera-t-il avec les pistes de sous-titres?
CyberSkull
11

Vous pouvez utiliser Avidemux

Il a une bonne interface graphique.

Lors de la conversion de mkv en mp4, il n'est pas ré-encodé.

La conversion se fait en une minute (pour une vidéo de 60 minutes).

  1. sudo apt-get install avidemux

  2. Ouvrez le fichier mkv dans avidemux.

  3. Sélectionnez le mode sans échec si vous y êtes invité.

  4. Laissez la vidéo en copie.

  5. Choisissez Fichier-> Propriétés. Vérifiez si le codec audio est aac.

    1. Si le codec audio n’est PAS AAC, sélectionnez aac(faac).
    2. Sinon, laissez-le comme copy. (Parfois, en utilisant cette option, l'audio peut être désynchronisé ou déformé, dans ce cas, sélectionnez à la aac(faac)place.)
  6. Sélectionnez mp4pour le format.

  7. Sélectionnez Enregistrer, choisissez l'emplacement et tapez un nom de fichier avec .mp4comme extension.

Remarque: Parfois (environ 10% de chance), il peut échouer. Alors utilisez handbrake(re-encode).

Note2: il y a deux liens qui vous aident:

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
la source
Travaillé comme un charme. J'ai eu des problèmes de synchronisation suite à la réponse acceptée, mais pas avec celle-ci.
Moraes
fonctionne très bien
psychok7
-2

Étant donné que MPEG Part 14 prend en charge nativement h.264 et AC3 sans transcodage, vous pouvez simplement renommer le fichier afin qu’il ait une .mp4extension au lieu d’une .mkvextension.

Richard
la source
3
Cela pourrait prendre en charge les codecs internes, mais cela ne signifie pas que cela fonctionnera dans une application qui ne comprend pas Matroska. Cela ne fonctionnerait que si l'application prend en charge Matroska et regarde le nombre magique à la place de l'extension.
Arda Xi
Renommer le fichier ne convertira pas le format de conteneur et cela pourrait confondre l'application (et les utilisateurs). Comme @ArdaXi l'a dit, l'application aurait toujours besoin de supporter Matroska pour pouvoir y jouer.
MestreLion
-2

Vous pouvez essayer HANDBRAKE en ajoutant son PPA en tapant ce code dans le terminal:

sudo add-apt-repository ppa:stebbins/handbrake-releases
13ème
la source
Cela semble être un transcodeur vidéo. Je ne veux pas compresser à nouveau la piste vidéo car elle est déjà au format h.264.
Seppo Erviälä
1
Handbrake est un excellent transcodeur, mais je ne l'utiliserais jamais pour la conversion de format de fichier.
CyberSkull
1
J'adore absolument Handbreak, mais malheureusement, cela ne fonctionne sans perte que pour l'audio (et les sous-titres). Je ne pouvais pas trouver un moyen de copier la vidéo sans la transcoder, et l'OP a spécifiquement demandé la conversion de format sans perte.
MestreLion