AVS加载MTS高清视频的正确方法,防止花屏
来源:蓝色琴键的八度空间松下LX5数码相机的720P高清摄像是以AVCHD Lite编码的MTS格式文件,码率高达15Mbps,随着拍高清短片逐渐增多,这些高清MTS视频文件越来越占硬盘,不得不需要压片,最简单的方法是把它扔到MediaCoder,再选X264编码器压至平均3500~6000Kbps。有时候我喜欢用AVS脚本对高清视频做一些简单的加工,如调节色彩,添加ASS格式字幕,淡入淡出等,然后在命令行运行X264裸压。以前用AVS加载视频都是惯用DirectShowSource语句,如:DirectShowSource ("F:\00012.MTS",FPS=25)。然而它对MTS高清格式兼容性不好,有时画面会出现花屏现象(表现为马赛克或大面积色块,画面支离破碎,严重扭曲),更令人烦恼的是在预览AVS时画面没有花屏,但压片之后花屏又出现了。
起初我怀疑是系统的H264解码器和分离器版本问题,但是我装的完美解码明明是2011年版,LX5的MTS格式是在2010年就出来了,无论选用CoreAVC、FFDShow还是Cyberlink的H264解码器都可以正常播放MTS,因此解码器不可能有问题。
在用VirtualDubMod打开AVS脚本后,屏幕右下角的系统托盘会出现Haali的图标,说明Haali分离器在负责解析MTS的视频音频流。我注意到出现花屏的画面都是码率比较高的帧,Haali的默认缓冲区为8MB,我就想会不会是Haali的缓冲不足?于是尝试修改Haali的设置:运行regedit,在HKEY_CURRENT_USER\Software\Haali\Matroska Splitter下新建input.buffer.size的DWORD值,数值改为十进制的32768(代表32MB)。再次预览AVS,花屏的几率似乎减少了,但还是偶尔出现马赛克,修改缓冲区的办法还不是很奏效。
既然不是解码器和分离器的错误,问题很可能就落在DirectShowSource语句上了,因为以前已试验过该语句加载RMVB也偶尔出现马赛克。 于是上Doom9论坛寻找答案,发现人家都用DGAVCIndex处理TS、M2TS格式高清视频,与DVDRIP处理一样需要对视频音频流分别抽出,然后再作反交错处理。而我的MTS是逐行扫描,无需反交错,有没有更简单的办法?后来找到了《FFMPEGSource2 as replacement for DGAVCDec》一帖:http://forum.doom9.org/archive/index.php/t-151105.html
原来FFMpegSource2更好,与此相关的参考文章还有:
(1)中文说明
http://www.nmm-hd.org/doc/index.php?title=FFmpegSource2&variant=zh-cn
(2)插件下载
http://code.google.com/p/ffmpegsource/
DirectShowSource一条语句可以同时处理视频音频流,而FFMpegSource2就需要分别打开视频音频:
A = FFAudioSource(X)
V = FFVideoSource(X)
AudioDub(V, A)
或直接用FFIndex()
FFIndex(X)
AudioDub(FFVideoSource(X), FFAudioSource(X))
举个应用例子,编写AVS脚本将3段MTS录像串联,每段视频均要内嵌ASS格式字幕,每段之间使用白色淡入淡出特效来衔接:
LoadPlugin("D:\Program Files\Pure Codec\codecs\vsfilter.dll")
LoadPlugin("D:\Program Files\AviSynth 2.5\plugins\ffms2.dll")
v1=FFVideoSource("j:\PRIVATE\AVCHD\BDMV\STREAM\00012.MTS").textsub("F:\temp\00012.ass").fadein0(25).fadeout0(25,color=$FFFFFF)
a1=FFAudioSource("j:\PRIVATE\AVCHD\BDMV\STREAM\00012.MTS").fadeio(25)
v2=FFVideoSource("j:\PRIVATE\AVCHD\BDMV\STREAM\00013.MTS").textsub("F:\temp\00013.ass").fadein0(25,color=$FFFFFF).fadeout0(25,color=$FFFFFF)
a2=FFAudioSource("j:\PRIVATE\AVCHD\BDMV\STREAM\00013.MTS").fadeio(25)
v3=FFVideoSource("j:\PRIVATE\AVCHD\BDMV\STREAM\00014.MTS").textsub("F:\temp\00014.ass").fadein0(25,color=$FFFFFF)
a3=FFAudioSource("j:\PRIVATE\AVCHD\BDMV\STREAM\00014.MTS").fadeio(25)
all=AudioDub(v1, a1)+AudioDub(v2, a2)+AudioDub(v3, a3)
return (all)
从预览脚本到X264压片,花屏现象不再复发,试验成功,FFMpegSource2果然不同凡响。
上述的AVS脚本同时处理视频和音频流,可以将此脚本直接拖到MediaCoder里转格式,还可以在TMPGEnc DVD Author直接打开脚本转成DVD,如果不需要将音频转格式,可以将脚本的关于音频的语句去掉,然后到命令行裸压。
因此以后凡用AVS脚本处理MTS视频就要避免使用DirectShowSource,而要改用FFMpegSource2。但使用FFMpegSource2的缺点是一开始打开视频音频流需要较长的时间,会留下*.ffindex临时文件,需要手工清除临时文件。
PS:MTS格式的音频是48Khz 192Kbps的AC3格式,如果想提取AC3音频,可以用Megui自带的HD Streams Extractor(在Megui界面里按快捷键Ctrl+F7)打开提取。
来源:http://hi.baidu.com/scott0902/blog/item/a593a80995374697d0581bae.html
页:
[1]