分页: 1 / 3

请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-01-29 20:47
rockzero18
虽然只是需要几个很基本的AVS内置滤镜(如下),
但因为要批量编码,逐一编写AVS有点不方便…
assumefps(60000,1001)
changefps(30000,1001)
TimeStretch(tempo=200)
(为了节省看视频的时间,所以希望能2倍速观看)

所以想请教,有没有办法让AVS变成通用的滤镜?
即一个AVS可以给任意片源在重新编码时使用呢?
这样就不用10个片源编写10个AVS文件,
并且只是为了改DirectShowSource里的文件名称。

至于编码软件,基本上使用RipBot264或Direct264。

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-01-29 21:32
nuomi

代码: 全选

@Echo Off
:Start
Echo DirectShowSource("%~f1")>>"%~dpn1.avs"
Echo AssumeFps(60000,1001)>>"%~dpn1.avs"
Echo ChangeFps(30000,1001)>>"%~dpn1.avs"
Echo TimeStretch(tempo=200)>>"%~dpn1.avs"
Shift
If Not "%~1"=="" Goto Start
Echo. & Pause
新建為bat,然後把視頻文件(可批量)拖到該bat上即可生成AVS(在視頻目錄並同名)。瘟妻需要權限自己OoxX {:cat_4}
P.S.DirectShowSource不怎麼用,詳細參數自己調,輸入片源填%~f1即可……
P.S..壓片這麼壓真的沒問題麼……

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-01-30 5:50
rockzero18
非常感謝您幫忙編寫了這麼方便的BAT文件!
不過也就是說,還是需要一片源一AVS文件才行對吧?

請問如果要更改生成AVS的目錄,例如在視頻目錄下,
自動創建一個新目錄用來存放AVS文件該怎麼做呢?
若無法自動,那可手動創建後,讓AVS存放在裡面嗎?

這樣壓片我是沒有遇到問題啦…不過這是幫別人壓的,
2倍速對我來說實在是太快了,根本看不懂劇情了…

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-01-30 6:59
06_taro
以前帮某群写的模板,自动在原文件下用建立"原文件名autoPSPEncodeTemp"并放置自动生成的avs、m4a、mp4等零时文件,编码完了的文件名是"源文件名-muxed.mp4",与源文件同目录,零时文件自动删除。自动载入源文件名同名的字幕,优先级是ass>ssa>srt>idx。用法就是直接把视频文件拖放到这个autoPSPenc.bat上就行了,没有需要手写的东西。

