انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: jackbil در 04 تیر 1395، 11:07 بظ
-
با سلام
میخواستم اگر کسی میتونه به بنده کمک کنه که این کد کمی گسترش پیدا کنه.
بلکه استفاده ای برای بنده و آموزشی برای دیگران به همراه داشته باشه.
#!/usr/bin/env bash
find . -iname "*.srt" | while read -r "fn"; do
grep -iH "can" "$fn"
done
برای مثال یه خروجی مرتب بده - توی ترمینال مرتب باشه برای مرور و توی نایل تکست هم به صورت مرتب نتیجه ذخیره بشه.
برای مثال
bonny and clyde
---------------
result n1
how are you today?
i'm fine thank you.
------------------
time : 1.08.32
------------------
result n2
how are you today?
i'm fine thank you.
------------------
time : 1.08.32
------------------
result n3
how are you today?
i'm fine thank you.
------------------
time : 1.08.32
------------------
یا اگر مرتب تر هم بشه بهتر - یا اگر خود شما هم چیزی سراغ دارید خیلی خوبه - فقط توجه کنید که دیگه وجود ویدیو الزامی نیست - تایم برای یه وقت کمکی - آیا امکانش وجود داره مثلا قسمت تایم بصورت یه لینک بشه که وقتی روش کلیک کنیم ویدیو پلیر از اونجای فیلم شروع به پخش کنه؟؟؟
-
فکر کنم دستورهای زیر کارت رو راه بندازند. فقط منظورت رو از مرتب کردن چیه؟ بر چه اساسی مرتب بشند؟
find . -iname "*.srt" | while read -r "fn"; while do
grep -i -B 3 "$fn"
done
-
ایدهٔ جالبی که دربارهٔ پخش ویدیو برابر کلمهٔ پیدا شده طرح کردی رو من نوشتم (:
۱-یک فایل 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'
-
کد اول ارور میده که
./script.sh: line 1: syntax error near unexpected token `do'
./script.sh: line 1: `find . -iname "*.srt" | while read -r "fn"; while do'
کد دوم رو هنوز تست نکردم
-
کد دوم این ارور رو میده
./srt_grep.py 'bear' 'ted.srt' | sed '/<no match>/d' | ./video_seeker.sh 'ted.mkv'
Traceback (most recent call last):
File "./srt_grep.py", line 6, in <module>
from srt import parse as srt_parse
ImportError: No module named 'srt'
-
pip install srt
(البته اگر دستور بالا رو بدون sudo اجرا کنید عمل نمیکند بنابراین پیشنهاد میشود از virtualenv استفاده کنید و بعد از ساخت یک محیط مجازی ماجول موردنظر رو نصب و اسکریپت رو اجرا کنید)
sudo apt install python3-virtualenv
virtualenv-3.4 env
source .env/bin/activate
pip install srt