标题: MP4和MKV的区别
时间: 2022-05-03发布,2022-05-03修改
『回复列表(27|隐藏机器人聊天)』
@胡椒舰长,h.265是视频数据的格式,视频数据要和音频数据交织在一起,保存在一个文件里,才能拿来发给别人。单独的视频和音频裸数据流确实也可以逐字节保存成文件,但是视频和音频就只能分开保存了,用起来不方便。所以网上流传的一般都是封装好的视频文件。
mp4(实际名称是“ISO Base Media File Format”,ISO基础媒体文件格式,ISO 14496-12)就是这样一种可以封装视频和音频流的文件格式。
mkv(Matroska)是另一种封装文件格式。
两者都可以封装h.265,并且可以是完全相同的h.265流。用ffmpeg命令的-codec copy
指令就能实现转封装:
ffmpeg -i my.mp4 -codec copy my.mkv
ffmpeg -i my.mkv -codec copy my2.mp4
但是,如果某个程序不支持某种封装格式,就没办法把视频和音频流从封装中提取出来,就算里面封装的是它支持的H.264,它也无法播放。
Mozilla 维护了一个详尽的音视频编解码器和容器文件格式文档:
https://developer.mozilla.org/zh-CN/docs/Web/Media/Formats/Video_codecs
同一个视频文件
content-type: video/x-matroska,不能播放
content-type: video/webm,可以播放
有什么区别?
webm一定是mkv,mkv不一定是webm,使用了没有包含进webm标准里的功能和视频音频编码,就不是webm。
所以,浏览器应该能够播放使用H.264/VP8/VP9/AV1视频编码、WAV/MP3/AAC/Ogg Vorbis音频编码的MKV,只要假装它是webm即可。
但是,这种假装必须在服务器端完成,因为要设置MIME类型为video/webm
。
鉴于阿里云OSS根据文件扩展名自动选择MIME类型,所以最简单的兼容方案是上传时在原始文件名后面附加扩展名.webm。