انجمن‌های فارسی اوبونتو

جامعه کاربران => پروژه‌ها => نویسنده: moeinroid در 25 آذر 1395، 06:08 ب‌ظ

عنوان: اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: moeinroid در 25 آذر 1395، 06:08 ب‌ظ
سلام
اسکریپت Persian Subtitle Fixer رو امروز با بش نوشتم (با کمک از آموزش های آقای امیرصمیمی و جادی) که زیرنویس‌هاتون رو بصورت دسته‌جمعی تعمیر می‌کنه
لینک گیت‌هاب :‌ https://github.com/moeinroid/PersianSubtitleFixer
که زیرنویس های شما رو به UTF-8 تبدیل میکنه
برای اجرا کافیه اول بهش دسترسی اجرایی بدید با دستور زیر:
chmod +x PersianSubtitleFixer.shبعد با دستور زیر اجراش می‌کنیم :
./PersianSubtitleFixer.shدر مرحله اول شما باید نام پوشه رو انتخاب کنید که در مسیر خانه شما ایجاد میشه و زیرنویس های تبدیل شده در اون قرار می‌گیرند
بعد باید مسیر زیرنویس هاتون رو بدید (مسیر خود زیر نویس رو نه!)
بعد منتظر میمونید تا همه‌ی زیر نویس های موجود توی اون مسیر به UTF-8 تبدیل بشه
روزخوش
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: علیرضا احسانی در 25 آذر 1395، 07:57 ب‌ظ
دمت گرم کاربردیه.یه دوستی یه سایت برا همین کار درست کرده بود اونم خوبه
http://subtitlefixer.ir/  (http://subtitlefixer.ir/)
موفق باشی :)
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: amir2009 در 26 آذر 1395، 01:24 ق‌ظ
اینگونه فعالیتها خوبه.
فقط جهت اطلاع برنامه subtitle fixer دارای رابط گرافیکی qt4 چندسال پیش نوشته شده که منم ازون استفاده میکنم.امکانات خوبی داره و راحته.
اگه کسی بتونه رابط گرافیکی رو بهبود بده مثلا qt5 خیلی عالی میشه.
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: Ma$oud در 26 آذر 1395، 02:02 ب‌ظ
اینگونه فعالیتها خوبه.
فقط جهت اطلاع برنامه subtitle fixer دارای رابط گرافیکی qt4 چندسال پیش نوشته شده که منم ازون استفاده میکنم.امکانات خوبی داره و راحته.
اگه کسی بتونه رابط گرافیکی رو بهبود بده مثلا qt5 خیلی عالی میشه.

مثلا چه امکاناتی؟؟  ???
بگید شاید من بتونم بهبود ببخشم  ;D
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: ارباب! در 26 آذر 1395، 03:16 ب‌ظ
خیلی خوبه..
مثلا اگه تو منوی راست کلیک یه چیزی بیاد که تمام زیرنویس های انتخاب شده رو ببره به utf-8 خیلی خوب می شه (در همون فایل ها).. و قبلش یه بک آپ بگیره ازشون جهت احتیاط بهتره به نظرم..
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: Ma$oud در 27 آذر 1395، 01:27 ق‌ظ
خیلی خوبه..
مثلا اگه تو منوی راست کلیک یه چیزی بیاد که تمام زیرنویس های انتخاب شده رو ببره به utf-8 خیلی خوب می شه (در همون فایل ها).. و قبلش یه بک آپ بگیره ازشون جهت احتیاط بهتره به نظرم..

خواستم تاپیک جدید بزنم ولی موضوع یکیه دیگه (ولی خب پیشنهاد می کنم به پست اول اضافه بشه):

طبق چیزی که دوستمون گفت: تمام زیرنویس های انتخاب شده به utf-8 می بره و قبلش در یک فولدر بک آپ می گیره ازشون (واقعا ایده خیلی خوبی بود  :D)

فقط فایل پیوست شده رو با نام Convert to UTF8 در مسیر : $HOME/.local/share/nautilus/scripts/ کپی کنید و دسترسی اجرایی بهش بدید : chmod +x $HOME/.local/share/nautilus/scripts/Convert\ to\ UTF8 و تمام!

حالا روی زیرنویس(ها)ی مورد نظر کلیک راست کنید و از قسمت Scripts گزینه Convert to UTF8 رو بزنید!  :D
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: Sosha در 07 دی 1395، 02:56 ق‌ظ
دمتون گرم \\:D/
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: moeinroid در 16 دی 1395، 04:34 ب‌ظ
--نسخه جدید--
سلام
نسخه جدید اسکریپت رو توی گیت‌هاب قرار دادم.
تغییرات:
-امکان آدرس دهی و نام‌گذاری با آرگومان
-رفع مشکلات جزئی

