命令行实现RMVB视频压制

发布时间:2009-03-25 01:20:29 | 文章编号:#1170


17KB的NT命令脚本实现任意格式视频一键转换为RMVB


视频格式多种多样,格式互转的软件也多的不计其数。这篇文章讲述一种便捷的方法,在安装了合适的解码器以及Helix Real Producer(HRP)之后,使用一个16KB的Windows NT命令脚本既可以实现任意格式的视频文件拖放转换为RealVideo 9(RMVB)视频。


需求:
80MB磁盘空间(主要为安装解码器和Real Producer用);性能较好的CPU,比较大的内存(视频转换很消耗计算资源)


核心的工作原理:
在 安装ffdshow解码器之后,各种主流视频格式都可以通过系统的解码组件解码,因此使用AVISynth提供视频流成为可能;Helix Real Producer可以直接读取的格式十分有限,许多常用格式无法正常打开,如AVI容器的XVID,还有MPEG2等等,但是可以打开avs,即 AVISynth脚本文件。在自动生成avs脚本之后随即生成Real Producer的任务文件(.rpjf,Real Producer Job File),调用命令行编码器producer.exe进行编码。







设计效果:


在做好前期准 备以后,任何时刻转换视频只需要使用一个文件:gen_core.cmd。可以通过三种方式启动:一,拖动欲转换视频的图标,放到 gen_core.cmd上面,立即启动转换;二,通过命令行启动,类似于拖放;三,通过命令行启动,没有任何等待,错误信息记录在磁盘文件中,即实现无 人值守的批处理压制。另外,如果直接双击启动脚本,又有三个功能:生成引用d2v的avs,打开编辑脚本(自动备份),以及显示版本信息。

流程大致分如下几步:
一,环境变量初始化,设置调用的文件位置、视频属性等;
二,检查输入是否有误:文件名应为扩展到驱动器的完整路径名,目的文件夹中应不包含同名的RMVB文件,在批处理环境下每个调用语句只允许一个文件,拖拽启动时同时拖拽的文件应不多于八个;
三,检查无错后,进行avs和rpjf脚本的编译。如果输入文件为avs脚本,则直接引用。
四,启动producer。
五,压制结束,删除临时文件。


前期准备——安装AVISynth,ffdshow,和Helix Producer:
一,AVISynth, 这个提供从媒体文件到压制软件的传输通道。使用版本2.57。安装完以后,需要自行安装着几个滤镜(如果你需要使用DVD转RMVB的功 能):nicaudio,dgmpgdec,kerneldeint,mpasource(安装方法:下载到的压缩包解压后,把所有文件复制到 avisynth安装目录的plugins文件夹中即可,注意不要建立子文件夹)。
二,ffdshow,这个是一步到位的解码器,可以打开绝大多数主流媒体文件。使用版本ffdshow-rev1900_20080315_xxl


AVISynth和滤镜以及ffdshow的下载:


http://cid-eaacf9754046f850.skydrive.live.com/self.aspx/applications/Avisynth%7C_257.rar


http://cid-eaacf9754046f850.skydrive.live.com/self.aspx/applications/dgmpgdec148%7C_20060720.zip


http://cid-eaacf9754046f850.skydrive.live.com/self.aspx/applications/kerneldeint141.zip


http://cid-eaacf9754046f850.skydrive.live.com/self.aspx/applications/mpasource%7C_20080220.zip


http://cid-eaacf9754046f850.skydrive.live.com/self.aspx/applications/nicaudio%7C_20070821.zip


http://cid-eaacf9754046f850.skydrive.live.com/self.aspx/applications/ffdshow-rev1900%7C_20080315%7C_xxl.rar


三,Helix Real Producer,这个是Real公司出的压制工具,一切事情的起点……使用版本RealProducer Plus 11,其实具体版本无所谓,我们只用到RealVideo9,这样速度比较快。


声明:
这 里使用到的三个软件,其中AVISynth(包括那些第三方滤镜)和ffdshow都是免费开源软件,只要是在不谋取商业利益的前提下,你可以对它们做任 何事情。而Helix Producer是商业软件,也就是说你需要花钱购买。当然网上可以下载到安装程序,但请不要找我要序列号,这样没意思:)


后期准备——初始化gen_core.cmd:


gen_core.cmd下载:


 



或者把下面代码保存成文本文件,再更改扩展名为cmd:


***



