zoukankan      html  css  js  c++  java
  • MKV 高清视频文件分解与封装和音频编码的转换

    购买液晶电视之后,发现无法播放 DTS 音轨(就是图像很正常,可就是没有声音),提示无法识别的声音格式,查看说明书,不支持 DTS 音轨,上网搜索了一番才发现液晶电视几乎都不支持 DTS,太过分了!要知道网上下载的高清电音几乎都是DTS格式的啊,郁闷中。。。

    没办法,发现一篇文章提到可以使用工具解决,经过几番折腾后,终于成功搞定;

    这里需要使用两个工具 EAC3TO 和 MKVTOOLNIX ,可以自行下载,都是开源的免费软件

    首先使用命令查看文件的信息:

    F:\> mkvmerge -i avatar.mkv

    可以看到输出里面包含有视频、音频和字幕,并且是英文字幕,根据数据轨道信息,使用下面的命令将文件进行拆解
    F:\> mkvextract tracks avatar.mkv 1:video.x264 2:audio.dts 3:subtitles.srt

    该命令将 mkv 文件中的不同数据轨道拆解到不同的文件中,如果只是想要音频信息,可以使用下面的命令:

    F:\> mkvextract tracks avatar.mkv 2:audio.dts

    下一步,可以看一下音轨的信息
    F:\> eac3to audio.dts

    好,下面是将 DTS 格式的转换为 AC3 格式
    F:\> eac3to audio.dts audio.ac3

    然后查看一下 AC3 格式声音的参数,会发现声道和采样频率没有变化,但是 bps 变小了,所以文件也变小了,大约是原来的一半
    F:\> eac3to audio.ac3

    最后使用工具将视频、转换后音频合并为 MKV ,当然也可以将字幕文件替换为中文的,这里需要注意字幕文件的格式,UTF8+格式的最好;

    F:\> mkvmerge -o output.mkv video.x264 audio.ac3 subtitles.srt

    另外液晶电视一般不支持内置的 srt 格式的字幕,所以可以将字幕文件单独存放为一个和高清MKV同名的文件,因此可以不必将字幕文件内置到MKV文件中;
    最后发现播放时开始的声音是对的,但是越往后,越不对头,声音明显的滞后,难道是什么参数设置的有问题,使用界面程序MMG ,添加 video.x264时提示,说无法确定视频的FPS,如果不设置,就是用默认的 25FPS,天啊,原来如此,24FPS的视频使用 25FPS 播放,当然视频就播放的比较快了,24分钟就播放完了之前25分钟的影片,声音自然就原来越滞后了,嗯 设置--default-duration 0:24000/1001fps 就OK 了,完整的命令行如下:

    F:\> mkvmerge -o output.mkv --default-duration 0:24000/1001fps video.x264 audio.ac3 subtitles.srt

    附加说明,这一步还是使用 MMG 来的方便啊,否则命令后打起来挺容易出错的;

    但是该文件放到 USB 中使用电视播放居然说文件格式错误,为什么?电脑播放很正常的啊!

    难道是原来 MKV 中的其他信息被搞丢了?嗯,很有可能,这次尝试直接替换原来文件中的音轨,其他都不变,命令行如下:

    F:\> mkvmerge -o output.mkv -A -S avatar.mkv audio.ac3

    该命令是将原来的 MKV 中的 Audio 和 Subtitles 去除,然后附加上 audio.ac3 作为音轨,最后将输出文件和字幕一起放到电视上播放,OK ,终于全部通过了;

    为了方便以后使用,特作 BAT 方便自动化处理,如下所示:

    @ ECHO Extract DTS Audio From %1 File
    @ MKVExtract tracks
    %1 2:input.dts

    @
    ECHO cut audio delay info
    @ DelayCut -out Audio
    .dts input.dts

    @
    ECHO Convert DTS Audio To AC3 Audio
    @ eac3to Audio
    .dts Audio.ac3 -640

    @
    ECHO Replace DTS Audio With AC3 Audio
    @ MKVMerge -o
    %2 -A -S %1 Audio.ac3

    @
    ECHO Delete All Temporary Files
    @
    DEL Audio.ac3 Audio.dts input.dts

    @
    PAUSE

    该批处理两个参数,第一个参数是 输入文件,第二个是输出文件,命令行如下(批处理文件名称为 DTS2AC3.bat)

    DTS2AC3 D:\Movies\Avatar.1080.DTS.mkv Avatar.1080.AC3.mkv

    需要注意的是,中间文件存放在当前目录,输出文件如果没有路径,那么也存放在当前目录中。

    同时需要注意:保证磁盘空间够用啊,否则到了中间报磁盘工具不足就只能清理磁盘后重来了;

  • 相关阅读:
    Spring之调度器(Scheduler)
    Spring之拦截器(Interceptor)
    ThreadLocal相关
    hibernate操作数据库
    文件操作的工具类
    日期操作工具类
    有关mysql的utf8和utf8mb4,以及Illegal mix of collations for operation 'like'
    [原]nginx 一下快一下慢的问题
    再谈微信公众号网页授权的40163错误
    用DBCC CHECK修复SQL2000的数据库一致性问题
  • 原文地址:https://www.cnblogs.com/WonKerr/p/MKV_HD_EXTRACT_MERGE.html
Copyright © 2011-2022 走看看