چگونه در لینوکس یک تصویر متحرک درست کنیم؟ (قسمت دوم)

خب، توی قسمت اول توضیح دادیم که چه شکلی با ابزارهای مختلفی مثل ImageMagick، ffmpeg و GIMP میشه تصویر متحرک با فرمت gif درست کرد.

اما gif بهترین انتخاب نیست. فرمت gif بسیار قدیمی هست و رنگ‌های زیادی رو پشتیبانی نمی‌کنه، بسیار سنگین هست و پروسه می‌گیره و از همه بدتر، حجم بسیار زیادی می‌گیره.

گیف قبلی که ۲ ثانیه و ۲۵ صدم ثانیه بود و تقریبا ۵۰ فرم شده بود، در بهترین حالت با کم‌ترین حجم نزدیک به ۱.۵ مگابایت شده بود. این عدد هرچند زیاد نیست ولی خب بهتر از این هم میشه.

اینجاست که می‌خوایم از فرمت webm به جای gif استفاده کنیم. سرعت بیشتر، محاسبه‌ی کمتر و از همه مهم‌تر، حجم بسیار کمتر از مزیت‌های این فرمت نسبت به gif هست. اما این که چرا هنوز همه از webm استفاده نمی‌کنن به خاطر پشتیبانی نشدنش توی مرورگرهای قدیمی و IE هست.

خب من اینجا خروجی gif قبلیم رو سعی می‌کنم به webm تبدیل کنم تا تفاوت رو ببینین، باز هم از ابزار ffmpeg استفاده می‌کنیم:

ffmpeg -i in.gif out.webm

که out.gif ورودی هست و نتیجه توی out.webm ذخیره میشه.  ۱.۵ مگابایت حجم تبدیل شد به ۸۰ کیلوبایت، بیش از ۱۸ برابر کاهش حجم. البته کیفیت عالی نیست.

حالا با چند تا آپشن این خروجی رو بهتر می‌کنیم.

ffmpeg -i in.gif -b:v 600K -qmin 0 -qmax 50 -crf 5 out.webm

-b:v با این آپشن bitrate تصویرمون رو تعیین می‌کنیم.  600K به نظر کیفیت قابل قبولی رو برای ما برمی‌گردونه.

-qmin و -qmax هم بازه‌ی VBR رو تعیین میکنن. که من ایده‌ی خاصی ندارم چیه راستش!

-crf که Constant Rate Factor هست و معمولا بین بازه ۰ تا ۵۰ ست و هر چی کمتر باشه کیفیت بیشتره.

خروجی ۲۰۰ کیلوبایت شد که باز هم خیلی از ۱.۵ مگابایت بهتره، ffmpeg یه ابزار خیلی قدرتمنده که چندین صفحه man داره. مطمئنن بهتر از این هم میشه خروجی گرفت:

همچنین قسمت اول این پست رو در «چگونه در لینوکس یک تصویر متحرک درست کنیم؟» بخونید.

چگونه در لینوکس یک تصویر متحرک درست کنیم؟

خب اولین ایده‌ای که به ذهن می‌رسه، gif هست. برای درست کردن گیف روش‌های مختلفی هست.

راه حل گرافیکی

برای راه حل گرافیکی از نرم‌افزار GIMP استفاده می‌کنیم. بدون هیچ احتیاج به پلاگین خاصی فقط کافیه که توی فایلی که درست کردیم به ازای هر فریم یک لایه بزاریم و انتهای اسم اون لایه به صورت “Layer (250ms)” مدت زمان نمایش لایه رو تعیین کنیم. برای پیش‌نمایش این گیف میتونین از Filters > Animation > Playback گیف رو نمایش بدین.

حالا کافیه موقع ذخیره‌سازی به صورت gif ذخیره کنیم.

خروجی به صورت gif

خروجی به صورت gif

تنها نکته‌ای که هست اینه که حتما تیک گزینه‌ی as animation رو بزنین.

Loop forever: اگه این گزینه رو زده باشین گیف متوقف نمیشه.

راه حل خط فرمان

