转码不是一种选择。
#1 楼
可能最简单的工具是ffmpeg
或avconv
软件包中的libav-tools
。 Libav是FFmpeg的分支,Ubuntu切换到FFmpeg几年了,直到Ubuntu 15.04为止。它是其他答案中提到的许多GUI工具的后端之一。更改容器而不重新编码内容再简单不过了:
ffmpeg -i input.mkv -codec copy output.mp4
它基于输入/输出文件名自动检测从Matroska到MP4容器的转换。
-codec copy
从输入到输出的流流复制或“重新混合”,而无需重新输入-编码。将其视为复制和粘贴。默认的流选择行为是每种流类型仅选择一个流。例如,如果您的输入有两个视频流和一个音频流,则仅会选择具有最大帧大小的视频流。如果要从输入中选择所有流,请添加
-map 0
。某些容器可能不支持某些格式。因此,请检查您选择的容器格式是否为
mkv
,mp4
甚至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)。
评论
这可以与字幕轨道一起使用吗?
–CyberSkull
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
手刹是一个很棒的代码转换器,但我绝不会将其用于文件格式转换。
–CyberSkull
2012年3月15日13:39
我绝对喜欢Handbreak,但不幸的是,它仅对音频(和字幕)无损起作用。我找不到一种无需转码就可以复制视频的方法,OP特别要求无损格式转换。
–MestreLion
2012年10月3日,22:10
评论
看到这个问题。这是一种特别解决方案,用于将无法在三星电视中播放的Matroska文件转换为与其兼容的文件
多年来,我发现这非常有用,因为Chromecast在MP4容器中支持带有AAC或MP3的H.264。如果您使用的是带有Google Cast扩展程序的Chrome,那么将视频从计算机流式传输到Chromecast非常容易。只需将具有正确流编码的MP4拖放到浏览器窗口并开始流式传输即可。