Як конвертувати .mkv файл у .mp4 файл без втрат?


119

Мені потрібно перетворити відеофайл з контейнера Matroska в контейнер mp4. Файл Matroska містить одну відеозапис h.264 та одну звукову доріжку AC3. Це має бути можливо зробити без втрат, але як це зробити за допомогою нативних інструментів Ubuntu?

Перекодування - це не варіант.


Дивіться це питання .
Binarylife

2
це особливо рішення для перетворення файлів Matroska, які не відтворюються на телевізорі Samsung, у файли, сумісні з ним,
knocte

Протягом багатьох років я вважаю це дуже корисним як Chromecastпідставки H.264з контейнером AACабо MP3в MP4ньому. Передавати відео з комп’ютера дуже просто, Chromecastякщо у вас є Chrome із розширенням Google. Просто перетягніть MP4правильне кодування потоку у вікно веб-переглядача та почніть потокове передавання.
Seppo Erviälä

Відповіді:


164

Мабуть, найпростіший інструмент для цього - ffmpegабо avconvз libav-toolsпакета. Libav - це роздріб FFmpeg, на який Ubuntu перейшов на кілька років до Ubuntu 15.04. Це один із основних факторів для багатьох інструментів GUI, згаданих в інших відповідях.

Зміна контейнера без повторного зміщення вмісту не може бути простішим:

ffmpeg -i input.mkv -codec copy output.mp4
  • Він автоматично визначає перетворення контейнера Matroska в MP4 на основі імен файлів вводу / виводу.

  • -codec copyпотокові копії або "повторні мукс" потоки від входу до виводу без повторного кодування. Подумайте про це як про копію та вставку.

  • Поведінка вибору потоку за замовчуванням полягає у виборі лише одного потоку на тип потоку. Наприклад, якщо у вашому вході є два відеопотоки та один аудіопотік, вибиратиметься лише відеопотік із найбільшим розміром кадру. Додати, -map 0якщо ви хочете вибрати всі вхідні потоки.

  • Деякі контейнери можуть не підтримувати деякі формати. Тому перевірте, чи вибраний вами формат контейнера , будь він mkv, mp4чи навіть aviпідтримується весь вміст у ваших файлах (відео, аудіо, субтитри, дані тощо). Наприклад, mp4не підтримує субтитри ( .srtфайли) SubRip .


6
Щоб перекодувати аудіо в AAC, залишивши відео як AVC: avconv -i input.mkv -c:v copy -c:a libfaac output.mp4(я використовував ffmpeg, я припускаю, що avconv має ті ж аргументи командного рядка)
camh

@camh: те, що ви сказали, працює, але зауважте 2 речі: 1) відео залишить таким, яким він є, незалежно від того, чи це AVC чи щось інше; 2) Він не тільки перетворить аудіо в AAC, але і формат контейнера з mkv в mp4
MestreLion

1
@AquariusPower: просто пам’ятайте, що ОП не хоче перенастроювати потоки: він хоче лише перетворити контейнер і зберегти всі потоки.
MestreLion

2
@AquariusPower: Ви просто намагалися -map 0отримати обидва аудіо потоки? Як я вже говорив у відповіді: "Поведінка вибору потоку за замовчуванням - це вибрати лише один потік на тип потоку"
MestreLion

1
Використовуйте -c:s mov_textваріант, якщо вам потрібно зберегти, наприклад. srtтрек субтитрів.
Seppo Erviälä

25

Отримайте необхідне програмне забезпечення

sudo apt-get install gpac mkvtoolnix

Витяг відео та аудіо з файлу matroska

Спершу вам потрібно перевірити, з якими треками міститься файл matroska

mkvmerge --identify video.mkv

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

Потім витягніть відео та аудіо відповідно до їх треків за допомогою:

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%

Мукс-аудіо та відео в 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

Мені довелося додати -fps 24варіант, оскільки MP4Boxнеправильно виявив кадр у кадрі відео. Залежно від використання AC3аудіозапис слід перекодувати в щось інше перед вимкненням музики.

Тепер ви перепрограмували потоки з контейнера matroska в контейнер mp4, не втрачаючи жодної якості.

EDIT: MP4 офіційно не підтримує звук AC3, тому аудіозапис слід перетворити на підтримуваний формат (наприклад, AAC, MP3), якщо ви бажаєте, щоб файл відтворювався чимось іншим, ніж VLC.


1
Чи буде це працювати з треками субтитрів?
CyberSkull

11

Можна використовувати Avidemux

Він має гарний інтерфейс GUI.

При перетворенні з mkv в mp4 він не кодується повторно.

Перетворення робиться протягом хвилини (для 60-хвилинного відео).

  1. sudo apt-get install avidemux

  2. Відкрийте файл mkv в avidemux.

  3. Виберіть безпечний режим, якщо буде запропоновано.

  4. Залиште відео як копію.

  5. Виберіть Файл-> Властивості. Перевірте, чи є аудіокодек aac.

    1. Якщо аудіокодек НЕ aac, виберіть aac(faac).
    2. В іншому випадку залиште це як copy. (Іноді за допомогою цієї опції звук може бути синхронізованим або спотвореним, у цьому випадку виберіть aac(faac)замість цього.)
  6. Виберіть mp4для формату.

  7. Виберіть "Зберегти", виберіть місце розташування та введіть ім'я файлу з .mp4розширенням.

Примітка: Іноді (~ 10% шансу) він може вийти з ладу. Потім використовуйте handbrake(re-encode).

Примітка2. Є два посилання, які допоможуть вам:

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


Працював як шарм. У мене виникли проблеми із синхронізацією після прийнятої відповіді, але не з цією.
морени

працює дуже добре
psychok7


-2

Оскільки MPEG Part 14 підтримує h.264 та AC3 спочатку без перекодування, ви можете просто перейменувати файл, щоб він мав .mp4розширення замість .mkvрозширення.


3
Він може підтримувати кодеки всередині, але це не означає, що він буде працювати в додатку, який не розуміє Matroska. Це спрацює лише в тому випадку, якщо програма підтримує Matroska і дивиться на чарівне число замість розширення.
Арда Сі

Перейменування файлу не перетворить формат контейнера і може заплутати додаток (та користувачів). Як сказав @ArdaXi, програмі все одно потрібно буде підтримувати Matroska, щоб відтворити його.
MestreLion

-2

Ви можете спробувати HANDBRAKE , додавши його PPA, ввівши цей код у термінал:

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

Здається, це транскодер відео. Я не хочу знову стискати відеодоріжку, оскільки вона вже є у форматі h.264.
Seppo Erviälä

1
Handbrake - чудовий транскодер, але я ніколи не використовував би його для перетворення формату файлів.
CyberSkull

1
Я абсолютно люблю Handbreak, але, на жаль, він працює без збитків для аудіо (і субтитрів). Я не зміг знайти спосіб копіювання відео, не перекодувавши його, і ОП спеціально вимагала перетворення формату без втрат.
MestreLion
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.