2015-12-24 1 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. Я думаю, что мой ответ разрешает вашу проблему! Теперь это еще один вопрос для решения этой проблемы в Юникоде. – SachaDee

+0

Прошу прощения, я полностью забыл про Юникод, в любом случае, большое спасибо за вашу помощь! – user5715027