I am LAZY bones? AN ancient AND boring SITE

2008年 12月 26日 的归档

调srt字幕时间的小脚本

首先,我知道mplayer和很多其他播放都有个类似 -subdelay的开关,可以实现字幕和电影的时间调整。
此脚本和subdelay又部分功能交叉,但是某些特殊的时候,还是用个这个脚本方便。
我当时的是电影一个avi文件,但srt字幕却只找到分CD1和CD2的那种,前半段电影的时间和CD1对上了,但是后半段就没字幕了。
为了解决这个文件,就写了这个脚本,名为 adjsrt.sh
我当时执行了 ./adjsrt.sh 3061 cd2.srt >> cd1.srt 就把第二个字幕的时间整体加上3061秒,然后加在了第一个字幕的后面了,哈哈。
脚本如下:

#!/bin/sh
offset=$1
shift
awk -v offset=$offset '
BEGIN{
	FS="[ :,]+"
}
/^[0-9][0-9]:[0-9]*/ {
	ST=toT($1,$2,$3)+offset;
	ST1=int(ST/3600);
	ST2=int((ST-ST1*3600)/60);
	ST3=ST%60;
	ET=toT($6,$7,$8)+offset;
	ET1=int(ET/3600);
	ET2=int((ET-ET1*3600)/60);
	ET3=ET%60;
	printf("%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n",
		ST1,ST2,ST3,$4,ET1,ET2,ET3,$9);
}
$0 !~ /^[0-9][0-9]:[0-9]*/ {
	print $0
}
 
function toT( hour, min , sec ){
	return hour*3600 + min*60 + sec
}
' $*