FFmpeg转换MKV为MP4后仅VLC/Chrome可播放,Windows自带播放器无法播放的问题求助
FFmpeg转换MKV为MP4后仅VLC/Chrome可播放,Windows自带播放器无法播放的问题求助
从你提供的信息来看,问题出在音频编码的兼容性上,咱们先拆解根源再给你解决办法:
先对比原MKV和转换后MP4的媒体信息:
- 原MKV的音频是EAC3(Dolby Digital Plus + Dolby Atmos),Windows自带的Movies & TV和WMP对这种编码在MKV容器里是支持的;
- 但你用默认FFmpeg命令转换时,FFmpeg自动把EAC3转成了6声道的AAC LC——而Windows自带播放器对MP4容器里的多声道AAC兼容性很差,这就是只有VLC/Chrome能正常播放的原因(它们的解码器生态更开放)。
方案1:直接复制流(最快最稳妥)
既然原视频是H.264(MP4容器原生支持),原音频EAC3也可以放进MP4容器里,完全不需要重新编码,转换速度几乎是秒级,还能完美保留原画质音质,命令如下:
ffmpeg -i <path_and_name_of_file>.mkv -c:v copy -c:a copy <path_and_name_of_file>.mp4
命令里的-c:v copy和-c:a copy表示直接复制视频、音频流,不做编码转换,转出来的MP4文件Windows自带播放器肯定能正常播放,体验和原MKV一致。
方案2:转成Windows兼容的音频编码(如果必须转码)
如果你因为某些原因需要转换音频编码(比如要减小文件体积),可以把音频转成Windows自带播放器支持的AC3编码,命令如下:
ffmpeg -i <path_and_name_of_file>.mkv -c:v copy -c:a ac3 -b:a 640k <path_and_name_of_file>.mp4
这里-c:a ac3指定音频转成AC3,-b:a 640k设置音频比特率(和原EAC3的768k接近,音质损失很小),视频还是直接复制,转出来的文件也能被Windows播放器正常识别。
你之前用的默认命令没有指定编码参数,FFmpeg会用默认规则转码,刚好踩中了Windows播放器的兼容性坑。以后如果只是换容器不转码,记得用-c copy参数,既省时间又没兼容性问题~
备注:内容来源于stack exchange,提问作者Alfrodo8
相关产品推荐
相关产品推荐

