2013-12-17 155 views
0

我有成千上萬的子文件夾,每個都包含一個視頻文件的文件夾,以及一個字幕文件,像這樣:批處理腳本 - 從文本文件中提取值

screenshot of Windows explorer view

每個這些文本文件(.srt)是用於在每個視頻的開頭和結尾顯示文件名(無擴展名)的字幕文件。例如,二軌的內容 - 跟蹤Two.srt是:

1 
00:00:00,500 --> 00:00:03,500 
Track Two - Track Two 

2 
00:00:00,000 --> 00:00:00,000 
Track Two - Track Two 

由於一些嚴重StackHeads,我已經能夠通過在運行以下批處理腳本來自動生成文本文件的創建。 /媒體/父目錄:

for /R %%f in (*.flv *.mp4) do (
echo(1 
echo(00:00:00,500 --^> 00:00:03,500 
echo(%%~nf 
echo(
echo(2 
echo(00:00:00,000 --^> 00:00:00,000 
echo(%%~nf 
) > "%%~dpnf.srt" 

現在我已經剩下要做的就是更新第六行的每個.srt文件,以使其顯示三秒鐘的文件名就在視頻結束之前。理想情況下,第一個數值將在視頻結束前3.5秒,第二個數值將在結束前0.5秒..並使其變得更加困難,必須使用俄羅斯時間碼.srt文件使用。

例如,如果第二軌道 - 軌道二是01:36長,第二軌道六號線 - 軌道Two.srt應改爲:

00:01:32,500 --> 00:01:35,500 

我可以生成所有的文本列表視頻的長度,這樣的:

image

..和,只要我保持嚴格編號的文件夾名稱,他們就會每次都排隊。

是否有任何方法從文本文件times.txt中拉出視頻長度(假設順序是完美的),並更新俄文時間碼格式中每個.srt文件的第6行,以使其顯示標題之前到最後它引用的視頻文件?

任何幫助都非常感謝! 另外..再次感謝dbenham,MC ND,payeli爲您提供幫助!你是最好的!

+0

將知道你是否可以單獨計算'第二軌道的長度非常有用的 - Track Two「或者是否可以製作像'0:04:56 Track Two - Track Two'這樣的文本文件。 – Magoo

+0

我可以做得更好 - 下面是顯示所有可用數據的完整.csv文件:http:// sentpace .com/file/33czf3(list.csv) - 我使用一個名爲PlayTime的程序來生成.csv文件。 – user3106266

回答

1
@ECHO OFF 
SETLOCAL 
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /f "skip=1tokens=2,3,11delims=," %%a IN (list.csv) DO (
SET ttrack=%%a 
SET videoname=%%~nb 
set to_file="%%c\%%~nb.srt" 
CALL :process 
) 
GOTO :EOF 
:process 
FOR /f "tokens=1-3delims=:" %%r IN ("%ttrack%") DO (
SET /a hr=10%%r 
SET /a mi=1%%s 
SET /a se=1%%t 
) 
CALL :subs 1 
SET endtime=%hr:~-2%:%mi:~-2%:%se:~-2%,500 
CALL :subs 3 
SET starttime=%hr:~-2%:%mi:~-2%:%se:~-2%,500 

echo(1 
echo(00:00:00,500 --^> 00:00:03,500 
echo(!videoname! 
echo(
echo(2 
echo(%starttime% --^> %endtime% 
echo(!videoname! 
ECHO(sent to %to_file% 
GOTO :eof 
:: 
:: subtract %1 seconds from hr,mi,se 
:: 
:subs 
SET /a se-=%1 
IF %se% geq 100 GOTO :EOF 
SET /a se+=60 
SET /a mi-=1 
IF %mi% geq 100 GOTO :EOF 
SET /a mi+=60 
SET /a hr-=1 
GOTO :eof 

不難。

所有你需要做的,如果這似乎是恰當的是改變

echo(1 
... 
echo(%videoname% 
ECHO(sent to %to_file% 

(
echo(1 
... 
echo(%videoname% 
)>%to_file% 
+0

你先生有一些認真的人才..我要趕緊下班回家,儘快嘗試這個,我會回報....我不能感謝你足夠 – user3106266

+0

OKAY--這讓我有99%! !雖然有一些小問題出現..所有的.srt文件都在父文件夾中創建,而不是視頻所在的子文件夾。另外,我將'set to_file ='%%〜dpnc.srt''更改爲...「%%〜nb.srt」以使.srt文件與文件名相匹配,而不是編號的子目錄。我甚至嘗試過...「%%〜dpnb.srt」,認爲這將創造。srt文件在子文件夾中,但沒有運氣。最後..它不能很好地處理特殊字符,並且當它碰到像'或'這樣的字符時就會中斷操作。感謝所有的幫助! – user3106266

+0

改變了一點。 echo'!videoname!'來解決'&'問題,'%%〜dpc %%〜nb.srt'應該從'%% c'中抓取目錄/路徑,但是從'%% b'取得目錄/路徑! – Magoo

相關問題