برای این کار شما می‌تونید بصورت زیر عمل کنید:
./PersianSubtitleFixer [YOUR SUBTITLES LOCATION] [NAME OF FIXED SUBTITLES DIRECTORY IN YOUR HOME]
برای مثال اگر زیرنویس های شما در مسیر /home/name/video قرار داره و اسمی که برای پوشه زیرنویس‌های تعمیر شده می‌خواید بزاید fixed باشه به این صورت عمل می‌کنیم:
./PersianSubtitleFixer.sh "/home/name/video" "fixed"
پیشنهاد می‌کنم شماهم توی "" قرار بدید که به مشکل نخورید.
اگر هم که به این صورت نگید بهش ازتون سوال می‌کنه برای اسم و مسیر.
روزخوش
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: ارباب! در 16 دی 1395، 07:49 ب‌ظ
خیلی خوبه..
مثلا اگه تو منوی راست کلیک یه چیزی بیاد که تمام زیرنویس های انتخاب شده رو ببره به utf-8 خیلی خوب می شه (در همون فایل ها).. و قبلش یه بک آپ بگیره ازشون جهت احتیاط بهتره به نظرم..

خواستم تاپیک جدید بزنم ولی موضوع یکیه دیگه (ولی خب پیشنهاد می کنم به پست اول اضافه بشه):

طبق چیزی که دوستمون گفت: تمام زیرنویس های انتخاب شده به utf-8 می بره و قبلش در یک فولدر بک آپ می گیره ازشون (واقعا ایده خیلی خوبی بود  :D)

فقط فایل پیوست شده رو با نام Convert to UTF8 در مسیر : $HOME/.local/share/nautilus/scripts/ کپی کنید و دسترسی اجرایی بهش بدید : chmod +x $HOME/.local/share/nautilus/scripts/Convert\ to\ UTF8 و تمام!

حالا روی زیرنویس(ها)ی مورد نظر کلیک راست کنید و از قسمت Scripts گزینه Convert to UTF8 رو بزنید!  :D

سلام..
ممنون که این ایده رو عملی کردید.. یه تغییراتی دادم:
#!/bin/bash

# ~/.local/share/nautilus/scripts/

IFS=$'\t\n'

BACK_DIR=".subtitle.backup"       
if [ ! -d "$BACK_DIR" ]; then
    mkdir ./$BACK_DIR
fi

for fileName in `echo $*`; do

    encoding=`file -b "$fileName" | awk {'print $1'}`

    if cp "$fileName" "$BACK_DIR"; then
if [ "$encoding" == "Little-endian" ]; then
iconv -f UTF-16LE -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "Non-ISO" ]; then
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "ISO-8859" ]; then     
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
fi
    fi
done
چک کردن برای ISO-8859 رو بهش اضافه کردم.. برای من بدون این کار نمی کرد..
یه مشکل دیگه هم در convert کردن فایل هایی که تو نامشون space هست وجود داشت.. که اون رو حل کردم.. در عوض یه مشکل دیگه به وجود اومد.. و اونم این که حالا فقط یه فایل رو می شه convert کرد و چند تا فایل رو به صورت همزمان نمی شه..:
cp: cannot stat 'b (4th copy).srt b (5th copy).srt b (another copy).srt b (another copy)d.srt': No such file or directoryراه حل درستش چیه..؟ کسی ایده ای به ذهنش می رسه..؟

الان بخوام بهتر توضیح بدم:
در اسکریپت قبلی اگه یه فایل تو نامش space بود از محل space تقسیم می شد اسم و به مشکل می خوردیم..
پس تو اسکریپت جدید برای این که این تقسیم شدنه اتفاق نیافته این متغیر رو از این مقدار:
IFS=$' \t\n'به این مقدار تغییر دادم:
IFS=$'\t\n'ولی خوب این کار خودش یه مشکل دیگه رو ایجاد می کنه.. که پیغامش خطای cannot stat رو بالا گذاشته بودم..
برای این که متوجه بشید اون پیغام خط از کجا می آد می تونید nautilus رو این جوری اجرا کنید..:
nautilus -q
nautilus --no-desktop
و پنجره رو نبندید تا پیغام ها رو بخونید..
بعد که اسکریپت رو با انتخاب این چند فایل اجرا می کنید:
b (4th copy).srt
b (5th copy).srt
b (another copy).srt
b (another copy)d.srt
اون پیغام می آد..
چون آرگومان ها به این شکل با space دریافت شده:
b (4th copy).srt b (5th copy).srt b (another copy).srt b (another copy)d.srt
که خوب الان با تنظیم کردن اون IFS گفتیم دیگه از محل space ها نام فایل رو جدا نکن که حداقل واسه فایل هایی که نامشون space داشته مشکلی ایجاد نشه.. ولی خوب الان این خط بالا کلش یه نام فایل در نظر گرفته می شه..
حالا نکته اینه که اصن برفرض که ما می خواستیم از محل space ها جدا کنیم.. از کجا معلوم که از کدوم محل ها باید جدا کنیم..
مثلا احتمالش هست که b دوم آخرین کاراکتر فایل اول بوده باشه نه اولین کاراکتر فایل دوم..
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: ارباب! در 16 دی 1395، 07:52 ب‌ظ
--نسخه جدید--
سلام
نسخه جدید اسکریپت رو توی گیت‌هاب قرار دادم.
تغییرات:
-امکان آدرس دهی و نام‌گذاری با آرگومان
-رفع مشکلات جزئی

