Как преобразовать файл.mkv в файл.mp4 без потерь?
Мне нужно конвертировать видеофайл из контейнера Matroska в контейнер mp4. Файл Matroska содержит одну видеодорожку h.264 и одну звуковую дорожку AC3. Это должно быть возможно сделать без потерь, но как это сделать с помощью встроенных инструментов Ubuntu?
Транскодирование не вариант.
6 ответов
Возможно, самый простой инструмент для этого 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
не поддерживает SubRip субтитры (.srt
файлы).
Получить необходимое программное обеспечение
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%
Mux аудио и видео в 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
не распознал видео fps правильно. В зависимости от использования AC3
аудиодорожка должна быть перекодирована во что-то еще перед муксингом.
Теперь вы перепутали потоки из контейнера matroska в контейнер mp4 без потери качества.
РЕДАКТИРОВАТЬ: MP4 официально не поддерживает аудио AC3, поэтому аудиодорожка должна быть преобразована в поддерживаемый формат (например, AAC, MP3), если вы хотите, чтобы файл мог воспроизводиться с чем-то еще, кроме VLC.
Вы можете использовать Avidemux
Имеет хороший графический интерфейс.
При преобразовании из mkv в mp4 он не перекодируется.
Преобразование выполняется в течение минуты (для 60-минутного видео).
sudo apt-get install avidemux
Откройте файл mkv в avidemux.
Выберите безопасный режим, если будет предложено.
Оставьте видео как копию.
Выберите Файл-> Свойства. Проверьте, если аудио кодек
aac
,- Если аудиокодек НЕ является aac, выберите
aac(faac)
, - В противном случае оставьте это как
copy
, (Иногда при использовании этой опции звук может быть не синхронизирован или искажен, в этом случае выберитеaac(faac)
вместо.)
- Если аудиокодек НЕ является aac, выберите
Выбрать
mp4
для формата.Выберите сохранить, выберите местоположение и введите имя файла с
.mp4
как расширение.
Примечание: иногда (вероятность ~10%) может произойти сбой. Тогда используйте handbrake(re-encode)
,
Примечание 2: есть две ссылки, которые помогут вам:
http://www.ubuntugeek.com/how-to-convert-mkv-file-into-mp4-file-using-avidemux.html
Вы можете использовать мое приложение, dmMediaConverter. Просто оставьте " copy " для обоих потоков отмеченными (без перекодирования) и поместите .mp4 в имя выходного файла. Вот и все. Очень просто. http://dmsimpleapps.blogspot.ro/2014/04/dmmediaconverter.html
Используя ffmpeg, я пишу скрипт python, который преобразует все файлы mkv текущего каталога в файлы mp4, поскольку преобразование их по одному раздражает.
При необходимости можно использовать.
Вы можете попробовать HANDBRAKE, добавив его PPA, введя этот код в терминал:
sudo add-apt-repository ppa:stebbins/handbrake-releases
Поскольку MPEG Part 14 изначально поддерживает h.264 и AC3 без транскодирования, вы можете просто переименовать файл, чтобы он имел .mp4
расширение вместо .mkv
расширение.