خب حالا اگه یه تعداد عکس داشته باشیم که بخوایم گیف بشن از ImageMagick استفاده می‌کنیم. با استفاده از دستور convert و چند تا آپشن ساده عکس متحرک ما تولید میشه:

convert -delay 50 frame1.jpg -delay 100 frame2.jpg -delay 150 frame3.jpg -loop 0 -pause 200 animated.gif

delay: قبل از هر عکس می‌تونیم از این آپشن استفاده کنیم تا وقفه ایجاد کنیم. عددها به میلی‌ثانیه هستن.

loop: بعد که همه‌ی فریم‌ها رو گذاشتیم، با آپشن loop میگیم که چند بار تکرار بشه. 0 به معنی بی‌نهایت هست.

pause: این آپشن هم میگه با هر بار چرخش چند میلی‌ثانیه صبر کنه.

و در آخر هم اسم فایل خروجی رو می‌نویسیم. اگه تعداد عکس‌ها هم زیاد هستن می‌تونیم از *.jpg استفاده کنیم تا تمام عکس‌ها رو پوشش بده.

حالا اگه ما یه ویدیو داشته باشیم که بخوایم چند ثانیه‌اش رو گیف کنیم از ابزار ffmpeg استفاده می‌کنیم.

ffmpeg -t 2 -ss 00:02:35 -i video.mp4 animated.gif

که ساختار ساده‌ای داره، این دستور، از زمان ۰۲:۳۵ به مدت دو ثانیه از فایل video.mp4 رو به صورت گیف توی animated.gif ذخیره می‌کنه.

out-small-cover

(روی عکس کلیک کنید تا gif خروجی رو ببنید.)

حریم شخصی | حق دادنی نیست، گرفتنیست

روز ۲۸ ژانویه یا ۸ بهمن‌ماه رو روز حریم شخصی داده‌ها نام‌گذاری کردن و توی آمریکا، کانادا و ۲۷ کشور اروپایی این روز رو جشن می‌گیرن. توی این روز کمپین‌های اطلاع‌رسانی تشکیل میدن و متخصص‌های حریم شخصی به دانشگاه‌ها و مدرسه‌ها میرن تا در مورد اهمیت حریم شخصی افراد و حقوق اون‌ها در این زمینه اطلاع‌رسانی کنن.

با گسترش اینترنت، هر روز بر اهمیت این مسئله افزوده میشه. متاسفانه توی ایران این مسئله به شدت بی‌اهمیت گرفته میشه. از فروشنده‌هایی که رمز کارت بانکی شما رو می‌گیرن تا شرکت‌هایی که با اطلاعات شخصی شما، تجارت می‌کنن.

اما مهم‌ترین کار برای جلوگیری از این مسئله، اطلاع‌رسانی در مورد اهمیت این موضوع و بعد در مورد راه‌های جلوگیری از اون هست.

در مورد اهمیت این موضوع، می‌تونم یه مثال بزنم که چند روز پیش فقط با دونستن نیک‌نیم یکی از دوستان دوران دبستانم؛ به اسم و فامیلش، ایمیل، آدرس فیس‌بوک، شماره تلفن مبایل و حتی عکس‌های شخصیش دست پیدا کردم، فقط با چند تا جستجو.

شبکه‌های اجتماعی مکان خوب برای ارتباط راحت‌تر و به اشتراک گذاشتن اطلاعات با افرادی هست که می‌خوایم دسترسی داشته باشن، ولی مکانی بد برای اطلاعاتی که ما نمی‌خوایم هر کسی بهشون دسترسی داشته باشه. خبرگزاری دویچه‌وله چندین مقاله‌ی خوب در مورد نحوه‌ی تنظیمات حریم شخصی توی شبکه‌اجتماعی‌های مختلف مثل فیس‌بوک و گوگل‌پلاس و … داده که با خوندن و اعمال کردن اون‌ها می‌تونین از بفنا رفتن حریم شخصیتون جلوگیری کنین.

این مطلب رو در این باره بخونید: مجموعه‌ای از نوشته‌ها برای استفاده بهتر و ایمن‌تر از فیس‌بوک – دویچه‌وله

