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

Sep*_*älä 175 ffmpeg mp4 mkv video-conversion avidemux

我需要将 Matroska 容器中的视频文件转换为 mp4 容器。Matroska 文件包含一个 h.264 视频轨道和一个 AC3 音轨。应该可以无损地做到这一点,但是如何使用本机 Ubuntu 工具做到这一点?

转码不是一种选择。

Mes*_*ion 246

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

在不重新编码内容的情况下更改容器再简单不过了:

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

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

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

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

  • 要将音频转码为 AAC,将视频保留为 AVC:`avconv -i input.mkv -c:v copy -c:a libfaac output.mp4`(我使用 ffmpeg,我假设 avconv 在这里具有相同的命令行参数) (8认同)
  • @AquariusPower:您是否尝试过简单地使用`-map 0` 来获取两个音频流?正如我在回答中所说:*“默认流选择行为是每个流类型只选择一个流”* (2认同)
  • @camh:FFmpeg 在 2016 年移除了 libfaac 支持,而是使用原生的、内置的 FFmpeg AAC 编码器。“ffmpeg -i input.mkv -c:v copy -c:a aac output.mp4” (2认同)

Sep*_*älä 29

获取需要的软件

sudo apt-get install gpac mkvtoolnix
Run Code Online (Sandbox Code Playgroud)

从 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)
Run Code Online (Sandbox Code Playgroud)

然后根据音轨提取视频和音频:

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%
Run Code Online (Sandbox Code Playgroud)

将音频和视频复用到 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
Run Code Online (Sandbox Code Playgroud)

我不得不添加-fps 24选项,因为MP4Box没有正确检测视频 fps。根据使用情况,AC3音轨应在混合之前重新编码为其他内容。

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

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


小智 14

您可以使用 Avidemux

它具有良好的 GUI 界面。

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

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

  1. sudo apt-get install avidemux

  2. 在 avidemux 中打开 mkv 文件。

  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


mda*_*acu 5

在此处输入图片说明

您可以使用我的应用程序dmMediaConverter。只需将两个流的“复制”都选中(无转码)并将.mp4放在输出文件名中。就是这样。很简单。 http://dmsimpleapps.blogspot.ro/2014/04/dmmediaconverter.html