ایدهٔ جالبی که دربارهٔ پخش ویدیو برابر کلمهٔ پیدا شده طرح کردی رو من نوشتم (:
۱-یک فایل SRT رو بخون (python)
۲-زمانبندی الگوی موردنظر رو پیدا کن (python)
۳-زایدها رو از بین ببر (sed)
۴-هربار ویدیو رو در زمان آغاز و پایان مشخص پخش کن (bash)
اسکریپت بش برای اجرای ویدیو با پخشکننده mpv (با mplayer فقط ss- درست کار میکنه):
#!/usr/bin/env bash
# filename: video_seeker.sh
readonly filename="$1"
while read -r "str"; do
timecode=(${str//,/ })
mpv --start="${timecode[0]}" --end="${timecode[1]}" "$filename" >/dev/null 2>&1
done
اکسریپت پایتون برای تجزیه فایلهای SRT و جستجوی با استفاده از عبارتهای باقاعده:
#!/usr/bin/env python3
# filename: srt_grep.py
import sys
import re
from srt import parse as srt_parse
from srt import Subtitle
from datetime import timedelta
class NoSubtitle(Subtitle):
TD = timedelta(seconds=0)
def __init__(self):
return super().__init__(-1, self.TD, self.TD, '')
def srt_open(filename):
try:
return srt_parse(open(filename).read())
except FileNotFoundError:
print("We couldn't find '{}'".format(filename))
except PermissionError:
print("You don't seem to have the rights to do that")
except:
print('An error undefined has occurred')
return [NoSubtitle()]
def srt_search(pattern, subtitle):
if re.search(pattern, subtitle.content, re.IGNORECASE):
return subtitle
else:
return NoSubtitle()
def srt_format(subtitle):
if subtitle.start.seconds == 0:
return '<no match>'
else:
return "{},{}".format(subtitle.start, subtitle.end)
if __name__ == '__main__':
filename = str(sys.argv[2])
pattern = str(sys.argv[1])
for subtitle in srt_open(filename):
print(srt_format(srt_search(pattern, subtitle)))
روش استفاده:
$ ./srt_grep.py 'butterfly effect' 'mr_nobody.srt' | sed '/<no match>/d' | ./video_seeker.sh 'mr_nobody.mkv'