2015-12-24 39 views
3

哦,男孩!我甚至不知道該怎麼開始)所以,我有一個包含很多視頻的文件夾。我需要的是創建帶有這些視頻名稱的字幕,這些視頻的名稱也以它們的長度來創建.srt格式的字幕。批量創建視頻.srt與正確的時間字幕

我已經查找一些信息,並複製了一些代碼

@echo off 
set dirpath=%1 
dir C:\FolderwithVideos /O:S /b /-p /o:gn > "C:\result.txt" 
call replacer.bat result.txt ".mp4" "" 
exit 

結果我的Result.txt得到這個

videoname1 
videoname2 
videoname3 

我需要的是讓他們看起來像這樣(結果創建.srt文件當然最後。)

1 
00:00:0,000 --> 00:00:25,000 
videoname1 

2 
00:00:25,000 --> 00:00:35,000 
videoname2 

3 
00:00:35,000 --> 00:00:55,000 
videoname3 

希望我得到了一切,請 幫幫我!提前致謝!

+0

每個字幕需要多長時間?你的例子中它們的持續時間會有所不同 – SomethingDark

+0

那麼,每個視頻都有不同的持續時間,所以首先需要確定文件夾中每個視頻的持續時間,然後創建後續時間線。所以我想每一段代碼應該檢查每個視頻的長度 – user5715027

+0

也許[這個答案](http://stackoverflow.com/a/31864121/1683264)會給你一些想法? – rojo

回答

2

使用VBS讓每個視頻文件的視頻長度(使用Folder.GetDetailsOf method)sum.srt文件定時器長度(使用FormatDateTime Function)

這個腳本在結果得到的視頻名稱.txt文件(所以你必須包括你的代碼在這個BAT或運行蝙蝠,產生它之前。

我已經包括在我的代碼,但與以前REM。因此,如果需要刪除REMs

結果顯示在CMD和文件Output.srt以書面形式(在BAT文件同一目錄)

BuildSrt.bat

@echo off&cls 

::The Path of your Videos files 

set "$VideoPath=C:\FolderwithVideos" 

::If you want your Code in this BAT remove the REMs Below : 

rem dir "%$VideoPath%" /O:S /b /-p /o:gn > "C:\result.txt" 
rem call replacer.bat result.txt ".mp4" "" 

setlocal enabledelayedexpansion 
set /a $Count=1 
set "$Timer=00:00:00" 


(for /f "delims=" %%a in (result.txt) do (
    call:getVideolength "%%a.mp4" 
    for /f "delims=" %%x in ('cscript //nologo getvideolength.vbs') do (
     call:SumTime !$Timer! %%x 
     for /f "delims=" %%y in ('cscript //nologo SumTime.vbs') do set "$NewTimer=%%y" 
     echo !$Count! 
     echo !$Timer!,000 --^> !$NewTimer!,000 
     echo %%a 
     Set $Timer=!$NewTimer! 
) 
    set /a $Count+=1 
))>Output.srt 

echo Done !!! 
type Output.srt 
pause 
exit/b 

:GetVideoLength 
(echo dim objShell 
echo dim objFolder 
echo dim objFolderItem 
echo set objShell = CreateObject("shell.application"^) 
echo set objFolder = objShell.NameSpace("%$videoPath%"^) 
echo set objFolderItem = objFolder.ParseName(%1^) 
echo dim objInfo 
echo objInfo = objFolder.GetDetailsOf(objFolderItem, 27^) 
echo wscript.echo objinfo)>GetVideoLength.vbs 
exit/b 


:SumTime 
echo wscript.echo FormatDateTime(CDate("%1"^) + CDate("%2"^),3^) >SumTime.vbs 
exit/b 

這將創建一個文件Output.srt這樣的:

1 
00:00:00,000 --> 01:28:28,000 
Film1 
2 
01:28:28,000 --> 02:49:39,000 
Film2 
3 
02:49:39,000 --> 04:45:25,000 
Film3 
+0

它適用於以英文命名的視頻文件,如果它的名稱中包含任何類型的符號(如☺或♪♣),或者它的語言是其他語言,則會顯示Microsoft VBScript錯誤。 – user5715027

+2

SO是英文論壇!在你的問題中,我不能看到你將使用unicode文件名的任何地方。我想我的答案可以解決你的問題!現在它是解決這個unicode問題的另一個問題。 – SachaDee

+0

對不起,我完全忘記了unicode,反正,非常感謝你的幫助! – user5715027

相關問題