压片学习笔记(一)-Linux下的音轨处理

[28/3/2010 Updated.]
据说经本人实际测试,使用neroAacEnc(下载地址移步这里)来压制音轨能取得最好的效果,而neroAacEnc只能接受WAV输入,因此有必要对音轨进行预处理.

首先,使用

mkvmerge -i target.mkv

来查看片源的音轨类型,并记下相应的编号(Track ID).

然后,接下来有两种不同的处理方法:

1, 使用ffmpeg直接释放wav并编码

#!编译安装ffmpeg的时候注意启用相应的解码器

ffmpeg -i <输入文件> -ac <声道数量> -map <轨道映射关系> <输出文件名>

解释一下:
1, 对于5.1声道DTS等源音轨,由于neroAacEnc的命令行选项里没有混合声道的选项, 只能在ffmpeg这一步就减少声道
2, -map <轨道映射关系>在源文件有多音轨时很有用, 比如使用 -map 0:1 等等, 可以分别提取出各音轨到wav. 单音轨输入文件可以去掉这一选项
3, 输出文件名 必须使用 .wav 结尾 否则输出格式可能不匹配

然后对解出来的wav文件进行编码:

neroAacEnc -if input.wav -of output.aac -q 0.25 -ignorelength

(如果想直接利用ffmpeg输出aac格式,可以用下面的语句:

ffmpeg -i <输入文件> -ac <声道数量> -ab <码率> -acodec aac -map <轨道映射关系> <输出文件名>

解释一下:
1, <码率>的单位是bit, 所以64K应输入64000
2, -ab <码率> 可以换成 -aq <质量>
3, 经本人实测, 在处理电影音轨的时候, 这个编码效果确实比neroAacEnc差不少…
)

2, 使用mkvextract释放相应的音轨再解码

从片源中释放出相应的音轨.

mkvextract tracks target.mkv --no-ogg [ID:track1.[ID:track2. ...]]

对解出来的音轨,不同格式分别采用以下不同的处理方式:

DTS => WAV => AAC: 
dcadec -o wav input.dts | neroAacEnc -if - -of output.aac -q 0.25 -ignorelength
AC3 => WAV => AAC: 
a52dec -o wav input.ac3 | neroAacEnc -if - -of output.aac -q 0.25 -ignorelength
FLAC => WAV => AAC: 
flac -d input.flac -c | neroAacEnc -if - -of output.aac -q 0.25 -ignorelength
AAC => WAV => AAC: 
faad -w input.aac | neroAacEnc -if - -of output.aac -q 0.25 -ignorelength

这样就得到我想要的 Q=0.25 的AAC音轨文件了:)

7 thoughts on “压片学习笔记(一)-Linux下的音轨处理”

  1. 事实证明来自AOSP的libfdk_aac比neroAac音质还好,甚至比QuickTime还好,亲耳听辨。

    ffmpeg -i input.mkv -map 0:a -c:a libfdk_aac -profile:v aac_he -b:a 48k output.m4a

    听一下吧,立体声(音乐/语音)压到 48k 没问题。

  2. 在 Twitter 上的 RT 出現在評論里了!!

    這個不錯哦,還可以在這裡直接回覆到 Twitter 上 🙂

    1. 直接回复不会出现在Twitter上,是我手动回复了2次,呵呵:)不过Twitter上的RT确实可以自动出现在这里:)

Leave a Reply

Your email address will not be published. Required fields are marked *

QR Code Business Card