找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 娃娃

[数值计算] [已解决]请教如何实现:首bat结果作为次bat变量按关联内容,顺序运作?

[复制链接]
发表于 2025-6-5 23:06:48 | 显示全部楼层
回复 8# 娃娃


   放着这么好的工具不用,非要搞一些长篇“高级”代码,对咱们这些外行来说,不是自找苦吃吗?
发表于 2025-6-6 03:37:18 | 显示全部楼层
回复 13# 娃娃


    啊 ,mpv获取的视频秒数是带小数的 ,改了下 ,重新将takeSsSequence.js里面的内容换成下面的 ,然后跟video_screenshot_auto.bat放在一起
运行video_screenshot_auto.bat

  1. function esFenJie(){
  2. var t=parseInt(mp.get_property('duration'));//获取整数总秒数
  3. mp.msg.info("times:",t,"s");//打印总秒数

  4. //因式分解 ,变量rt保存结果
  5. var a=0;
  6. var rt=[];
  7. for(var i=1;i<=t;i++){
  8. if(t%i==0){
  9. a=t/i;
  10. rt.push([i-1,1,a]);
  11. }}

  12. for(var i=0;i<rt.length;i++){mp.msg.info("result_"+i," => [",rt[i],"]");}//打印因式分解结果

  13. if(!t){return 0;}//不足1秒视频或不是视频或无法获取总秒数时
  14. if(rt.length==1){return 1;}//1秒视频时
  15. if(rt.length==2){return rt[1][0];}//仅有2组时
  16. if(rt.length%2==0){return rt[rt.length/2-1][0];}//大于2组且为偶数组时
  17. if(rt.length%2==1){return rt[(rt.length+1)/2-1][0];}//大于2组为奇数组时
  18. }


  19. function sleep(delay) {
  20.   var start = (new Date()).getTime();
  21.   while ((new Date()).getTime() - start < delay) {
  22.     continue;
  23.   }
  24. }

  25. function takeSsS() {

  26.     //var N = 3;//直接引用第三步,factorize_optimized.bat因数分解结果相乘对数中数值差别最小且位于+之前较小/较大数值作为变量
  27. var N=esFenJie();//执行函数获取结果并设置变量
  28.     var C = 0;
  29.     var start = 0;
  30.     var end = 100;
  31.     var step = (end - start)/(N+1);
  32.     var percent = start += step;

  33.     while (C < N) {
  34.         mp.commandv("sync","seek", percent, "absolute-percent+exact");
  35.         mp.msg.info((C+1)+"/"+N);
  36.         sleep(9000);
  37.         mp.commandv("sync","screenshot","video");
  38.         percent+=step;
  39.         C++;
  40.     }
  41.     mp.commandv("quit",0);
  42. }


  43. mp.register_event("file-loaded", takeSsS)
复制代码

评分

参与人数 1技术 +1 收起 理由
娃娃 + 1 一谢戋戋千千遍,回首向来心念念!

查看全部评分

 楼主| 发表于 2025-6-6 10:26:18 | 显示全部楼层
回复  娃娃

