Bagaimana mengkonversi file .mkv menjadi file .mp4 tanpa kehilangan?

119

Saya perlu mengkonversi file video dari wadah Matroska ke wadah mp4. File Matroska berisi satu trek video h.264 dan satu trek suara AC3. Seharusnya memungkinkan untuk melakukan ini tanpa kehilangan, tetapi bagaimana melakukannya dengan alat asli Ubuntu?

Transcoding bukan opsi.

Seppo Erviälä
sumber
Lihat pertanyaan ini .
Binarylife
2
ini terutama solusi untuk mengonversi file Matroska yang tidak dapat diputar di TV Samsung, ke file yang kompatibel dengannya
knocte
Selama bertahun-tahun saya telah menemukan ini sangat berguna sebagai Chromecastdukungan H.264dengan AACatau MP3dalam sebuah MP4wadah. Sangat mudah untuk melakukan streaming video dari komputer Anda ke Chromecastjika Anda memiliki Chrome dengan ekstensi Google Cast. Seret dan letakkan a MP4dengan penyandian aliran yang benar ke jendela peramban dan mulai streaming.
Seppo Erviälä

Jawaban:

164

Mungkin alat termudah untuk itu ffmpeg, atau avconvdari libav-toolspaket. Libav adalah fork dari FFmpeg, yang Ubuntu alihkan untuk beberapa tahun hingga Ubuntu 15.04. Ini adalah salah satu backend untuk banyak alat GUI yang disebutkan dalam jawaban lain.

Mengubah wadah tanpa mengkode ulang konten tidak bisa lebih mudah:

ffmpeg -i input.mkv -codec copy output.mp4
  • Ini secara otomatis mendeteksi konversi wadah Matroska ke MP4 berdasarkan nama file input / output.

  • -codec copystream copy, atau "re-muxes", stream dari input ke output tanpa pengkodean ulang. Anggap saja seperti salin dan tempel.

  • Perilaku pemilihan aliran default adalah memilih hanya satu aliran per jenis aliran. Misalnya, jika input Anda memiliki dua aliran video dan satu aliran audio maka hanya aliran video dengan ukuran bingkai terbesar yang akan dipilih. Tambahkan -map 0jika Anda ingin memilih semua aliran dari input.

  • Beberapa wadah mungkin tidak mendukung beberapa format. Jadi periksa apakah format wadah yang Anda pilih , baik itu mkv, mp4atau bahkan avimemiliki dukungan untuk semua konten dalam file Anda (video, audio, subtitle, data, dll). Misalnya, mp4tidak mendukung subtitle SubRip ( .srtfile).

MestreLion
sumber
6
Untuk mentranskode audio ke AAC, meninggalkan video sebagai AVC: avconv -i input.mkv -c:v copy -c:a libfaac output.mp4(Saya menggunakan ffmpeg, saya menganggap avconv memiliki baris perintah yang sama di sini)
camh
@camh: Apa yang Anda katakan berfungsi, tetapi harap dicatat 2 hal: 1) Ini akan meninggalkan video apa adanya, terlepas apakah itu AVC atau yang lainnya; 2) Ini tidak hanya akan mengkonversi audio ke AAC tetapi juga format wadah dari mkv ke mp4
MestreLion
1
@AquariusPower: ketahuilah bahwa OP tidak ingin memetakan ulang stream: dia ingin mengonversi wadah saja dan menyimpan semua stream.
MestreLion
2
@AquariusPower: sudahkah Anda mencoba hanya dengan -map 0mendapatkan kedua aliran audio? Seperti yang saya katakan dalam jawaban: "Perilaku pemilihan aliran default adalah memilih hanya satu aliran per jenis aliran"
MestreLion
1
Gunakan -c:s mov_textopsi jika Anda perlu menyimpan mis. srtlagu terjemahan.
Seppo Erviälä
25

Dapatkan perangkat lunak yang dibutuhkan

sudo apt-get install gpac mkvtoolnix

