首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理以创建具有正确时间的视频.srt字幕

批处理以创建具有正确时间的视频.srt字幕
EN

Stack Overflow用户
提问于 2015-12-24 21:05:19
回答 1查看 770关注 0票数 3

哦,天哪!我甚至不知道该从什么开始),所以,我有一个文件夹,里面有很多视频。我需要的是创建带有这些视频名称的字幕,同时还要考虑它们的长度,以.srt格式创建字幕。

我已经查过一些信息并复制了一些代码。

代码语言:javascript
复制
@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中得到了这个

代码语言:javascript
复制
 videoname1
 videoname2
 videoname3

我需要的是让它们看起来像这样(当然,最后创建带有结果的.srt文件也是如此)。

代码语言:javascript
复制
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

希望我有了一切,请帮帮忙!提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-25 13:57:08

使用VBS获取每个视频文件的视频长度(使用Folder.GetDetailsOf法)sum获取.srt文件中计时器的长度(使用FormatDateTime函数 )。

此脚本获取result.txt文件中视频的名称(因此您必须在此BAT中包含您的代码,或者在此之前运行生成它的bat )。

我已经将它包含在我的代码中了,但是以前使用过REM。因此,如果需要,请移除REMs

结果显示在CMD上,并写入文件Output.srt(在BAT文件的同一个目录中)。

BuildSrt.bat

代码语言:javascript
复制
@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

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34457893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档