我有一个包含数千个子文件夹的文件夹,每个文件夹包含一个视频文件和一个字幕文件,如下所示:

每个文本文件(.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,通过在./media/父目录中运行以下批处理脚本,我能够自动创建文本文件:
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文件的第6行,使其在视频结束前显示文件名3秒。理想情况下,第一个数值是视频结束之前的3.5秒,第二个数值是结束前的.5秒。为了使它更难,它必须在俄罗斯时间码.srt文件中使用。
例如,如果双轨2的长度为01:36,则双轨Two.srt的第6行应为:
00:01:32,500 --> 00:01:35,500我可以生成所有视频长度的文本列表,如下所示:

..and只要我保持文件夹名严格编号,它们每次都会排队。
是否有任何方法从文本文件times.txt中提取视频长度(假设顺序是完美的),并以俄文timecode格式更新每个.srt文件的第6行,使其在其引用的视频文件结束前显示标题?
任何帮助都是非常感谢的!!还有..。再次感谢dbenham,MC ND,payeli之前的帮助!!你是最棒的!
发布于 2013-12-17 08:07:57
@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%https://stackoverflow.com/questions/20625099
复制相似问题