همچنین با استفاده از افزونه‌هایی مثل DoNotTrackMe و خیلی از افزونه‌های دیگه توی مرورگر دلخواهتون مطمئن بشید که فیس‌بوک، گوگل و … شما رو توی سایت‌های دیگه ترک نمی‌کنند.

البته این مشکل جاهای دیگه بدتر میشه، مثلا کافیه جستجویی در مورد خودرو بکنید تا گوگل تبلیغاتش رو بر اساس خودرو به شما نشون بده. خیلی از موقع‌ها توی این روند ممکنه حتی نتایجی رو برای شما حذف کنه در حالی که به کاربر دیگه‌ای نمایش میده.

برای آشنایی بیشتر با این موضوع این صفحه، Do Not Track Us رو ببینین و برای جلوگیری از اون از جستجوگر DuckDuckGo به جای گوگل استفاده کنید

از طرفی هر کسی که بین شما و این سایت اینترنتی باشه می‌تونه که اطلاعات شما رو برداره و مطمئن ترین راه برای جلوگیری از این کار استفاده از پروتکل SSL هست، برای این کار سعی کنید سایت‌ها رو با HTTPS باز کنید و یا از افزونه‌ی HTTPS Everywhere از موسسه EFF استفاده کنید.

من توی این وبلاگ قبلا از Google Analytics برای آمارگیری استفاده می‌کردم، اما به پیشنهاد دوست خوبم، امید مومن زاده، الان از نرم‌افزار piwik استفاده می‌کنم. توی این نرم‌افزار آزاد، به آزادی‌های شما احترام گذاشته میشه و اگه شما با فعال بودن گزینه‌ی Do Not Track توی مرورگرتون وارد وبلاگ من بشید، نرم‌افزار piwik شما رو ثبت نمی‌کنه.

این مقاله رو در مورد piwik از وبلاگ سرریزهای ذهن من بخونید: از حالا این وبلاگ اطلاعاتتون رو به گوگل نمی‌ده، حریم خصوصی شما مهمه

همین طور اگه می‌خواید ایمیلی که به من می‌زنید، وسط کار خونده نشه و یا اطلاعاتش دستکاری نشه، می‌تونین اون رو با کلید عمومی من رمز کنید و مطمئن بشید که فقط من می‌تونم اون رو بخونم.

پی‌نوشت: مثل این که افزونه‌ی wp-statictis وردپرس، به گزینه‌ی Do Not Track اهمیتی نمی‌ده، پس من هم افزونه رو غیرفعال کردم.

لینک‌های مرتبط

  1. We put your privacy first – Mozilla
  2. Data Privacy Day – Wikipedia

بهترین انتخاب واحد دانشگاه

اولایل بهمن ماه مهم‌ترین چیزی که ما دانشجوها درگیرش هستیم، انتخاب واحد دانشگاه هست. دانشگاه من، خوشبختانه از سیستم گلستان استفاده نمی‌کنه و خوبی که داره اینه که با هر مرورگری که دلم بخواد می‌تونم ازش استفاده کنم. اما متاسفانه به شدت بد نوشته شده و من که کرکر نیستم و اصلا علاقه‌ای به این کار ندارم، به سادگی می‌تونم بهش نفوذ کنم. متاسفانه در هنگام انتخاب واحد بشدت سایت کند میشه و هر چند مدت یکبار هم، همچین اخطاری رو با جزئیات کامل می‌بینید!

باگ سایت دانشگاه شیخ‌بهایی

باگ سایت دانشگاه شیخ‌بهایی

من ترم اول که این سیستم رو دیدم رفتم و به معاونت فناوری و اطلاعات اطلاع دادم و برای اثبات حرفم هم یه باگ خیلی تابلو توی سیستم پرداختشون رو بهشون گفتم. ولی گویا متوجه حرف من نشدن و نتیجه‌اش این شد که سیستم همچنان پر از باگ‌های مختلف باقی موند.