برای این کار شما می‌تونید بصورت زیر عمل کنید:
./PersianSubtitleFixer [YOUR SUBTITLES LOCATION] [NAME OF FIXED SUBTITLES DIRECTORY IN YOUR HOME]
برای مثال اگر زیرنویس های شما در مسیر /home/name/video قرار داره و اسمی که برای پوشه زیرنویس‌های تعمیر شده می‌خواید بزاید fixed باشه به این صورت عمل می‌کنیم:
./PersianSubtitleFixer.sh "/home/name/video" "fixed"
پیشنهاد می‌کنم شماهم توی "" قرار بدید که به مشکل نخورید.
اگر هم که به این صورت نگید بهش ازتون سوال می‌کنه برای اسم و مسیر.
روزخوش

سلام..
خیلی ممنون.. کدتون امکانات جالبی داره.. ولی اگه بشه این قابلیت استفاده توسط راست کلیک رو هم براش طراحی کرد خیلی خوب می شه.. مخصوصا که فقط برای nautilus نباشه و برای یه سری فایل منیجر های دیگه هم بشه..
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: Ma$oud در 16 دی 1395، 08:03 ب‌ظ
--نسخه جدید--
سلام
نسخه جدید اسکریپت رو توی گیت‌هاب قرار دادم.
تغییرات:
-امکان آدرس دهی و نام‌گذاری با آرگومان
-رفع مشکلات جزئی

برای این کار شما می‌تونید بصورت زیر عمل کنید:
./PersianSubtitleFixer [YOUR SUBTITLES LOCATION] [NAME OF FIXED SUBTITLES DIRECTORY IN YOUR HOME]
برای مثال اگر زیرنویس های شما در مسیر /home/name/video قرار داره و اسمی که برای پوشه زیرنویس‌های تعمیر شده می‌خواید بزاید fixed باشه به این صورت عمل می‌کنیم:
./PersianSubtitleFixer.sh "/home/name/video" "fixed"
پیشنهاد می‌کنم شماهم توی "" قرار بدید که به مشکل نخورید.
اگر هم که به این صورت نگید بهش ازتون سوال می‌کنه برای اسم و مسیر.
روزخوش

خط ۳۶، ۳۷
به جای else و if می تونی از elif استفاده کنی  ;)
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: Ma$oud در 16 دی 1395، 09:50 ب‌ظ
خیلی خوبه..
مثلا اگه تو منوی راست کلیک یه چیزی بیاد که تمام زیرنویس های انتخاب شده رو ببره به utf-8 خیلی خوب می شه (در همون فایل ها).. و قبلش یه بک آپ بگیره ازشون جهت احتیاط بهتره به نظرم..

خواستم تاپیک جدید بزنم ولی موضوع یکیه دیگه (ولی خب پیشنهاد می کنم به پست اول اضافه بشه):

طبق چیزی که دوستمون گفت: تمام زیرنویس های انتخاب شده به utf-8 می بره و قبلش در یک فولدر بک آپ می گیره ازشون (واقعا ایده خیلی خوبی بود  :D)

فقط فایل پیوست شده رو با نام Convert to UTF8 در مسیر : $HOME/.local/share/nautilus/scripts/ کپی کنید و دسترسی اجرایی بهش بدید : chmod +x $HOME/.local/share/nautilus/scripts/Convert\ to\ UTF8 و تمام!

حالا روی زیرنویس(ها)ی مورد نظر کلیک راست کنید و از قسمت Scripts گزینه Convert to UTF8 رو بزنید!  :D

سلام..
ممنون که این ایده رو عملی کردید.. یه تغییراتی دادم:
#!/bin/bash

# ~/.local/share/nautilus/scripts/

IFS=$'\t\n'

BACK_DIR=".subtitle.backup"       
if [ ! -d "$BACK_DIR" ]; then
    mkdir ./$BACK_DIR
fi