@echo off
setlocal EnableDelayedExpansion

::*****************initialization
set mediatarget=F:exchangevideo
set producer="D:movieRealRealProducer Plus 11producer.exe"
set coreversion=gen_core 4.0 beta    code last updated ^: 2009-3-21 22^:00
set D2AVSversion=AVS file generator for D2V file 0.1    code last updated ^: 2008-2-10 21^:09
set resize=1
set redar=1
set DAR_H=3
set DAR_W=4
set SIZE_H=240
set SIZE_W=320
set RemainAVSfile=0
set silent=n
set queuenum=0
title %coreversion%
mode con lines=40

::check

if "%~1"=="" goto :selectfeature

if /i "%~1"=="-b" (
shift
set silent=s
if not "%~3"=="" call :terminate 03 "%~1" !silent!
goto :end
)

if /i "%~x1"==".txt" (
call :filelistbatch "%~1"
goto :end
)

if not "%~1"=="%~dp1%~nx1" (
call :terminate 01 "%~1" %silent%
goto :end
)

::check task queue

if not "%~9"=="" (echo too many files - "%~9" && pause && endlocal && exit /b)
if not "%~2"=="" set /a queuenum+=1
if not "%~3"=="" set /a queuenum+=1
if not "%~4"=="" set /a queuenum+=1
if not "%~5"=="" set /a queuenum+=1
if not "%~6"=="" set /a queuenum+=1
if not "%~7"=="" set /a queuenum+=1
if not "%~8"=="" set /a queuenum+=1

::head of batch

:begin
cls

if exist "%mediatarget%%~n1.rmvb" (
call :terminate 02 "%~1" %silent%
goto :end
)

::print task queue

if %queuenum% GEQ 1 (
echo Task Queue list ^: && echo.
if not "%~2"=="" echo "%~2"
if not "%~3"=="" echo "%~3"
if not "%~4"=="" echo "%~4"
if not "%~5"=="" echo "%~5"
if not "%~6"=="" echo "%~6"
if not "%~7"=="" echo "%~7"
if not "%~8"=="" echo "%~8"
echo ------------------------------------------------------
echo.
)

::composing job file

echo.
echo gen_core started^: %time:~,8% && echo %coreversion% && echo.
echo Source file is && echo %1 && echo.

call :compavs "%~1" "%mediatarget%temp.avs"
call :comprpjf "%mediatarget%temp.rpjf" "%mediatarget%temp.avs" "%mediatarget%temp.rmvb"
attrib "%mediatarget%temp.rpjf" +h
attrib "%mediatarget%temp.avs" +h
echo job file finished.

::start producer.exe and check error after coding

echo.&&echo starting producer...

%producer% -j "%mediatarget%temp.rpjf" -daw

if ERRORLEVEL 1 (
echo.&&echo.&&echo.
echo An error has occured during the producer step.
echo Check your media file, it may be corrupt.
pause
attrib "%mediatarget%temp.avs" -h
del "%mediatarget%temp.rpjf" /ah
goto :end
)

::end of batch

if "%RemainAVSfile%"=="0" del "%mediatarget%temp.avs" /ah
del "%mediatarget%temp.rpjf" /ah
ren "%mediatarget%temp.rmvb" "%~n1.rmvb"

echo.&&echo processing work complete.
echo Cleaning any temporary file generated by this batch....

:end
set /a queuenum-=1
if %queuenum% GEQ 0 (
shift
goto :begin
)
endlocal
exit /b

:: ***************sub commands**************************************************************

::compose avs file
:: usage - call :compavs ["%~1"] [target avs file | "%mediatarget%temp.avs"]

:compavs

echo start parsing job file..

set AvsIncludeFile=%1
set AvsIncludeFile=%AvsIncludeFile:"=%

if /i "%AvsIncludeFile:~-12%"=="d2v_temp.avs" (
echo Input file is d2v script, quote it.
>%2 echo Import^("%AvsIncludeFile%"^)
goto :rere
)

if /i "%AvsIncludeFile:~-3%"==".avs" (
echo Input file is a script, Directly quote it.
>%2 echo Import^("%AvsIncludeFile%"^)
goto :eof
)

>%2 echo DirectShowSource^("%AvsIncludeFile%"^,fps=24,convertfps=true^)

:rere
if %redar%==0 goto :resize