من امنیتی نیستم و الان هم قصد ندارم در مورد این موضوع بنویسم، مشکلی که من باهاش درگیر هستم اینه که هر ترم باید کل کلاس‌ها و تاریخ‌هاشون رو طی یک پروسه‌ی سخت از روی سایت دانشگاه ببینم، سعی کنم یه جدول زمانی برای خودم درست کنم از روش و سعی کنم بر اساس زمان کلاس‌ها، استاد مربوطه، زمان امتحان و در آخر مبحثش کلاس (!) انتخاب واحد کنم که در آخر چند تا از کلاس‌ها یا پر شده‌ان یا اینکه نمی‌تونم اینترنتی بگیرمشون.

خب، دانشگاه که به نظر نمی‌اد بخواد ولخرجی کنه و این سیستم رو بهبود بده و متاسفانه کسایی که مسئول هستن هم درک و دانش کافی برای این قضیه ندارن. پس من مجبورم خودم برای خودم این موضوع رو درست کنم.

جمع آوری اطلاعات

خب توی فاز اول باید اطلاعات درس‌ها رو دربیارم. با توجه به مشکلات امنیتی که گفتم به سادگی میشه SQL Inject کرد به سیستم و اطلاعات رو در  آورد. حتی اگه SQL معتبر نفرستین سیستم سخاوتمندانه اخطار می‌ده و راهنمایی‌تون میکنه. ولی من قصد ندارم که از دانشگاه اخراج بشم و کرکر هم نیستم، پس این گزینه رو رد می‌کنم و سعی میکنم از اون چیزی که همه بهش دسترسی دارن استفاده کنم. پس خیلی ساده با استفاده از یه لایبرری ۵۰ کیلوبایتی به اسم simple html dom، اطلاعات مورد نیازم رو از صفحه‌ی مربوطه دربیارم و بعد محاسبات مورد نیازم رو روش انجام بدم.

این کار به لطف دانش کم دوستانمون خیلی سریع‌تر از اون چیزی که فکر می‌کردم زمان برد. توی این سیستم، هر موقع شما صفحه‌ی درس‌ها رو باز کنید، تمام اطلاعات با جزئیات تمام درس‌ها رو براتون لود می‌کنه. یعنی هیچ Ajax یا حتی درخواست دیگه‌ای به سرور نمی‌فرسته و خب فقط کافیه که اطلاعات لازم رو با همون لایبرری دربیارم و با regex یکمی درستشون کنم.

مشکل بعدیم تصحیح اطلاعات هست، من از ك و ي عربی توی زبان فارسی خوشم نمی‌اد! و مهم‌تر از اون من روی «سه شنبه ساعت ۱۰ (به مدت ۱ ساعت کلاس W210)» محاسبات نمی‌تونم انجام بدم. پس مجبورم این رشته‌ها رو اصلاح کنم و همچنین این ساعت‌ها رو به یه مفهوم قابل محاسبه برای خودم تبدیل کنم. خوشبختانه توی کل سیستم تمام اشتباهات یه جور هستن (یعنی اگه نوشته «یکشنبه»، همه جا همینه و میشه الگو توش درآورد.)

محاسبه و در آوردن خروجی

راستش واسه‌ی این قسمت یکمی به مشکل برخوردم، درآوردن اطلاعات رو قبلا انجام داده بودم توی محل کار و خب کار سختی نیست. اما برای محاسبه این که این ترم من ترم چه واحد‌هایی بردارم به چند تا چیز مربوط هست:

  • با حداقل اتلاف وقت بیشترین واحد رو بگیرم؛ مثلا سه روز ۱۸ واحد
  • زمان کافی قبل از روز امتحانش داشته باشه
  • با استادی که بهتر درس و نمره میده باشه
  • ترم متناسب باشه، خیلی سخت نباشه و خیلی هم آسون نباشه
  • درس‌هایی اولویت بیشتری دارن که پیش‌نیاز بقیه هستن

خب، بهتره که اول مجموعه رو کامل بسازم و بعد به هر عضوش با توجه به اولویتش یک عدد نسبت بدم. اینجا مجموعه من، میشه تمام حالت‌هایی که من می‌تونم درس رو بگیرم که:

  • تداخل زمانی نداشته باشه
  • تداخل امتحانی نداشته باشه
  • پیش‌نیاز درس رو گذرونده باشم
  • بیش تر از ۲ درس عمومی نداشته باشه