用 ffmpeg.exe 为例简要说明如下(可从本坛第三方下载 ffmpeg.exe  落地即用,存于批处脚本 ...
aloha20200628 发表于 2025-6-5 22:19



  

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. color 04 :: 黑色背景红色前景

  4. for %%v in (*.mkv,*.mp4,*.avi) do (
  5.   ffmpeg64.exe -i "%%v" ^
  6.     -vf "fps=1/718,format=yuv444p10le,colorspace=bt709:iall=bt709" ^    -compression_level 0 -pred mixed -q:v 0 "%%~nv_%%03d.png"
  7.   echo 已完成 [%%v] 的等分截图
  8. )
复制代码

@百度AI协力。还得请教ffmpeg64.exe如何完成开启(已计可施高色深,下面是MPV的参考。ffmpeg64.exe高色深好像颇为复杂
  1. %~dp0mpv" --vo=gpu-next --screenshot-high-bit-depth=yes
复制代码
 楼主| 发表于 2025-6-6 10:37:34 | 显示全部楼层
不会js+mpv,使用了点powershell+ffmpeg简单代码,截图数量用的1楼第3步代码,倒数 第 【有效行数/2+1】 ...
77七 发表于 2025-6-5 12:45

  1. for %%i in (*.mp4) do (
  2. rem 已下载14#朋友@aloha20200628推荐ffmpeg64.exe便携版。请问除扩展名外,尚需更改他处不?
复制代码
 楼主| 发表于 2025-6-6 10:41:57 | 显示全部楼层
回复  娃娃


   放着这么好的工具不用,非要搞一些长篇“高级”代码,对咱们这些外行来说,不是自找苦 ...
77七 发表于 2025-6-5 23:06


闭门造车的后果果然交流出新知。
 楼主| 发表于 2025-6-6 10:54:50 | 显示全部楼层
回复 17# Five66

  1. if(rt.length==2){return rt[1][0];}//仅有2组时
  2. if(rt.length%2==0){return rt[rt.length/2-1][0];}//大于2组且为偶数组时
  3. if(rt.length%2==1){return rt[(rt.length+1)/2-1][0];}//大于2组为奇数组时
复制代码

  
没问题的话自己改下3楼代码10-12行那些返回语句就能变更效果
应该是这几行吧?请问具体怎么更改呢?“==”后面值嘛?
发表于 2025-6-6 12:56:53 | 显示全部楼层
回复 19# 娃娃


   代码中的 ffmpeg 改成对应的exe名称,先试试,有问题再说。
发表于 2025-6-6 12:58:59 | 显示全部楼层
回复 18# 娃娃

影响视频质量的因素或参数很多,非专业者较难精准驾驭,如同压制视频文件,各种控制参数眼花缭乱,一般最终还是采用类似 QP 量化器(可选级别 0-51)来解决。用 ffmpeg 截图直接采用质量管控参数 -q:v n 也许更加方便可靠,其中质量级别 n = 0-12,从 0=film+3(超3胶片级)到 12=low(低质),应该足够试取了...
 楼主| 发表于 2025-6-6 13:36:07 | 显示全部楼层
回复  娃娃


   代码中的 ffmpeg 改成对应的exe名称,先试试,有问题再说。
77七 发表于 2025-6-6 12:56


啊:o老粗枝大叶了。
 楼主| 发表于 2025-6-6 13:42:26 | 显示全部楼层
回复 23# aloha20200628


   嗯~ o(* ̄▽ ̄*)o,也发现了。其实就是不喜欢各种压缩,影片啥质量图片保持就是了。
 楼主| 发表于 2025-6-6 13:46:08 | 显示全部楼层
回复 15# 77七
原来评分每日有限制,待补哈。
发表于 2025-6-6 19:17:49 | 显示全部楼层
回复 21# 娃娃


    是后面中括号{}里面的内容 ,虽然里面只有一句return xxxxxx; ,但是那就是返回值 ,简单来讲就是执行结果 ,因为改过了 ,参考17楼代码第16-20行

  1. return 0;//执行结果为0
  2. return 1;//执行结果为1
  3. return rt[1][0];//执行结果为变量rt的第1行第0列的数字 ,变量rt保存因式分解结果 ,相当于一个表格 ,表格行数为rt.length ,列数为3列 ,第0列为+号左边的数字 ,第1列为+号右边边的数字 ,第2列为乘数数字
  4. return rt[rt.length/2-1][0];//执行结果为变量rt首个中间行第0列的数字 ,变量rt保存因式分解结果 ,相当于一个表格 ,表格行数为rt.length ,列数为3列 ,第0列为+号左边的数字 ,第1列为+号右边边的数字 ,第2列为乘数数字
  5. return rt[(rt.length+1)/2-1][0];//执行结果为变量rt中间行第0列的数字 ,变量rt保存因式分解结果 ,相当于一个表格 ,表格行数为rt.length ,列数为3列 ,第0列为+号左边的数字 ,第1列为+号右边边的数字 ,第2列为乘数数字
复制代码
自己根据需要来改

评分

参与人数 1技术 +1 收起 理由
娃娃 + 1 巨细靡遗!

查看全部评分

发表于 2025-6-6 19:35:45 | 显示全部楼层
回复 18# 娃娃


高色深是解码成效果高点(理论高点)的图片数据 ,然后将图片扔给渲染器或滤镜进行处理 ,播放时给图片加点效果或特效 ,不播放时基本没用
如果只是截图的话没必要用 ,因为能后期处理 ,想要给图片加点效果或特效的话可以截完图后再用软件处理
 楼主| 发表于 2025-6-6 19:41:12 | 显示全部楼层
回复 27# Five66


   嗯~ o(* ̄▽ ̄*)o谢谢孜孜不倦加详实的注解。
 楼主| 发表于 2025-6-6 19:47:41 | 显示全部楼层
回复 28# Five66


   截图,基本没什么后期处理。所以想一开始就奔最佳化去。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:05 , Processed in 0.016287 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表