:redar
>>%2 echo oH=Height
>>%2 echo oW=Width
>>%2 echo H=oH+^(^(oH%%%DAR_H%==0^)?0:^(%DAR_H%-oH%%%DAR_H%)^)
>>%2 echo W=oW+^(^(oW%%%DAR_W%==0^)?0:^(%DAR_W%-oW%%%DAR_W%)^)
>>%2 echo cT=^(W*%DAR_H%^
>>%2 echo cB=^(W*%DAR_H%^
>>%2 echo cR=^(W*%DAR_H%^
>>%2 echo cL=^(W*%DAR_H%^
>>%2 echo AddBorders ^( int ^(cL^)^, int ^(cT^)^, int ^(cR^)^, int ^(cB^) ^)

:resize

if %resize%==0 goto :noresize

>>%2 echo LanczosResize ^(%SIZE_W%^,%SIZE_H%^)

:noresize

::add subtitle

if exist "%AvsIncludeFile:~0,-4%.sub" (
echo Subtitle file "%AvsIncludeFile:~0,-4%.sub" detected^, loaded automatically.
>>%2 echo VobSub^("%AvsIncludeFile:~0,-4%.sub"^)
)
if exist "%AvsIncludeFile:~0,-4%.srt" (
echo Subtitle file "%AvsIncludeFile:~0,-4%.srt" detected^, loaded automatically.
>>%2 echo TextSub^("%AvsIncludeFile:~0,-4%.srt"^)
)

>>%2 echo ConvertToYV12

goto :eof

::compose producer job rpjf file
:: usage - call :comprpjf [target rpjf file | "%mediatarget%temp.rpjf"] [.avs file name | %mediatarget%temp.avs] [.rpjf file name | %mediatarget%temp.rmvb]

:comprpjf

set comrpjf_rpjf=%2
set comrpjf_rpjf=%comrpjf_rpjf:"=%
set comrpjf_rmvb=%3
set comrpjf_rmvb=%comrpjf_rmvb:"=%

>%1 echo ^
>>%1 echo ^http://ns.real.com/tools/job.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ns.real.com/tools/job.2.0 http://ns.real.com/tools/job.2.0.xsd"^>
>>%1 echo   ^false^
>>%1 echo   ^
>>%1 echo     ^
>>%1 echo       ^Author^
>>%1 echo       ^dtm^
>>%1 echo     ^
>>%1 echo     ^
>>%1 echo       ^Copyright^
>>%1 echo       ^Scorp^
>>%1 echo     ^
>>%1 echo     ^
>>%1 echo       ^Generated By^
>>%1 echo       ^RealProducer(R) Plus 11.0 for Windows, Build 11.0.0.2013^
>>%1 echo     ^
>>%1 echo   ^
>>%1 echo   ^
>>%1 echo     ^
>>%1 echo       ^%comrpjf_rpjf%^
>>%1 echo       ^
>>%1 echo         ^
>>%1 echo           ^true^
>>%1 echo           ^true^
>>%1 echo           ^true^
>>%1 echo           ^false^
>>%1 echo           ^rn-prefilter-deinterlace^
>>%1 echo         ^
>>%1 echo         ^
>>%1 echo           ^false^
>>%1 echo           ^0.000000^
>>%1 echo         ^
>>%1 echo       ^
>>%1 echo     ^
>>%1 echo   ^

>>%1 echo   ^
>>%1 echo     ^
>>%1 echo       ^
>>%1 echo         ^
>>%1 echo           ^%comrpjf_rmvb%^
>>%1 echo         ^
>>%1 echo       ^
>>%1 echo       ^
>>%1 echo         ^music^
>>%1 echo         ^high^
>>%1 echo         ^false^
>>%1 echo         ^false^
>>%1 echo         ^0^
>>%1 echo         ^0^
>>%1 echo         ^high^
>>%1 echo         ^normal^
>>%1 echo         ^
>>%1 echo           ^350k for oppo^
>>%1 echo         ^
>>%1 echo       ^
>>%1 echo     ^
>>%1 echo   ^
>>%1 echo   ^
>>%1 echo     ^
>>%1 echo       ^350000^
>>%1 echo       ^700000^
>>%1 echo       ^350k for oppo^
>>%1 echo       ^
>>%1 echo         ^
>>%1 echo           ^rv10^
>>%1 echo           ^true^
>>%1 echo           ^medium^
>>%1 echo           ^vbrBitrate^
>>%1 echo           ^24.000000^
>>%1 echo           ^5.000000^
>>%1 echo           ^4.000000^
>>%1 echo           ^rn-videocodec-realvideo^
>>%1 echo           ^60^
>>%1 echo         ^
>>%1 echo         ^
>>%1 echo           ^1^
>>%1 echo           ^raac^
>>%1 echo           ^high^
>>%1 echo           ^rn-audiocodec-realaudio^
>>%1 echo           ^
>>%1 echo             ^voice^
>>%1 echo             ^audio-video^
>>%1 echo           ^
>>%1 echo         ^
>>%1 echo         ^
>>%1 echo           ^1^
>>%1 echo           ^raac^
>>%1 echo           ^high^
>>%1 echo           ^rn-audiocodec-realaudio^
>>%1 echo           ^
>>%1 echo             ^music^
>>%1 echo             ^audio-video^
>>%1 echo           ^
>>%1 echo         ^
>>%1 echo         ^
>>%1 echo           ^9^
>>%1 echo           ^raac^
>>%1 echo           ^high^
>>%1 echo           ^rn-audiocodec-realaudio^
>>%1 echo           ^
>>%1 echo             ^voice^
>>%1 echo             ^audio-only^
>>%1 echo           ^
>>%1 echo         ^
>>%1 echo         ^
>>%1 echo           ^11^
>>%1 echo           ^raac^
>>%1 echo           ^high^
>>%1 echo           ^rn-audiocodec-realaudio^
>>%1 echo           ^
>>%1 echo             ^music^
>>%1 echo             ^audio-only^
>>%1 echo           ^
>>%1 echo         ^
>>%1 echo       ^
>>%1 echo     ^
>>%1 echo   ^
>>%1 echo ^


goto :eof

::print error or help info
:: usage - call :teminate [errorcode] [type char "s" for silent batch]
:: error code -
:: 00 about this batch file
:: 01 not full path
:: 02 target file already existing
:: 03 too many strings in batch mode

:terminate

set gendatetime=%date:~,10%    %time:~,8%   
set erroroutputfile=%mediatarget%error.log
set corruptedfilename=%2
set corruptedfilename=%corruptedfilename:"=%

if %1==01 (
set errorinfo=bad file name "%corruptedfilename%" - MUST FULL path
)

if %1==02 (
set errorinfo=file "%corruptedfilename%" already existing in target folder - %mediatarget%
)

if %1==03 (
set errorinfo=too many strings^^^! only "-b" is supported.
)

cls
if /i "%3"=="s" (
echo %errorinfo%
echo %errorinfo%>>%mediatarget%error.log
echo an error has occured and this window will be closed after 5 seconds...
call :timewait 5
) else (
echo %errorinfo%
pause
echo.
echo *** about this batch file... ***
echo.
echo this is a batch file devoted to processing media file.
echo  it can convert a video file in any regular format to RV10 VBR file.
echo  i develop it in order to replay videos on OPPO S9.
echo gen_core uses these modules -
echo  AVISynthezier,
echo  Helix Real Producer ^(or its codecs, registered to system environment^),
echo  ffdshow ^(or any other DirectShow loadable decoders^),
echo  and last and most important a WinXP environment!
echo.
echo If Subtitle file of which the name same as the input file,
echo  it will be loaded automatically.
echo  to disable the subtitle, rename the sub different ^(so they are not the same^).
echo.
echo DO NOT DO ANYTHING ILLEGAL !!!
echo %coreversion%
echo.
echo how to use - simply DRAG video file to gen_core icon -- max 8 files
echo command line format - gen_core FILENAME^(MUST FULL path^)
echo batch script integration -
echo  add command CALL before gen_core and string -b after it, sample^:
echo  call gen_core -b "F:exchangevideoBrokeBackMountain2.avi"
pause
)

goto :eof

::generate txt-format file list
:: usage - call :filelistbatch "%~1"

:filelistbatch

set gendate=%date:-=%
set gendate=%gendate:~2,6%
set gentime=%time::=%
set gentime=%gentime:~,4%
set gendatetime=%gendate%%gentime%

echo Is it a file list^? Automatically read it..
echo.
for /F "usebackq" %%i in (%1) do (
>>"%mediatarget%batch%gendatetime%.cmd" echo call gen_core -b %%i
)
echo batch run script generated -
echo "%mediatarget%batch%gendatetime%.cmd"
echo please run this by yourself!
echo.
pause

goto :end

::wait for some time
:: usage - call :timewait [sec]

:timewait
>nul ping 127.0 -n %1

goto :eof

::print feature table if gen_core is run after double click

:selectfeature
set extendedfeature=NULL
:selectfeature_loop
echo gen_core running after double clicked ^:^)
echo features - && echo.
echo AD     Make an AVS file for DGIndex^(.d2v file^)
echo CFG    Edit gen_core.cmd
echo LST    generate file list
echo.

if not "%extendedfeature%"=="NULL" echo invalid input!
call :getinput extendedfeature What_do_you_want^?

if /i "%extendedfeature%"=="lst" (
echo.
call :getinput directory drag_your_target_here

set directory=!directory:"=!

for %%f in (!directory!*) do echo "%%~dpnxf">>"%mediatarget%filelist%gendatetime%.txt"
for %%f in (!directory!*) do echo %%~dpnxf

echo.
echo Now file list generated^:
echo %mediatarget%filelist%gendatetime%.txt
pause

endlocal
exit
)

if /i "%extendedfeature%"=="cfg" (
>nul del "%~dpn0.bak" /ah
>nul copy "%~0" "%~dpn0.bak" /y
>nul attrib "%~dpn0.bak" +h
echo automatically backuped.
call :timewait 2
start notepad gen_core.cmd
endlocal
exit
)

if /i "%extendedfeature%"=="ad" (
call :d2vgen
endlocal
exit
)

cls
goto :selectfeature_loop

::get input
:: usage - call :getinput [target variable] [question - underline "_" instead of space " "]

:getinput
:getinput_loop
set getinput_temp=NULL
set getinput_question=%2
set /p getinput_temp=%getinput_question:_= %   
if "%getinput_temp%"=="NULL" goto :getinput_loop
set %1=%getinput_temp%

goto :eof

::D2V AVS file generator

:d2vgen

cls&&echo.&&echo %D2AVSversion%&&echo.
set /p d2vfile=drag d2v file here.   
set /p audfile=drag audio file here.   

set "d2vfile=%d2vfile:"=%"
set "audfile=%audfile:"=%"

if %audfile:~-3,3%==wav set audext=WAVSource&&set "audplugin="
if %audfile:~-3,3%==mpa set audext=MPASource&&set mpaaud=^,normalize^=false
if %audfile:~-3,3%==ac3 set audext=NicAC3Source

>"%mediatarget%d2v_temp.avs" echo # generated automatically by gen_core
>>"%mediatarget%d2v_temp.avs" echo AudioDub^(mpeg2source^(^"%d2vfile%^"^)^,%audext%^(^"%audfile%^"%mpaaud%^)^)
>>"%mediatarget%d2v_temp.avs" echo KernelDeint^(1^)
echo avs file completed - "%mediatarget%d2v_temp.avs"
pause

goto :eof




***


用记事本打开gen_core.cmd(方法:右键选“编辑”或在记事本中选择菜单项“文件〉打开”)。接下来要进行一些必要的设置。


首先请对记事本做一些设置:打开“格式”菜单,去掉“自动换行”前面的钩;再打开“查看”菜单,选上“状态栏”前面的钩,这样你可以在记事本窗口的最下面看到光标所在的行号Ln和列号Col。


一,设置producer的安装目录。
位 于第六行(Ln 6,下略),需要修改的是等号后面的字符串。一般是"C:Program FilesRealRealProducer Plus 11producer.exe",反正就是包含producer.exe的那个目录,你自己装在那儿就写上去,注意用英文双引号括起来。


二,设置临时文件和生成rmvb文件的存放目录。
在第五行。需要修改的是等号后面的字符串。这个目录需要你自己指定,它是用来存放自动生成的两个脚本文件,和压制生成的rmvb文件的,我推荐你在一个大的分区里新建一个文件夹。
注 意两点,一,完整的文件名不能包含中文、标点符号以及其他一切特殊字符,最好也不要带空格,这样做是因为producer不支持空格和全角字符,如果你用 了汉字之类的东西的话producer在运行时会报错(非法操作);二,路经要从驱动器开始,写完整,最后加上个反斜杠“”,比如G: exchangevideo。


三,设置缩放尺寸和更改比例(加黑框)。
这个问题,因为我写这个gen_core主要是为 了在OPPO S9上看RMVB,而一般的片子要么图像太大,打开慢,要么压制的有问题,经常出错,所以想自己压制320x240的RMVB视频。加之最新版的固件 (Firmware)有个bug,就是在播放纵横比不是4:3的视频时把画面充满整个屏幕,因此缩放、加框这两个操作就有必要。
缩放容易理解,而 关于加框是这样的,比如你有个视频,画面是16:9的,分辨率1280x720,如果缩放成MP4的屏幕的分辨率,也就是320x240,必然会把画面拉 长(你可以用“画图”做个试验),如何解决这个问题,我的想法是在原有的视频周围自动加上黑色的边框,比如在这个例子里,如果上下加上120像素的边框, 这样画面分辨率就是1280x960,再缩放成320x240就不会有比例失真了。
下面说说脚本里是怎样设置的,是第九到第十四行共六个变量控制 的。其中:resize=1表示启用画面缩放,0禁用;redar=1表示启用自动加框,0禁用;DAR_H和DAR_W是一组,表示高与宽的比例(比如 DAR_H=3和DAR_W=4表示宽:高=4:3);SIZE_H与SIZE_W是一组,表示缩放后的画面大小(比如SIZE_H=240和 SIZE_W=320表示宽x高=320x240)。
注意:缩放和加框可以独立执行,两者互不干扰;四个数值必须为整数,否则AVISynth报错,压制时非法操作;其他相关信息请自行获取。


准备完成之后,你就可以尝试压制视频了——


第一种方式:直接拖拽。把视频文件的图标拖动到gen_core.cmd的图标上,这有点像你在把文件放到文件夹里的时候,把文件的图标拖动到文件夹的图标上的操作。每次拖动最多支持八个文件,多了报错。所有你需要做的就是这么简单,拖动!


第二种方式:命令行启动。也简单得很,输入命令行gen_core加上一个空格,再加上视频文件的完整路径(用英文双引号括起来)即可,比如:
gen_core "G:exchangevideoBrokeBackMountain2.avi"


第三种方式:批处理脚本启动。要在gen_core之前加call命令,之后加参数-b,示例:
call gen_core -b "G:exchangevideoBrokeBackMountain2.avi"
这样将禁用所有报错显示,错误信息输出存放在文本文件err.txt中,也就是“缄默模式(silent mode)”,你可以写另一个脚本,里面包含许多个call,保存后双击运行就不用再管了,gen_core会处理完所有的文件!


第 四种方式:双击启动。这样不能压制视频,而是三个功能:显示版本和简易的帮助提示、自动备份脚本后打开记事本编辑脚本、生成DVD转RMVB用到的avs 文件。对第三点多说几句:众所周知,DVD视频转换成其它格式挺麻烦(真的挺麻烦),我的方法是用DGIndex生成d2v文件,同时解出音轨(一般是 ac3文件),这样以后就可以用avs加载了,这里是一个自动生成器,依次把d2v文件、音频文件拖放到CMD窗口并回车,就能自动生成加载d2v文件的 avs脚本。


关于版本:
现在贴的是3.53,其实我勤的话三天两头就改写一次代码,到现在总算是稳定了,没再有太大的改动。不过一个小功能d2v脚本生成器还处于尝试阶段(0.1),虽然能用但是不保证质量。


关于速度:
我 的笔记本是Dell Vostro 1400,T8100,1G内存,转换视频大概是3-4倍的速度,也就是一秒钟处理四秒钟视频数据。还算比较快的`比好多转换软件要快吧,因为这里用的是 avs脚本,在脚本阶段对画面进行处理,速度是比较快的,比用producer进行缩放等操作要快。


09.3 添加内容:
关于 在producer编码阶段异常跳出的问题,还有声音不正常(没有声音、速率不对等等),大致可以归咎于解码器没有安装好。要解决这个问题,首先检查 ffdshow是否安装好,如果在安装ffdshow之后又安装了其他的解码器(比如安装Adobe套件的时候就不知不觉装了,害得我一个晚上压的视频全 都是半倍速声音),建议重新安装之。如果问题尚未解决,应该配置ffdshow,将它设置为相应视频/音频格式的首选的解码器,在ffdshow自带的设 置界面里可以找到。如果问题仍然没有解决,建议尝试安装独立的解码器(应该是官方提供的或者有一定资质的来源)。



09.3.21 更新至4.0 beta - 采用子程序调用,优化程序结构,文件尺寸长了1KB。


- END -