版面规则
提问时请注意:尽量详细描述操作过程、AVS脚本内容等,最好能写出片名,只贴图有时无法看出问题原因。
提示:发布原创内容请尽量使用附件上传。使用网盘会出现过期失效的问题,请注意。
rockzero18
帖子: 43
注册时间: 2012-01-25 15:50

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

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

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

至于编码软件,基本上使用RipBot264或Direct264。
头像
nuomi
帖子: 197
注册时间: 2010-09-25 12:59

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

代码: 全选

@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..壓片這麼壓真的沒問題麼……
rockzero18
帖子: 43
注册时间: 2012-01-25 15:50

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

非常感謝您幫忙編寫了這麼方便的BAT文件!
不過也就是說,還是需要一片源一AVS文件才行對吧?

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

這樣壓片我是沒有遇到問題啦…不過這是幫別人壓的,
2倍速對我來說實在是太快了,根本看不懂劇情了…
头像
06_taro
核心会员
核心会员
帖子: 998
注册时间: 2010-09-22 18:32
来自: United Kingdom
联系: 网站

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

以前帮某群写的模板,自动在原文件下用建立"原文件名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

有问题表找我,我自己都不用的……
つまんねー事聞くなよ!

I, personally, for me, believe (obviously sometimes) that my OS choice is right. That's me. I'm not telling you that you should believe it. Learn the facts, and the origins behind the facts, and make up your own damn mind. That's why you have one. (source)

Follow me: @06_taro

304——
为纪念伟大的宇宙史上最强压制304先生,联合国教科文组织决定,将每年的第304天,即平年的10月31日或者闰年的10月30日,定为世界304日。
rockzero18
帖子: 43
注册时间: 2012-01-25 15:50

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

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哪一個比較好?
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

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

rockzero18 写了:請問…使用avconv.exe和編寫AVS後再透過dshow2wav有什麼差別嗎?
封裝使用remuxer和mp4box哪一個比較好?
流程没啥大错
avconv走ff,avs走dshow,前者稳
封装l-smash和mp4box比,前者比较靠谱
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない
rockzero18
帖子: 43
注册时间: 2012-01-25 15:50

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

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

另外想請教…如果不使用修改版的Direct264(direct264umod),
也能直接以AVS作為視頻來源而不透過avs2yuv作輸出嗎?
因為direct264umod似乎沒有x64的版本,使用x64版感覺有比較快…
头像
06_taro
核心会员
核心会员
帖子: 998
注册时间: 2010-09-22 18:32
来自: United Kingdom
联系: 网站

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

上述不是无误,MR的意思是avconv(前ffmpeg)走libavcodec,不是ffdshow,avconv的话和ffdshow完全没任何关系……

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

x264编译时没加--disable-avs的都可以支持avs输入……
つまんねー事聞くなよ!

I, personally, for me, believe (obviously sometimes) that my OS choice is right. That's me. I'm not telling you that you should believe it. Learn the facts, and the origins behind the facts, and make up your own damn mind. That's why you have one. (source)

Follow me: @06_taro

304——
为纪念伟大的宇宙史上最强压制304先生,联合国教科文组织决定,将每年的第304天,即平年的10月31日或者闰年的10月30日,定为世界304日。
rockzero18
帖子: 43
注册时间: 2012-01-25 15:50

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

謝謝您的回覆,讓您看笑話了…

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

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

希望您不會計較一直在回答我這些很入門的問題…
头像
msg7086
帖子: 600
注册时间: 2011-02-19 0:49

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

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用的
Delogo LGD Collections 各种台标下载 | Home Of VapourSynth Evolution

<回答が無い理由>
1. 誰も知らない
2. 質問文が意味不明
3. 知ってるが、お前の態度が気に入らない
4. 良いボケが思いつかない

回到 “AviSynth”