2015-12-24 41 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

相关问题