[syntax lang="winbatch" lines="f" filename="autoPSPenc.bat"]@echo off
::全自動PSP批量壓制腳本
cd "/d %~dp0tools"
:start
if not exist "%~dp1autoPSPEncodeTemp" md "%~dp1autoPSPEncodeTemp"
::encode audio
::avconv.exe -i "%~f1" -f wav -ac 2 -vn - | qtaacenc.exe --tvbr 27 --samplerate keep --ignorelength --highest - "%~dp1autoPSPEncodeTemp\%~n1-audio.m4a" && echo ===============%~nx1: audio encode finished.=============== && echo.
avconv.exe -i "%~f1" -f wav -ac 2 -vn - | neroAacEnc.exe -q 0.35 -ignorelength -if - -of "%~dp1autoPSPEncodeTemp\%~n1-audio.m4a" && echo ===============%~nx1: audio encode finished.=============== && echo.
::generate avs
if not exist "%windir%\system32\libfftw3f-3.dll" copy "libfftw3f-3.dll" "%~dp1autoPSPEncodeTemp\libfftw3f-3.dll"
echo SetWorkingDir("%~dp0tools\") > "%~dp1autoPSPEncodeTemp\%~n1_process.avs"
echo Import("LoadPlugin.avsi") >> "%~dp1autoPSPEncodeTemp\%~n1_process.avs"
echo DirectShowSource("%~1", fps=23.976, ConvertFPS=True, audio=False).AssumeFPS(24000, 1001).ConvertToYV12() >> "%~dp1autoPSPEncodeTemp\%~n1_process.avs"
if exist "%~dpn1.ass" echo TextSub("%~dpn1.ass") >> "%~dp1autoPSPEncodeTemp\%~n1_process.avs" && goto Endsub
if exist "%~dpn1.ssa" echo TextSub("%~dpn1.ssa") >> "%~dp1autoPSPEncodeTemp\%~n1_process.avs" && goto Endsub
if exist "%~dpn1.srt" echo TextSub("%~dpn1.srt") >> "%~dp1autoPSPEncodeTemp\%~n1_process.avs" && goto Endsub
if exist "%~dpn1.idx" echo VobSub("%~dpn1.idx") >> "%~dp1autoPSPEncodeTemp\%~n1_process.avs" && goto Endsub
:Endsub
echo Import("16x9.avsi") >> "%~dp1autoPSPEncodeTemp\%~n1_process.avs"
::encode video
::Slow 1st pass
x264 --profile main --level 3 --crf 20.5 --ref 3 --deblock 1:1 --keyint infinite --min-keyint 1 --bframes 4 --b-adapt 2 --b-pyramid none --weightp 0 --qcomp 0.5 --rc-lookahead 40 --ipratio 1.10 --aq-mode 2 --merange 16 --me umh --subme 7 --trellis 2 --psy-rd 0.20:0 --direct auto --sar 40:33 --psnr --ssim --log-file "%~dpn1_1st_pass.log" --log-file-level debug --pass 1 --slow-firstpass --stats "%~dp1autoPSPEncodeTemp\%~n1_1pass.stats" --output "%~dp1autoPSPEncodeTemp\%~n1-video.mp4" "%~dp1autoPSPEncodeTemp\%~n1_process.avs" && echo ===============%~nx1: 1st pass finished.=============== && echo.
::2nd pass
x264 --profile main --level 3 --bitrate 400 --ref 3 --deblock 1:1 --keyint infinite --min-keyint 1 --bframes 4 --b-adapt 0 --b-pyramid none --weightp 0 --qcomp 0.5 --rc-lookahead 40 --ipratio 1.10 --aq-mode 2 --merange 16 --me umh --subme 7 --trellis 2 --psy-rd 0.20:0 --direct auto --sar 40:33 --psnr --ssim --log-file "%~dpn1_2nd_pass.log" --log-file-level debug --pass 2 --stats "%~dp1autoPSPEncodeTemp\%~n1_1pass.stats" --output "%~dp1autoPSPEncodeTemp\%~n1-video.mp4" "%~dp1autoPSPEncodeTemp\%~n1_process.avs" && echo ===============%~nx1: 2nd pass finished.=============== && echo.
::mux
remuxer -i "%~dp1autoPSPEncodeTemp\%~n1-video.mp4" -i "%~dp1autoPSPEncodeTemp\%~n1-audio.m4a" -o "%~dpn1-muxed.mp4"
::delete temp files
del "%~dp1autoPSPEncodeTemp\%~n1_process.avs" "%~dp1autoPSPEncodeTemp\%~n1-audio.m4a" "%~dp1autoPSPEncodeTemp\%~n1_1pass.stats" "%~dp1autoPSPEncodeTemp\%~n1_1pass.stats.mbtree" "%~dp1autoPSPEncodeTemp\%~n1-video.mp4"
dir /a /b "%~dp1autoPSPEncodeTemp"|findstr .>nul 2>nul || rd "%~dp1autoPSPEncodeTemp"
::end
echo ==============="%~nx1" has been encoded to "%~n1-muxed.mp4".=============== && echo.
shift
if not "%~1"=="" goto start
echo All tasks Finished.
echo. & pause[/syntax]

然后某个需要的模板
[syntax lang="avisynth" lines="f" filename="16x9.avsi"]last=( last.height<=576 ) ? last : last.BT709ToBT601()
last=( last.width==704 && last.height==480 ) ? last : last.Spline36Resize(704,480)
#dfttest()
FFT3dGPU()
AddBorders(8,0,8,0)[/syntax]

[syntax lang="avisynth" lines="f" filename="LoadPlugin.avsi"]LoadPlugin("DirectShowSource.dll")
LoadPlugin("BT709ToBT601.dll")
LoadPlugin("VSFilter.dll")
LoadPlugin("FFT3dGPU.dll")
LoadPlugin("dfttest.dll")[/syntax]

其他需要的exe/dll自己准备,完整目录结构:
\autoPSPenc.bat
\tools\16x9.avsi
\tools\avconv.exe
\tools\BT709ToBT601.dll
\tools\dfttest.dll
\tools\DirectShowSource.dll
\tools\FFT3dGPU.dll
\tools\fft3dgpu.hlsl
\tools\libfftw3f-3.dll
\tools\LoadPlugin.avsi
\tools\neroAacEnc.exe
\tools\qtaacenc.exe
\tools\remuxer.exe
\tools\VSFilter.dll
\tools\x264.exe

有问题表找我,我自己都不用的……

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-01-30 18:57
rockzero18
06_taro 写了:以前帮某群写的模板,自动在原文件下用建立"原文件名autoPSPEncodeTemp"并放置自动生成的avs、m4a、mp4等零时文件,编码完了的文件名是"源文件名-muxed.mp4",与源文件同目录,零时文件自动删除。自动载入源文件名同名的字幕,优先级是ass>ssa>srt>idx。用法就是直接把视频文件拖放到这个autoPSPenc.bat上就行了,没有需要手写的东西。

有问题表找我,我自己都不用的……
請問它的運作流程是這樣嗎…
先透過avconv.exe將原文件的音頻stdout再給NeroAACEnc進行編碼,
再透過echo進行AVS的編寫,其中包含了Import AVS模版和DShow,
接著由x264編碼,最後使用remuxer封裝MP4。

請問…使用avconv.exe和編寫AVS後再透過dshow2wav有什麼差別嗎?
封裝使用remuxer和mp4box哪一個比較好?

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-01-31 13:32
msg7086
rockzero18 写了:請問…使用avconv.exe和編寫AVS後再透過dshow2wav有什麼差別嗎?
封裝使用remuxer和mp4box哪一個比較好?
流程没啥大错
avconv走ff,avs走dshow,前者稳
封装l-smash和mp4box比,前者比较靠谱

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-02-03 3:35
rockzero18
msg7086 写了:流程没啥大错
avconv走ff,avs走dshow,前者稳
封装l-smash和mp4box比,前者比较靠谱
那在ffdshow的音頻解碼設置裡,我需要把所有格式都逐一啟用嗎?
如果走dshow則是本來系統用什麼解碼就用什麼而不需更改沒錯吧!
這樣的話,似乎走dshow還是比較方便?如果上述無誤的話…

另外想請教…如果不使用修改版的Direct264(direct264umod),
也能直接以AVS作為視頻來源而不透過avs2yuv作輸出嗎?
因為direct264umod似乎沒有x64的版本,使用x64版感覺有比較快…

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-02-03 3:56
06_taro
上述不是无误,MR的意思是avconv(前ffmpeg)走libavcodec,不是ffdshow,avconv的话和ffdshow完全没任何关系……

当然如果你要走dshow的话就是系统用啥作默认解码器实际就用啥,然后win7之类的不tweak掉系统默认解码器的话就出现了aac三倍速的RP,然后肯定又有人要来问为啥音频被加速了……现在x264内部集成的libav能支持dshow能解码的所有格式而且RP少得多,能不用dshow就别用了……

x264编译时没加--disable-avs的都可以支持avs输入……

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-02-04 2:05
rockzero18
謝謝您的回覆,讓您看笑話了…

自從發現WIN7的系統默認解碼器在某些情況下會導致
其他第三方解碼器無法正常工作(使用graphedit查看),
我就爬文搜索工具將其關閉了!

那請問依您上面給的autoPSPenc壓制文本來說,
其實並不需要依賴ffdshow和Haali分離器嗎?
這二者是x264官方推薦的RipBot264的運行條件。

希望您不會計較一直在回答我這些很入門的問題…

Re: 请教有办法让一个AVS文件变成所有片源通用的滤镜吗?

发表于 : 2012-02-04 9:26
msg7086
rockzero18 写了:那在ffdshow的音頻解碼設置裡,我需要把所有格式都逐一啟用嗎?
如果走dshow則是本來系統用什麼解碼就用什麼而不需更改沒錯吧!
這樣的話,似乎走dshow還是比較方便?如果上述無誤的話…

另外想請教…如果不使用修改版的Direct264(direct264umod),
也能直接以AVS作為視頻來源而不透過avs2yuv作輸出嗎?
因為direct264umod似乎沒有x64的版本,使用x64版感覺有比較快…
avconv: ffmpeg内置解码器 -> out
dshow: dshow -> splitter -> ffdshow或者别的 -> out
avs一般都是可以直接挂,而且用d264u的就没必要走avs,走avs就没必要用d264u。dshow基本都是运行在32位环境的,即使编译出x64版了也不见得能正常调用滤镜。
avs2yuv一般是为了桥接32位avs和64位x264用的