如何将.mkv文件无损转换为.mp4文件?

我需要将Matroska容器中的video文件转换为mp4容器。 Matroska文件包含一个h.264video轨道和一个AC3声道。 应该可以无损地执行此操作,但如何使用本机Ubuntu工具执行此操作?

转码不是一种选择。

也许最简单的工具是ffmpeg ,或来自libav-tools包的libav-tools 。 Libav是FFmpeg的一个分支,Ubuntu在Ubuntu 15.04之前切换了几年。 它是其他答案中提到的许多GUI工具的后端之一。

更改容器而不重新包含内容不是更简单:

 ffmpeg -i input.mkv -codec copy output.mp4 
  • 它根据输入/输出文件名自动检测Matroska到MP4容器的转换。

  • -codec copy流复制或“重复复用”,从输入到输出的流而不重新编码。 把它想象成复制和粘贴。

  • 默认流选择行为是每种流类型仅选择一个流。 例如,如果您的输入有两个video流和一个音频流,则只会选择帧大小最大的video流。 如果要从输入中选择所有流,请添加-map 0

  • 某些容器可能不支持某些格式。 因此,请检查您选择的容器格式,无论是mkvmp4还是avi都支持文件中的所有内容 (video,音频,字幕,数据等)。 例如, mp4不支持SubRip字幕( .srt文件)。

获得所需的软件

 sudo apt-get install gpac mkvtoolnix 

从matroska文件中提取video和音频

首先,您需要检查matroska文件包含的跟踪内容

mkvmerge --identify video.mkv

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

然后根据他们的曲目提取video和音频:

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音频和video转换成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没有正确检测videofps。 根据使用情况, AC3音频轨道应在多路复用之前重新编码为其他内容。

现在,您已经将matroska容器中的流重新混合到mp4容器中,而不会丢失任何质量。

编辑:MP4不正式支持AC3音频,因此如果您希望文件可以使用除VLC以外的其他内容,则应将音轨转换为支持的格式(例如AAC,MP3)。

您可以使用Avidemux

它具有良好的GUI界面。

从mkv转换为mp4时,不会重新编码。

转换在一分钟内完成(对于60分钟的video)。

  1. sudo apt-get install avidemux

  2. 在avidemux中打开mkv文件。

  3. 出现提示时选择安全模式。

  4. 将video保留为副本。

  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

在此处输入图像描述

您可以使用我的应用程序dmMediaConverter 。 只需为两个流选中“ 复制 ”(不进行转码),然后将.mp4放入输出文件名。 而已。 非常简单。 http://dmsimpleapps.blogspot.ro/2014/04/dmmediaconverter.html

由于MPEG Part 14原生支持h.264和AC3而不进行转码,因此您可以简单地重命名该文件,使其具有.mp4扩展名而不是.mkv扩展名。

您可以通过在终端中键入以下代码来添加PPA来尝试HANDBRAKE :

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