Ekstrak video dan audio dari file matroska

Pertama, Anda perlu memeriksa trek apa yang berisi 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)

Kemudian ekstrak video dan audio sesuai trek mereka dengan:

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 dan video ke dalam formatter 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

Saya harus menambahkan -fps 24opsi karena MP4Boxtidak mendeteksi fps video dengan benar. Bergantung pada penggunaan, AC3trek audio harus disandikan ulang menjadi sesuatu yang lain sebelum muxing.

Sekarang Anda telah mengubah aliran dari wadah matroska ke wadah mp4 tanpa kehilangan kualitas apa pun.

EDIT: MP4 tidak secara resmi mendukung audio AC3 sehingga trek audio harus dikonversi ke format yang didukung (mis. AAC, MP3) jika Anda ingin file dapat diputar dengan sesuatu selain VLC.

Seppo Erviälä
sumber
1
Apakah ini akan berfungsi dengan trek subtitle?
CyberSkull
11

Anda dapat menggunakan Avidemux

Ini memiliki antarmuka GUI yang baik.

Ketika mengkonversi dari mkv ke mp4 itu tidak dikodekan ulang.

Konversi dilakukan dalam satu menit (untuk video 60 menit).

  1. sudo apt-get install avidemux

  2. Buka file mkv di avidemux.

  3. Pilih mode aman jika diminta.

  4. Tinggalkan video sebagai salinan.

  5. Pilih File-> Properties. Periksa apakah codec audio aac.

    1. Jika codec audio TIDAK aac, pilih aac(faac).
    2. Kalau tidak, biarkan saja copy. (Kadang-kadang menggunakan opsi ini audio mungkin tidak sinkron atau terdistorsi, dalam hal itu pilih aac(faac).)
  6. Pilih mp4untuk format.

  7. Pilih simpan, pilih lokasi dan ketikkan nama file dengan .mp4ekstensi.

Catatan: Terkadang (~ peluang 10%) mungkin gagal. Kemudian gunakan handbrake(re-encode).

Note2: ada dua tautan yang membantu Anda:

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

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

loksena
sumber
Bekerja seperti pesona. Saya memiliki masalah sinkronisasi mengikuti jawaban yang diterima, tetapi tidak dengan yang ini.
moraes
bekerja dengan sangat baik
psychok7
-2

Karena MPEG Bagian 14 mendukung h.264 dan AC3 secara asli tanpa transcoding, Anda dapat dengan mudah mengganti nama file sehingga memiliki .mp4ekstensi alih-alih .mkvekstensi.

Richard
sumber
3
Mungkin mendukung codec di dalamnya, tetapi itu tidak berarti itu akan berfungsi dalam aplikasi yang tidak mengerti Matroska. Ini hanya akan berfungsi jika aplikasi mendukung Matroska dan melihat angka ajaib alih-alih ekstensi.
Arda Xi
Mengganti nama file tidak akan mengonversi format wadah, dan mungkin membingungkan aplikasi (dan pengguna). Seperti yang dikatakan @ArdaXi, aplikasi masih perlu mendukung Matroska untuk memainkannya.
MestreLion
-2

Anda dapat mencoba HANDBRAKE dengan menambahkan PPA-nya dengan mengetikkan kode ini ke terminal:

sudo add-apt-repository ppa:stebbins/handbrake-releases
13east
sumber
Ini tampaknya menjadi transcoder video. Saya tidak ingin mengompres trek video lagi karena sudah dalam format h.264.
Seppo Erviälä
1
Handbrake adalah transcoder yang hebat, tetapi saya tidak akan pernah menggunakannya untuk konversi format file.
CyberSkull
1
Saya benar-benar menyukai Handbreak, tetapi sayangnya itu hanya bekerja tanpa henti untuk audio (dan terjemahan). Saya tidak dapat menemukan cara untuk menyalin video tanpa transcoding, dan OP secara khusus meminta konversi format lossless.
MestreLion