segasaturn
帖子: 16
注册时间: 2011-01-04 17:02

[讨论]批处理xvid时以1pass的测算结果按百分比自动赋值2pass比特率的方法

虽然megui就有提供xvid的自动2pass,但却是直接指定码率的方式,从未见过有软件提供自动2pass质量模式,所以我很想完善这个有趣的做法~目前我的步骤是:
1.用命令行的xvid做1pass,将log输出文件
2.用cmd自带的命令从log文件中得到1pass的体积
3.用avswrite获得目标的总帧数和帧率,计算出时长
4.将体积和时长代入公式,计算出结果
5.根据需要可以将结果写入注册表调用vfw,或者继续用命令行做2pass

但是,这样写出的命令很长,而且使用了很多软件,感觉不太漂亮…所以希望能更进一步~ {:cat_8}
q1.有没有一种支持命令行的软件直接提供2pass质量模式的呢?
q2.有没有一种支持命令行的软件可以直接从video.pass读出码率的呢?
头像
dgwxx
管理猿
帖子: 771
注册时间: 2010-09-19 20:42
联系: 网站

Re: [讨论]批处理xvid时以1pass的测算结果按百分比自动赋值2pass比特率的方法

貌似没有。XviD的StatsReader可以分析stats不过貌似没cmd模式。
x264的crf 2pass也还没有自动的方法……只能手动写cmd。
日常推 @dgwxx: 基本没什么技术的话题,欢迎没事看看消遣。
► 显示剧情透露 平庸的rip
► 显示剧情透露 “不知道”的五大理由
头像
lititude
帖子: 11
注册时间: 2010-09-19 22:42

Re: [讨论]批处理xvid时以1pass的测算结果按百分比自动赋值2pass比特率的方法

用1pass的码率跑2pass?如果没有特殊的要求,crf一遍即可,跑两遍没有意义。
segasaturn
帖子: 16
注册时间: 2011-01-04 17:02

Re: [讨论]批处理xvid时以1pass的测算结果按百分比自动赋值2pass比特率的方法

忽然想到2pass时可以填目标体积,所以决定干脆直接从video.pass里取文件大小,因为cmd的计算能力有限(1pass体积过2G会出问题),所以爬墙到vbs去~ {:cat_10}

代码: 全选

Dim fso
set fso = CreateObject("Scripting.FileSystemObject")
set var_T1 = fso.OpenTextFile("video.pass",1)

'按换行符分割并统计最大可用下标
var_T2 = var_T1.readall
var_T3 = split(var_T2,vbLf)
var_line = ubound(var_T3)

var_row = 3
var_len = 1
var_size = 0

'从第4行开始读取,到最后一行为止
Do Until var_row = var_line

'按空格分割字符,最大下标足够的时候,将表示文件大小的字符串叠加
var_T4 = split(var_T3(var_row)," ")
if ubound(var_T4) = 6 then
var_size = var_size+var_T4(5)
end if

var_row = var_row+1
loop

'用CScript xxx.vbs yy可以显示在cmd窗口中=w=
var_Tin = Wscript.arguments(0)
var_Tout = int ( var_size * var_Tin / 100 /1000 )
Wscript.StdOut.WriteLine var_Tout
然后用for把结果保存为变量,在cmd里这样写~ {:cat_11}

代码: 全选

for /f %%a in ('CScript 计算xvid的1pass文件体积并按照输入值计算百分比整数结果.vbs 50') do set filesize=%%a
这样可以两个pass都用同一个软件做,取出来的变量也可以直接用在命令行版或赋值注册表也行~好玩吧 {:cat_11}

回到 “视频编码器 / Video encoder discussion”