یکی از خوبیای گنو/لینوکس اینه که هر کاری بخوای میتونی توش انجام بدی و برای انجامش حتما چندین راه وجود داره.
چند روز پیش میخواستم یه فیلم نگاه کنم و رفتم زیرنویسشو دانلود کردم که چشتون روز بد نبینه، دیدم فایلش خرچنگقورباغهس. رفتم یکی دیگه دانلود کردم و دیدم بازم همون مشکل. پس دست به کار شدم و یه سرچ تو گوگل کردم و با دستور iconv آشنا شدم. و با یه خط دستور به راحتی فایل زیرنویسو درستش کردم. خیلی خوب بود.
بنابراین تصمیم گرفتم این دستورو یه جوری درستش کنم که دوستامم بتونن ازش استفاده کنن. این شد که دست به دامن پایتون شدم و اسکریپت زیرو نوشتم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import sys, os inputFile = sys.argv[1] outputFile = sys.argv[2] if os.path.isfile(inputFile): f = open(inputFile, 'rb') content = unicode(f.read(), 'windows-1256') f.close() f = open(outputFile, 'wb') f.write(content.encode('utf-8')) f.close() print "your file encodeing has been changed :)))" else: print "your input file is not exists!!!!! :(" |
طرز کار:
ابتدا یه فایل خالی تو هر کجای کامپیوتر که دلتون خواست ایجاد کنید و اسمشو هرچی میخواین بذارین ولی با پسوند .py ذخیرهش کنین.( من ترجیح میدم تو دسکتاپم باشه و اسمشو گذاشتم subFix.py)
بعد توی ترمینال با دستور زیر برنامه رو اجرا کنید:
1 |
python subFix.py input_subtitle_file.srt output_subtitle_file.srt |
اگه سوالی داشتین در خدمتم. ضمنا انجام همین عملیات با دستور iconv به شکل زیره:
1 |
iconv -f WINDOWS-1256 -t UTF-8 input_file.srt -o output_file.srt |
۱. در تاپیک زیر اطلاعات مفیدی برای بهبود کارایی برنامه ات پیدا می کنی:
http://www.linuxquestions.org/questions/programming-9/%7Bconverting-the-encoding%7D-avoiding-to-use-the-name-of-a-file-more-the-one-time-4175513944/
۲. کاری که برنامه ات باید بکنه اینه که وقتی در یک پوشه اجرا میشه، اتوماتیک همه srtها رو بگیره و در صورت نیاز به تغییر یونیکد، این کار رو اتوماتیک انجام بده و روی خود فایل ذخیره کنه. چرا؟چون معمولا برای یک فیلم باید ۱۰تایی زیرنویس رو دانلود و چک کنیم تا یکی سینک باشه!
۳. اگر فایل subFix.py رو در پوشه ای به نام bin در خانه بذاری، و دستور استاندارد فراخوانی پایتون توسط بش رو اول فایلت بذاری، دیگه نیازی نیست از python برای فراخونی اش استفاده کنی. اسم برنامه رو که بزنی کافی میشه.
ممنون بابت نظرتون.
حتمن اگه وقت کنم تغییرش می دم. چه بهتر بود که خودتون کدو بهینه میکردید و میذاشتید اینجا.