for fileName in `echo $*`; do

    encoding=`file -b "$fileName" | awk {'print $1'}`

    if cp "$fileName" "$BACK_DIR"; then
if [ "$encoding" == "Little-endian" ]; then
iconv -f UTF-16LE -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "Non-ISO" ]; then
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "ISO-8859" ]; then     
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
fi
    fi
done
چک کردن برای ISO-8859 رو بهش اضافه کردم.. برای من بدون این کار نمی کرد..
یه مشکل دیگه هم در convert کردن فایل هایی که تو نامشون space هست وجود داشت.. که اون رو حل کردم.. در عوض یه مشکل دیگه به وجود اومد.. و اونم این که حالا فقط یه فایل رو می شه convert کرد و چند تا فایل رو به صورت همزمان نمی شه..:
cp: cannot stat 'b (4th copy).srt b (5th copy).srt b (another copy).srt b (another copy)d.srt': No such file or directoryراه حل درستش چیه..؟ کسی ایده ای به ذهنش می رسه..؟

الان بخوام بهتر توضیح بدم:
در اسکریپت قبلی اگه یه فایل تو نامش space بود از محل space تقسیم می شد اسم و به مشکل می خوردیم..
پس تو اسکریپت جدید برای این که این تقسیم شدنه اتفاق نیافته این متغیر رو از این مقدار:
IFS=$' \t\n'به این مقدار تغییر دادم:
IFS=$'\t\n'ولی خوب این کار خودش یه مشکل دیگه رو ایجاد می کنه.. که پیغامش خطای cannot stat رو بالا گذاشته بودم..
برای این که متوجه بشید اون پیغام خط از کجا می آد می تونید nautilus رو این جوری اجرا کنید..:
nautilus -q
nautilus --no-desktop
و پنجره رو نبندید تا پیغام ها رو بخونید..
بعد که اسکریپت رو با انتخاب این چند فایل اجرا می کنید:
b (4th copy).srt
b (5th copy).srt
b (another copy).srt
b (another copy)d.srt
اون پیغام می آد..
چون آرگومان ها به این شکل با space دریافت شده:
b (4th copy).srt b (5th copy).srt b (another copy).srt b (another copy)d.srt
که خوب الان با تنظیم کردن اون IFS گفتیم دیگه از محل space ها نام فایل رو جدا نکن که حداقل واسه فایل هایی که نامشون space داشته مشکلی ایجاد نشه.. ولی خوب الان این خط بالا کلش یه نام فایل در نظر گرفته می شه..
حالا نکته اینه که اصن برفرض که ما می خواستیم از محل space ها جدا کنیم.. از کجا معلوم که از کدوم محل ها باید جدا کنیم..
مثلا احتمالش هست که b دوم آخرین کاراکتر فایل اول بوده باشه نه اولین کاراکتر فایل دوم..

راه حله استانداردی نیست بنظرم ولی میتونی با sed بگی جاهایی که srt و بعدش space رو به \n تغییر بده
اما چون هدف اجرا روی فایلای srt هست نباید مشکلی پیش بیاد  ;)
عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: ارباب! در 17 دی 1395، 02:55 ب‌ظ
سلام دوستان!
مشکل convert کردن چند فایل در nautilus به صورت هم زمان هم حل شد:

#!/bin/bash

# ~/.local/share/nautilus/scripts/

IFS=$'\t\n'

BACK_DIR=".subtitle.backup"       
if [ ! -d "$BACK_DIR" ]; then
    mkdir ./$BACK_DIR
fi

for filePath in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
fileName=$(basename "$filePath")

    encoding=`file -b "$fileName" | awk {'print $1'}`

    if cp "$fileName" "$BACK_DIR"; then
if [ "$encoding" == "Little-endian" ]; then
iconv -f UTF-16LE -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "Non-ISO" ]; then
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "ISO-8859" ]; then     
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
fi
    fi
done

الان وقتی چند فایل (local) رو در nautilus انتخاب می کنید
و راست کلیک می کنید و از منوی Scripts این script رو برای اجرا انتخاب می کنید
نه تنها می تونه تو نام فایل ها space باشه
بلکه به دلیل این که script می آد path ها رو به صورت جدا شده توسط newline دریافت می کنه
ابهامی پیش نمی آد و می تونه همه رو convert کنه..
که مسیر این فایل ها در NAUTILUS_SCRIPT_SELECTED_FILE_PATHS قرار داره..

عنوان: پاسخ : اسکریپت تعمیر زیرنویس های فارسی
ارسال شده توسط: افشین در 20 اسفند 1395، 11:59 ق‌ظ
ممکن است اسکرپیت را با میز کار Cinnamon هم سازگار کنید؟
متشکرم.