我需要将视频文件从 Matroska 容器转换为 mp4 容器。Matroska 文件包含一个 h.264 视频轨道和一个 AC3 音轨。应该可以无损地完成此操作,但是如何使用原生 Ubuntu 工具来完成呢?
转码不是一种选项。
答案1
也许最简单的工具是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
文件)。
答案2
获取所需软件
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%
将音频和视频合并到 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 音频,因此如果您希望文件能够使用 VLC 以外的其他格式播放,则应将音轨转换为支持的格式(例如 AAC、MP3)。
答案3
您可以使用 Avidemux
它具有良好的 GUI 界面。
从 mkv 转换为 mp4 时不会重新编码。
转换在一分钟内完成(对于 60 分钟的视频)。
sudo apt-get install avidemux
在 avidemux 中打开 mkv 文件。
如果出现提示,请选择安全模式。
保留视频为副本。
选择文件->属性。检查音频编解码器是否为
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