تا همین جای کار اگه بتونم اون مجموعه رو بسازم، تا حد زیادی از کار انجام شده، تنها کاری که می‌مونه اینه که اولویت‌هام رو توش اعمال کنم.

اینجا میشه دستم رو باز بزارم و بگم که مثلا تمام حالت‌هایی که روزهای بیشتری توی هفته خالی دارن و حداقل ۱۵ واحد توش برداشته شده رو برای من برگردونه؛ برای من به شخصه چون مشغول به کار هستم، خیلی مهمه که بتونم این زمان تلف شده توی دانشگاه رو تا حد امکان کم کنم.

اما وقتی که این مجموعه ساخته بشه، ایده‌های بیشتری میشه داد. برای مثال میشه به استادها رنک بدیم و بگیم حالا بر اساس رنک بندی ما اون عدد مربوط به هر حالت رو حساب کنه.

من اطلاعات مورد نیاز رو جمع کردم و اصلاحات مربوط به محاسبه رو هم انجام دادم ولی تا الان که این پست رو می‌نویسم هنوز محاسبه روی این داده‌ها انجام ندادم و خب مجبور شدم این ترم رو هم به صورت دستی انتخاب واحد کنم.

از اونجایی که ما فتیش اتوماسیون داریم، می‌تونیم بعد از انتخاب بهترین حالت ممکن، سیستم رو تنظیم کرد که هر موقع انتخاب واحد باز شد، درخواست دریافت واحد بده، اما متاسفانه همین الان هم با وجود اینترنتی بودن انتخاب واحد، خیلی از واحدها رو باید با هماهنگی مدیر گروه برداشت و کاملا اینترنتی نیست.

پی‌.نوشت: این موضوع با استادم آقای مهدی ناصری مطرح کردم و خب میشه این کار رو از سمت آموزش، یعنی بهینه‌سازی ارائه درس‌های ترم بر اساس وضعیت دانشجوها هم انجام داد.

lLyrics – پلاگین ریتم‌باکس

پلاگین‌نویسی به نظرم یکی از جذاب‌ترین نوع برنامه‌نوشتن هست و وقتی که اون پلاگین کدباز باشه و بتونی به توسعه‌اش کمک کنی، اون موقع هست که به اوج لذت این کار می‌رسی. پلاگین lLyrics یک پلاگین مخصوص ریتم‌باکس هست که از سایت‌های مختلف توی اینترنت لیریک و یا متن آهنگ‌ها رو دانلود می‌کنه و توی پنل کنار ریتم‌باکس نشون می‌ده و این پلاگین‌ها رو هم فقط یک بار دریافت میکنه و کش می‌کنه! این پلاگین به زبان پایتون ۲ و برای gtk3 نوشته شده.

البته خود ریتم‌باکس هم یک افزونه‌ی رسمی برای لیریک داره ولی بشدت مزخرفه، مخصوصا با فیلترینگ ما همراه بشه و اون موقع هست که به هیچ دردی نمی‌خوره. lLyrics با استفاده از تگ‌های هر آهنگ و جستجو توی بیشتر از ۱۰ تا سایت انتشاردهنده‌ی لیریک،‌ بعد از پیدا کردن اون‌ها، اضافات هر صفحه رو حذف می‌کنه و یک متن خوشگل و خوانا به شما میده! لینک پروژه توی گیت‌هاب: https://github.com/dmo60/lLyrics

همخوانی با ریتم‌باکس ۲.۹۹

