Как преобразовать файл.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 расширение.
