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

转码不是一种选择。

评论

看到这个问题。

这是一种特别解决方案,用于将无法在三星电视中播放的Matroska文件转换为与其兼容的文件

多年来,我发现这非常有用,因为Chromecast在MP4容器中支持带有AAC或MP3的H.264。如果您使用的是带有Google Cast扩展程序的Chrome,那么将视频从计算机流式传输到Chromecast非常容易。只需将具有正确流编码的MP4拖放到浏览器窗口并开始流式传输即可。

#1 楼

可能最简单的工具是ffmpegavconv软件包中的libav-tools。 Libav是FFmpeg的分支,Ubuntu切换到FFmpeg几年了,直到Ubuntu 15.04为止。它是其他答案中提到的许多GUI工具的后端之一。

更改容器而不重新编码内容再简单不过了:

ffmpeg -i input.mkv -codec copy output.mp4



它基于输入/输出文件名自动检测从Matroska到MP4容器的转换。
-codec copy从输入到输出的流流复制或“重新混合”,而无需重新输入-编码。将其视为复制和粘贴。
默认的流选择行为是每种流类型仅选择一个流。例如,如果您的输入有两个视频流和一个音频流,则仅会选择具有最大帧大小的视频流。如果要从输入中选择所有流,请添加-map 0
某些容器可能不支持某些格式。因此,请检查您选择的容器格式是否为mkvmp4甚至avi是否支持文件中的所有内容(视频,音频,字幕,数据等)。例如,mp4不支持SubRip字幕(.srt文件)。


评论


要将音频转码为AAC,将视频保留为AVC:avconv -i input.mkv -c:v复制-c:a libfaac output.mp4(我使用ffmpeg,我假设avconv在此处具有相同的命令行参数)

– camh
2012年10月23日在2:42



@AquariusPower:请注意,OP不想重新映射流:他只想转换容器并保留所有流。

–MestreLion
15年9月15日在20:58

@AquariusPower:您是否尝试过使用-map 0来获取两个音频流?正如我在回答中所说的:“默认的流选择行为是每种流类型仅选择一个流”

–MestreLion
2015年9月16日下午5:26

如果需要保留例如,使用-c:s mov_text选项。 srt字幕轨道。

– SeppoErviälä
17 Mar 16 '17 at 12:11



@camh:FFmpeg在2016年删除了libfaac支持,改为使用本机内置的FFmpeg AAC编码器。 “ ffmpeg -i input.mkv -c:v复制-c:a aac output.mp4”

– chiappa
20-3-24在23:22

#2 楼

获取所需的软件

sudo apt-get install gpac mkvtoolnix


从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无法正确检测视频fps。根据使用情况,-fps 24音轨在进行混音之前应重新编码为其他格式。 :
MP4正式不支持AC3音频,因此,如果您希望文件可以用VLC以外的其他格式播放,则应将音轨转换为受支持的格式(例如AAC,MP3)。

评论


这可以与字幕轨道一起使用吗?

–Cyber​​Skull
2012-03-15 13:47

我的情况:我有一个.webm音频,然后首先转换为mp4:在此处关注此问题askubuntu.com/questions/323944/convert-webm-to-other-formats

–吉米·奥拉诺(Jimmy Olano)
20 Mar 25 '20在11:45

ffmpeg做得很直。

–拉维·阿南德(Ravi Anand)
20-10-21在13:30

#3 楼

您可以使用Avidemux
,它具有良好的GUI界面。
从mkv转换为mp4时不会重新编码。
转换在一分钟内完成(对于60分钟的视频) 。


sudo apt-get install avidemux


在avidemux中打开mkv文件。


如果出现提示,请选择安全模式。 。


将视频保留为副本。


选择“文件”->“属性”。检查音频编解码器是否为aac

如果音频编解码器不是aac,请选择aac(faac)
否则,将其保留为copy。 (有时使用此选项,音频
可能不同步或失真,在这种情况下,请选择aac(faac)。)



选择mp4进行格式化。


选择保存,选择位置,然后键入扩展名为.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

评论


像魅力一样工作。在接受答案后,我出现了同步问题,但与此问题无关。

– Moraes
2012-10-28 13:29

效果很好

– psychok7
17年1月8日在17:09

#4 楼



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

#5 楼

我使用ffmpeg编写了一个python脚本,将烦恼的当前目录的所有mkv文件转换为mp4文件。
可以使用它。
将MKV转换为MP4

#6 楼

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

评论


它可能支持内部的编解码器,但这并不意味着它将在不了解Matroska的应用程序中运行。仅当应用程序支持Matroska并查看幻数而不是扩展名时,这才起作用。

– Arda Xi
2015年9月20日14:58在

重命名文件不会转换容器格式,并且可能会使应用程序(和用户)感到困惑。正如@ArdaXi所说,该应用程序仍需要支持Matroska才能播放。

–MestreLion
16-2-13在12:37

#7 楼

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

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


评论


这似乎是视频转码器。我不想再次压缩视频轨道,因为它已经是h.264格式。

– SeppoErviälä
2011年6月25日上午9:09

手刹是一个很棒的代码转换器,但我绝不会将其用于文件格式转换。

–Cyber​​Skull
2012年3月15日13:39

我绝对喜欢Handbreak,但不幸的是,它仅对音频(和字幕)无损起作用。我找不到一种无需转码就可以复制视频的方法,OP特别要求无损格式转换。

–MestreLion
2012年10月3日,22:10