Come convertire file .mkv in file .mp4 senza perdita di dati?


119

Devo convertire un file video dal contenitore Matroska in un contenitore mp4. Il file Matroska contiene una traccia video h.264 e una traccia audio AC3. Dovrebbe essere possibile farlo senza perdite, ma come farlo con gli strumenti nativi di Ubuntu?

La transcodifica non è un'opzione.


Vedere questo domanda .
Vita binaria

2
questa è soprattutto una soluzione per convertire i file Matroska che non verranno riprodotti in una TV Samsung, in file compatibili con esso
knocte,

Nel corso degli anni l'ho trovato molto utile come Chromecastsupporto H.264con AACo MP3in un MP4contenitore. È molto facile trasmettere video in streaming dal tuo computer Chromecastse hai Chrome con l'estensione Google Cast. Basta trascinare e rilasciare un MP4con le codifiche di flusso corrette in una finestra del browser e avviare lo streaming.
Seppo Erviälä,

Risposte:


164

Forse lo strumento più semplice è quello ffmpeg, o avconvdal libav-toolspacchetto. Libav è un fork di FFmpeg, a cui Ubuntu è passato per alcuni anni fino a Ubuntu 15.04. È uno dei backend per molti degli strumenti della GUI citati in altre risposte.

Cambiare contenitore senza ricodificare il contenuto non potrebbe essere più semplice:

ffmpeg -i input.mkv -codec copy output.mp4
  • Rileva automaticamente una conversione del contenitore Matroska in MP4 in base ai nomi dei file di input / output.

  • -codec copystream copia, o "ri-mux", i flussi dall'input all'output senza ricodifica. Pensalo come una copia e incolla.

  • Il comportamento di selezione del flusso predefinito consiste nel selezionare un solo flusso per tipo di flusso. Ad esempio, se l'input ha due flussi video e un flusso audio, verrà selezionato solo il flusso video con la dimensione del fotogramma più grande. Aggiungi -map 0se desideri selezionare tutti i flussi dall'input.

  • Alcuni contenitori potrebbero non supportare alcuni formati. Quindi controlla se il formato contenitore scelto , che sia mkv, mp4o aviabbia persino il supporto per tutto il contenuto dei tuoi file (video, audio, sottotitoli, dati, ecc.). Ad esempio, mp4non supporta i sottotitoli SubRip ( .srtfile).


6
Per transcodificare l'audio in AAC, lasciando il video come AVC: avconv -i input.mkv -c:v copy -c:a libfaac output.mp4(Ho usato ffmpeg, suppongo che avconv abbia la stessa riga di comando che argomenta qui)
camh,

@camh: Quello che hai detto funziona, ma per favore nota 2 cose: 1) Lascerà il video così com'è, indipendentemente dal fatto che sia AVC o qualcos'altro; 2) Non solo convertirà l'audio in AAC ma anche il formato del contenitore da mkv a mp4
MestreLion

1
@AquariusPower: basta essere consapevoli del fatto che l'OP non vuole rimappare i flussi: vuole convertire solo il contenitore e mantenere tutti i flussi.
MestreLion,

2
@AquariusPower: hai provato semplicemente -map 0a ottenere entrambi i flussi audio? Come ho detto nella risposta: "Il comportamento di selezione del flusso predefinito è selezionare un solo flusso per tipo di flusso"
MestreLion

1
Utilizzare l' -c:s mov_textopzione se è necessario conservare ad es. srttraccia sottotitoli.
Seppo Erviälä,

25

Ottieni il software necessario

sudo apt-get install gpac mkvtoolnix

Estrai video e audio dal file matroska

Per prima cosa devi controllare con quali tracce contiene il file matroska

mkvmerge --identify video.mkv

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

Quindi estrai video e audio in base alle loro tracce con:

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 e video nel contenitore 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

Ho dovuto aggiungere -fps 24un'opzione perché MP4Boxnon ho rilevato correttamente i video fps. A seconda dell'uso, AC3la traccia audio deve essere ricodificata in qualcos'altro prima di eseguire il mix.

Ora hai ricalcolato i flussi dal contenitore matroska al contenitore mp4 senza perdere alcuna qualità.

EDIT: MP4 non supporta ufficialmente l'audio AC3, quindi la traccia audio deve essere convertita in un formato supportato (es. AAC, MP3) se vuoi che il file sia riproducibile con qualcosa di diverso da VLC.


1
Funzionerà con le tracce dei sottotitoli?
CyberSkull,

11

Puoi usare Avidemux

Ha una buona interfaccia GUI.

Durante la conversione da mkv a mp4 non viene ricodificato.

La conversione avviene entro un minuto (per un video di 60 minuti).

  1. sudo apt-get install avidemux

  2. Apri il file mkv in avidemux.

  3. Selezionare la modalità provvisoria se richiesto.

  4. Lascia il video come copia.

  5. Scegli File-> Proprietà. Controlla se il codec audio è aac.

    1. Se il codec audio NON è aac, selezionare aac(faac).
    2. Altrimenti, lascialo come copy. (A volte usando questa opzione l'audio potrebbe non essere sincronizzato o distorto, in tal caso selezionare aac(faac)invece.)
  6. Seleziona mp4per formato.

  7. Seleziona Salva, scegli la posizione e digita un nome file con .mp4come estensione.

Nota: a volte (~ 10% di probabilità) potrebbe non riuscire. Quindi utilizzare handbrake(re-encode).

Nota2: ci sono due collegamenti che ti aiutano:

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


Ha funzionato come un fascino. Ho avuto problemi di sincronizzazione dopo la risposta accettata, ma non con questa.
Moraes,

funziona molto bene
psychok7


-2

Poiché MPEG Part 14 supporta nativamente h.264 e AC3 senza transcodifica, è possibile semplicemente rinominare il file in modo che abbia .mp4un'estensione anziché .mkvun'estensione.


3
Potrebbe supportare i codec all'interno, ma ciò non significa che funzionerà in un'applicazione che non comprende Matroska. Funzionerebbe solo se l'applicazione supporta Matroska e osserva il numero magico anziché l'estensione.
Arda Xi,

La ridenominazione del file non converte il formato del contenitore e potrebbe confondere l'applicazione (e gli utenti). Come diceva @ArdaXi, l'applicazione avrebbe comunque bisogno di supportare Matroska per giocare.
MestreLion,

-2

Puoi provare HANDBRAKE aggiungendo il suo PPA digitando questo codice nel terminale:

sudo add-apt-repository ppa:stebbins/handbrake-releases

Questo sembra essere un transcodificatore video. Non voglio comprimere di nuovo la traccia video poiché è già in formato h.264.
Seppo Erviälä,

1
Il freno a mano è un ottimo transcodificatore, ma non lo userei mai per la conversione del formato di file.
CyberSkull

1
Adoro Handbreak, ma purtroppo funziona solo senza perdita di audio (e sottotitoli). Non sono riuscito a trovare un modo per copiare il video senza transcodificarlo e l'OP ha richiesto specificamente la conversione del formato lossless.
MestreLion,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.