این افزونه تا تقریبا چند روز پیش برای آخرین نسخه‌ی ریتم‌باکس یعنی ۲.۹۹ کار نمی‌کرد و جالب بود که خود توسعه‌دهنده‌اش سه ماه پیش این موضوع رو گزارش داده بود و تا حالا تغییری روش اعمال نکرده بود! من هم که دربه‌در دنبال یه برنامه برای نمایش لیریک‌هام میگشتم یک پیغام براش گذاشتم که پروژه در چه وضعیتی هست، علی‌وا هم که دنبال این پلاگین بود، براش کامنت گذاشت و بعد از کمتر از یک روز، توسعه‌دهنده‌اش نسخه‌ی هماهنگ با ۲.۹۹ رو منتشر کرد :) اول توی یه برنچ آزمایشی گذاشت و بعد از این که من و علی‌وا تستش کردیم و بهش فیدبک دادیم، یک سری اصلاحات انجام داد و توی برنچ اصلی منتشرش کرد!

باگ در اسم خواننده‌ها

خب، در اولین استفاده خیلی عالی عمل میکرد و برای اکثر آهنگ‌ها حداقل یک سایت بود که هم فیلتر نباشه و لیریک رو بیاره، اما یک آهنگ خاص باعث شد که من یک ریپورت دیگه توی گیت‌هاب بفرستم و اون پیدا نکردن لیریک آهنگ معروف Macklemore and Ryan Lewis – Thrift Shop بود! تقریبا اول کار هیچ ایده‌ای نداشتم و فکر می‌کردم مشکل از فیلترنت باشه، پس سعی کردم به اینترنت وصل بشم و بعد دیدم باز هم مشکل داره. با استفاده از آپشن -D ریتم‌باکس رو توی حالت دیباگ اجرا کردم:!

➜ ~>rhythmbox -D lLyrics

خب یه توضیح کوچیک بدم که -d تمام لاگ‌های ریتم‌باکس رو نمایش میده (خیلی خیلی زیاد هستن!) و -D و متنی که به دنبالش هستین فقط لاگ‌هایی که اون عبارت توشون باشه رو نشون میده. بعد از یکمی صبر دیدم که پارسر سایت MetroLyrics که این لیریک رو داره (گوگل کرده بودم!) داره به وبسایت اشتباه میفرسته، مشکلش هم کمی ساده بود، لینکی که ساخته میشد macklemore-and-ryan-Lewis-lyrics-thrift-shop بود ولی توی سایت اصلی and رو حذف کرده بود.

طبیعیه که نمیشه به سادگی and رو حذف کرد، ممکنه and قسمتی از اسم خواننده باشه. چند ساعت بعد توسعه‌دهنده‌اش یه ایده‌ی جالب داد! اون هم استفاده از ‌api سایت معروف last.fm برای اصلاح تگ‌های آهنگ قبل از سرچ کردنشه! و بعد از چند ساعت بعد این امکان رو اضافه کرد و باگ بسته شد!

اضافه کردن یک وبسایت جدید

من کمی پایتون بلدم، داشتم فکر می‌کردم که چه خوب میشه سایتی مثل rapgenius.com رو هم داشته باشیم! از اون جایی که دولوپرش خیلی فعال بود و اگه میگفتم این رو هم اضافه کنیم تا چند ساعت بعدش اضافه میکرد این سری اول اضافه کردم و بعد pull request فرستادم :دی با یکمی “قرائت کدش” به راحتی پارسری که برای MetroLyrics نوشته بود رو برای rapgenius.com بهبود دادم و به برنامه اضافه کردم.

پکیج AUR

خب، این تغییرات همش روی گیت‌هاب انجام شد و هنوز توی هیچ ریپوزیتوری اضافه نشده بود، از اونجایی که پکیج ‌‌AUR  رو کسی هندل نمی‌کرد، من گرفتمش و با اضافه کردن یک دپندنسی و تغییر دادن نسخه و …، یک ‌PKGBUILD که به خوبی نصب و به روزرسانی میکنه پکیج رو فرستادم به ‌AUR!

پانوشت: بلاخره پشتکار امید باعث شد من هم حوس نوشتن به سرم بزنه باز هم و اینجا رو بعد از ۲ سال آپدیت کنم!

آپدیت ۱: از اونجایی که چند نفر با جستجوی آهنگ MACKLEMORE به این پست رسیدن، این لینک یوتیوب این آهنگ هست که حدودا ۵۰۰ میلیون بار پخش شده، ۵۰۰ میلیون بار فقط توی یوتیوب!