
[已解決]請教如何實現首bat結果作為次bat變量按關聯內容順序運作最后由 娃娃 于 -6-8 11:55
前人栽樹,后人乘涼。率爾新白,飲水思源。
對于這些代碼來源,先致謝忱:
提取影片長度批處理+js混編獲取影片簡報.cmd為批處理之家前輩@aloha0628,
時間換算為秒time2sec.bat、分解因數factorize_optimized.bat為@百度ai,
aivideo_screenshot_auto.bat、takeSsSequence.js同為github上前輩@nilaoda。以下一切的想法也是因緣際會于nilaoda前輩的MPV連續截圖教程。
感謝有你@Five66提供準確解決方案@aloha0628引介新方法@77七引介新方法為自己的誤判向77七朋友道個歉!在77七君悉心指導下,發現原來是自己粗心大意未修改ffmpeg64所致。第一步,運行批處理+js混編獲取影片簡報.cmd
輸出nclick="copycode($('code0'));">復制代碼
- @set @x=1
- var argv = Wscript.arguments;
- var objShell = new ActiveXObject(shell.application);
- var objFolder = objShell.NameSpace(argv.item(0));
- var objFolderItem = objFolder.ParseName(argv.item(1));
- var sizeF = objFolder.GetDetailsOf(objFolderItem, 1);
- var durationF = objFolder.GetDetailsOf(objFolderItem, 27);
- Wscript.echo(sizeF+','+durationF);
【影片名稱】:Episode 01【影片格式】:.mkv【影片大小】:1.31 GB【影片時長】:00:47:56第二步,運行time2sec.bat
輸出nclick="copycode($('code1'));">復制代碼
- @echo off
- setlocal enabledelayedexpansion
- set time_str=00:47:56
- :: 輸入時間,直接引用第一步,批處理+js混編獲取影片簡報.cmd輸出時間值作為變量
- for /f tokens=1-3 delims=: %%a in (%time_str%) do (
- set /a total=%%a*3600 + %%b*60 + %%c
- )
- echo 輸入時間: %time_str% > result.txt
- echo 總秒數: !total! >> result.txt
- start result.txt
輸入時間: 00:47:56 總秒數: 2876第三步,運行factorize_optimized.bat
輸出nclick="copycode($('code2'));">復制代碼
- @echo off
- setlocal enabledelayedexpansion
- :: 配置區(直接修改這里生效)
- set target=2876 :: 要分解的整數,直接引用第二步,time2sec.bat總秒數值作為變量
- set sort_order=desc:: 排序方式:asc升序/desc降序
- set output=factors_%target%.txt
- :: 初始化
- if exist %output% del %output%
- set count=0
- :: 計算因數對(包含重復項)
- for /l %%a in (1,1,!target!) do (
- set /a mod=!target! %% %%a
- if !mod! equ 0 (
- set /a b=!target!/%%a
- set /a a_minus_1=%%a-1
- set /a count+=1
- set factors[!count!]=【!a_minus_1!+1】!b!
- )
- )
- :: 輸出結果
- echo [因數分解結果 !target!] > %output%
- echo ======================= >> %output%
- if !sort_order!==asc (
- echo [升序排列] >> %output%
- for /l %%i in (1,1,!count!) do echo !factors[%%i]! >> %output%
- ) else (
- echo [降序排列] >> %output%
- for /l %%i in (!count!,-1,1) do echo !factors[%%i]! >> %output%
- )
- start %output%
[因數分解結果 2876] ======================= [降序排列] 【2875+1】1 【1437+1】2 【718+1】4 【3+1】719 【1+1】1438 【0+1】2876第四步,takeSsSequence.js
第四步,運行video_screenshot_auto.bat,期待能同takeSsSequence.js整合nclick="copycode($('code3'));">復制代碼
- function sleep(delay) {
- var start = (new Date()).getTime();
- while ((new Date()).getTime() - start < delay) {
- continue;
- }
- }
- function takeSsS() {
- var N = 3;//直接引用第三步,factorize_optimized.bat因數分解結果相乘對數中數值差別最小且位于+之前較小/較大數值作為變量。 示例2876因數分解結果中,【2875+1】1 與【0+1】2876 這二組數值差別皆為2876-1=2875;【1437+1】2與【1+1】1438這二組數值差別皆為1436;【718+1】4與【3+1】719這二組數值差別皆為715。2875,1436,715這些數比較起來,為715的這二組數值差別最小。再來是【718+1】4與【3+1】719這二組位于+之前較小/較大數值比較。【718+1】4這一組中,+之前數值是718,【3+1】719這一組中,+之前數值是3,718和3比較,3較718小/718較3大。這里的因數分解結果相乘對數中數值差別最小且位于+之前較小/較大數值作為變量。 若作為選擇“/”的(開關)過于困難,但求能識別并選擇因數分解結果相乘對數中數值差別最小且位于+之前數值作為變量應該也就可以了。如它僅能識別并選擇【718+1】4中的718或僅能識別并選擇【3+1】719中的3,我們還是可以手動調整factorize_optimized.bat的升降序排列來配合它選擇,達到預期我想它識別并選擇因數分解結果相乘對數中數值差別最小且位于+之前較小/較大數值作為變量。
- var C = 0;
- var start = 0;
- var end = 100;
- var step = (end - start)/(N+1);
- var percent = start += step;
- while (C < N) {
- mp.commandv(sync,seek, percent, absolute-percent+exact);
- mp.msg.info((C+1)+/+N);
- sleep(9000);
- mp.commandv(sync,screenshot,video);
- percent+=step;
- C++;
- }
- mp.commandv(quit,0);
- }
- mp.register_event(file-loaded, takeSsS)
輸出nclick="copycode($('code4'));">復制代碼
- @echo off
- setlocal enabledelayedexpansion
- :: 檢查MPV和JS文件是否存在
- if not exist %~dp0mpv.exe (
- echo 錯誤:缺少mpv.exe,請確保與腳本同目錄
- pause
- exit /b 1
- )
- if not exist %~dp0takeSsSequence.js (
- echo 錯誤:缺少takeSsSequence.js腳本
- pause
- exit /b 1
- )
- :: 遍歷視頻文件并處理
- for %%F in (*.m2ts *.mp4 *.mkv *.avi *.mov *.flv *.webm) do (
- set video_name=%%~nF
- set output_dir=!video_name!_screenshots
- if not exist !output_dir! (
- mkdir !output_dir! || (
- echo 無法創建目錄:!output_dir!
- goto :error
- )
- )
- echo 正在處理: %%F
- %~dp0mpv --vo=gpu-next --screenshot-high-bit-depth=yes --autofit=100%%x720 ^
- --screenshot-png-compression=0 --no-border --pause --no-config --no-audio --screenshot-format=png ^
- --screenshot-template=!output_dir!%%x%%f_%%wH_%%wM_%%wS ^
- --script=%~dp0takeSsSequence.js %%F || (
- echo 處理失敗:%%F
- goto :error
- )
- )
- echo 所有視頻處理完成!
- pause
- exit /b 0
- :error
- echo 執行過程中發生錯誤
- pause
- exit /b 1
正在處理: Episode 01.mkv● Video--vid=1(hevc 1920x1080 25 fps) [default]○ Audio--aid=1(aac 2ch 48000 Hz) [default]● Subs --sid=1(subrip) [default]○ Subs --sid=2(subrip) [default][takeSsSequence] 1/3VO: [gpu-next] 1920x1080 yuv420pScreenshot: 'Episode 01_screenshotsEpisode 01.mkv_00_13_10.png'[takeSsSequence] 2/3Screenshot: 'Episode 01_screenshotsEpisode 01.mkv_00_23_57.png'[takeSsSequence] 3/3Screenshot: 'Episode 01_screenshotsEpisode 01.mkv_00_34_44.png'(Paused) V: 00:34:44 / 00:47:56 (72%)Exiting... (Quit)所有視頻處理完成!Press any key to continue . . .以上步驟都是手動完成,而今的想法是第一步,運行批處理+js混編獲取影片簡報.cmd完成后自動進行第二步第二步,運行time2sec.bat中set time_str=00:47:56:: 輸入時間,直接引用第一步,批處理+js混編獲取影片簡報.cmd輸出的影片時間長度值作為變量。完成后自動進行第三步第三步,運行factorize_optimized.batset target=2876 :: 要分解的整數,直接引用第二步,time2sec.bat總秒數值作為變量。完成后自動進行第四步第四步,takeSsSequence.js中 var N = 3;//直接引用第三步,factorize_optimized.bat因數分解結果相乘對數中數值差別最小且位于+之前較小/較大數值作為變量運行video_screenshot_auto.bat,期待能同takeSsSequence.js整合關于因數分解結果相乘對數中數值差別最小且位于+之前較小/較大數值示例中[因數分解結果 2876]=======================[降序排列]【2875+1】1【1437+1】2【718+1】4【3+1】719【1+1】1438【0+1】2876以下二組比較,數值差別都是719-4=715,即都算數值差別相同。以下二組和其余組別比較,【2875+1】1 與【0+1】2876 這二組數值差別皆為2875;【1437+1】2與【1+1】1438這二組數值差別皆為1436。2875,1436,715,715,1436,2875,這些數比較起來,居中715這二組數值差別最小。位于+之前較小/較大數值,數值差別最小(相同)這二組+之前數值比較,【718+1】4這一組中,+之前數值是718,【3+1】719這一組中,+之前數值是3,718和3比較,3較718小/718較3大。這里的因數分解結果相乘對數中數值差別最小且位于+之前較小/較大數值作為變量。 若作為選擇“/”的(開關)過于困難,但求能識別并選擇因數分解結果相乘對數中數值差別最小且位于+之前數值作為變量應該也就可以了。如它僅能識別并選擇【718+1】4中的718或僅能識別并選擇【3+1】719中的3,我們還是可以手動調整factorize_optimized.bat的升降序排列來配合它選擇,達到預期我想它識別并選擇因數分解結果相乘對數中數值差別最小且位于+之前較小/較大數值作為變量。【718+1】4【3+1】719故以上2組相對于其余組別,都算數值差別最小。位于+之前的數值,即截圖張數。3較小718較大。提取影片長度作為時間換算變量,換算出總秒數作為分解因數變量,分解出因數作為截圖數量變量。以上步驟都是在做從影片輸出圖片這一件事,請前輩們幫忙看看如何方能一氣呵成,讓過程銜接起來,解放雙手。以上代碼雖然有在ai的協力下細部修改過,但畢竟新白,粗糙不足還請前輩們指點進一步優化。仔細瀏覽過論壇發帖規則,覺得還是刪減下標題。正好也補充下內文,調整下字號大小。不過,怎么感覺好像越描越黑了

