当前位置: 首页>>技术问答>>正文


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

, , , , ,

问题描述

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

代码转换不是一种选择。

最佳解决思路

也许最简单的工具是ffmpeg,或libav-tools包中的avconv。 Libav是FFmpeg的一个分支,Ubuntu转而使用Ubuntu 15.04。它是其他答案中提到的许多GUI工具的后端之一。

更换无re-enconding内容的容器不能更简单:

ffmpeg -i input.mkv -codec copy output.mp4
  • 它auto-detects Matroska到基于输入/输出文件名的MP4容器转换。

  • -codec copy流复制或”re-muxes”,从输入流到没有re-encoding的输出。把它想象为复制和粘贴。

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

  • 有些容器可能不支持某些格式。因此,请检查您选择的容器格式,无论是mkvmp4还是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音轨应在MUX之前将re-encoded转换为其他内容。

现在你有从matroska容器到mp4容器的remuxed流而不会丢失任何质量。

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

第三种解决思路

您可以使用Avidemux

它有很好的GUI界面。

从mkv转换到mp4时,它不是re-encoded。

转换是在一分钟内完成的(对于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

第四种思路

ffmpeg,video-conversion,mp4,mkv,avidemux,ubuntu

您可以使用我的应用程序dmMediaConverter。检查两个流的”copy”(不转码),并将.mp4添加到输出文件名。而已。很简单。 http://dmsimpleapps.blogspot.ro/2014/04/dmmediaconverter.html

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/608.html,未经允许,请勿转载。