بایگانی برچسب: s

پروسه ضبط جادی تی وی ها؛ ضبط تصویر دوربین و اسکرین کست صفحه و صدای میکروفون روی لینوکس

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

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

ترکیب کار من در واقع چهار قسمته: نشون دادن دوربین، ضبط تصویر و صدا در شرایطی که دوربین روی صفحه نشون داده می شه و بعد کمی ادیت کردن و در نهایت کوچیک کردن فایل نهایی. بذارین قدم ها رو با هم چک کنیم.

نشون دادن وبکم روی صفحه

اینجا من به سادگی یک کد دارم:

mplayer -tv driver=v4l2:width=320:height=240: -vo xv -vf mirror tv://  -geometry "99%:99%" -noborder -ontop

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

ضبط تصویر

حالا که دوربین روی صفحه دیده می شه باید بتونم کل صفحه و صداهام رو ضبط کنم. اینجا برنامه ای که من استفاده می کنم kazam است که مخصوص KDE است اما بقیه جاها هم به خوبی کار می کنه. انواع گزینه های دیگه هم هست از جمله istanbul و recordmydesktop-gtk و روش های ضبط مستقیم با ffmpeg ولی در نهایت من بعد از کمی تجربه با kazam در شرایطی که mp4 ضبط می کنه بهترین نتیجه رو گرفتم و بقیه خط ها رو دیگه تست نکردم. حالا من یک فایل بزرگ mp4 دارم که با کیفیت بالا صفحه و میکروفون رو ضبط کرده.

برای اطلاعات بیشتر در مورد ضبط خوب صدا بدون هزینه زیاد این پست رو نگاه کنین: ضبط صدای خوب در لینوکس با هزینه کم برای پادکسترها

ادیت

برای ادیت هم من چند برنامه رو تست کردم و در نهایت اولین برنامه ای که دستم باهاش راه افتاد kdenlive بود که بازم مال کی دی ای است! برنامه های دیگه هم هست ولی خب این برای من از همه زودتر کارهایی که می خواستم رو کرد. ادیت فیلم بسیار ساده انجام می شه و حتی از صدا هم راحتتره: گذاشتن چند تا ترک و جلو عقب کردن و افکت هایی در حد فید این و فید آوت. بعد از ادیت من فایل رو با یکی از گزینه های export که بهم فایلی با پسوند m2t می ده اکسپورت می کنم. این پروسه طول می کشه ولی کسی از یک ساعت اکسپورت گرفتن نمی ترسه!

تولید فایل نهایی

بعد از اینکه kdenlive اکسپورت یا رندر رو تموم کرد و به من یک فایل خیلی بزرگ (مثلا دو گیگی) m2t داد که صدا و تصویرش خوبه، با استفاده از ffmpeg فایل رو به شکل عجیبی کوچیک می کنم بدون اینکه کیفیت یا صدا ضرر خاصی بکنن. دستور مورد استفاده من اینه:

ffmpeg -i $1 -acodec libmp3lame -b:a 16k -ac 1 -s 1366x768   $1.done.mp4 

که بازم به عنوان یک اسکریپت بش کار می کنه و هر فایلی بهش بدم رو بعد از نیم ساعت کار با پسوند mp4 با سایز ۱۳۶۶ در ۷۶۸ که اندازه مانیتور من است و یک کانال صدای ۱۶ کیلویی و کدک mp3lame تحویلم می ده.


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

داشتن بک گراوند روزانه بینگ در عکس پس زمینه اوبونتو

CoffeeSprouts_EN-US13503324158_1366x768

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

$ chmod 755 bingwallpaper.sh

و بعد اجراش کنین یا مثل من اون رو یک جایی بذارین و به کرون اضافه اش کنین که هر چهار ساعت یکبار اجرا بشه. مثلا اگر در دایرکتوری bin در خونه خودتون کپی کرده باشین، چنین چیزی:

crontab -e
42  */4 *   *   * /home/jadi/bin/bingwallpaper.sh

و البته معلومه که کپی پیست اینها جواب دقیق نیست و فقط راهنما هستن. اگر باهاشون مشکل دارین دوره ال پی آی سی و بخصوص بخش کرون رو ببینین.

این اسکریپت نیازمند curl است که باید نصب بشه و همینطور از تظیمات gsettings استفاده می کنه که توی اوبونتو و بعضی لینوکس ها جواب می ده. در لینوکس ها یا میزکارهای دیگه با می تغییر می تونین نتیجه بگیرین. مثلا این اسکریپت فایل های عکس رو توی Pictures/BingDesktopImages می‌ریزه و توی کی دی ای می ونین بگین هر ساعت یک عکس اتفاقی از اون دایرکتوری نشون بده.

معلومه که خوندن این اسکریپت به اکثر ما هم چیزهایی هم یاد خواهد داد.


به روز رسانی
– امیر در کامنت ها اسکریپت رو برای ماته منتشر کرده

جادی تی وی ۰۱۰ – بررسی مشکلات اختراع دوباره چرخ با کمک پایتون و اسکرپینگ و ردیس

همراه اول یک سیستم فروشگاه درست کرده و کپچای بامزه ای هم براش گذاشته، اما مشکل اینجاست که دو چیز رو هیچ وقت نباید دوباره اختراع کرد: کپچا و رمزنگاری. در این شماره با اسکرپینگ، پایتون و کمی آمار از دیتا استور ردیس استفاده می کنیم تا ببینیم مشکل اختراع دوباره چرخ چیه!

لینک روی یوتیوب و هر کس هر جای دیگه آپلود کنه و لینک بده، باعث خوشحالی و دعای خیر پشت سانسوری‌هاست (:

آپدیت: انواع لینک دانلود در کامنت ها (:
آپدیت: دوستان در کامنت ها چندین بار گفتن که چرا توی بش چند صد بار برنامه رو اجرا کردیم. در واقع این ویدئوها آموزشی هستن و ایده شون این نیست که راحتترین روش انجام یک چیز رو نشون بدن. می خوایم حتما از ردیس استفاده کرده باشیم اینجا. نشون بدیم که چطوری می شه پیچیدگی برنامه نویسی رو با یک معماری خوب به حداقل رسوند. چطوری می شه یک سیستم رو قابل اجرا روی چندین کامپیوتر مختلف کرد و اصولا ردیس چیه (: معلومه که «ساده ترین» روش نوشتن این برنامه خاص این بود که توی پایتون یک لوپ و کمی آسینک قاطی کنیم و نتایج رو توی یک دیکشنری بشمریم. البته در عمل اون پیچیدگی هایی داشت تا به این سرعت برسه ولی خب برنامه نویسی سنتی تری بود. دقیقا ایده این ویدئو کست این بود که نشون بدیم چطوری باید اجزای شناخته شده و بسیار قوی رو ترکیب کرد تا به سادگی به یک سیستم با قابلیت بسیار بالا رسید.

شطرنج مخفی در مسنجر فیسبوک رو فعال کنید

chess

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

  • چت کنین
  • استیکر و عکس و … بفرستین
  • تماس تصویری بگیرین
  • پول جابجا کنین

و شطرنج بازی کنین. برای اینکار کافیه به سادگی پیامی با این بفرستین:

@fbchess play

کسی که بازی رو شروع کرده مهره‌های سفید رو داره و کافیه دستورات استاندارد شطرنجی بهش بگین. مثلا:

@fbchess b3 #پیاده ستون بی، به خونه سوم بره
@fbchess Nf3 #اسب به خونه اف سه
...
@fbchess help #راهنما لطفا

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

چرا گنو/لینوکس رو دوست دارم:‌ فهرست کردن کل فایل‌های قابل دانلود یک سایت

یک دوستی پرسیده که چطوری می تونیم فهرست همه فایل‌های قابل دانلود در سروری مثل dl.folan.net رو داشته باشیم. این سرور اجازه می‌ده شما دایرکتوری‌هاش رو ببینین:

Screenshot from 2015-11-25 11-57-46

و مثلا توی دایرکتوری فیلم‌ها:

Screenshot from 2015-11-25 11-58-08

درست؟ دوست همیشگی ما در سری چرا گنو/لینوکس رو دوست دارم دستور جذاب wget است. پس شروع می کنیم!

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/

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

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 

این دستور خروجی‌هایی شبیه به این تولید می کنه:

Spider mode enabled. Check if remote file exists.
--2015-11-25 12:02:51--  htp://dl.folan.net/Movie/5/American.History.X.1998.720p.folan.Net.mkv
Reusing existing connection to dl.folan.net:80.
htp request sent, awaiting response... 200 OK
Length: 785963069 (750M) [application/octet-stream]
Remote file exists but does not contain any link -- not retrieving.

Removing dl.folan.net/Movie/5/American.History.X.1998.720p.folan.Net.mkv.
unlink: No such file or directory

Spider mode enabled. Check if remote file exists.
--2015-11-25 12:02:51--  htp://dl.folan.net/Movie/5/American.Justice.2015.1080p.folan.Net.mkv
Reusing existing connection to dl.folan.net:80.

من خط‌هایی رو می‌خوام که اولشون — داره و پس می ریم سراغ grep که می‌تونه توی یک متن خط‌هایی رو جدا کنه که چیز خاصی توشون هست:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--'
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Good.Day.to.Die.Hard.2013.720p.folan.Net.mkv
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Good.Marriage.2014.BluRay.720p.folan.Net.Mkv
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Hijacking.2012.720p.folan.Net.mkv

و خب حالا می تونیم فقط بخش یو آر ال رو جدا کنیم. با استفاده از awk:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--' | awk '{ print $3 }' 
htp://dl.folan.net/6piljd5xepub7trr13ke.gif
htp://dl.folan.net/85film3.gif
htp://dl.folan.net/Movie/1/Into.the.Woods.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Iyobinte.Pusthakam.2014.720p.DVDrip.%5Bfolan.Net%5D.mp4
htp://dl.folan.net/Movie/1/Kick.2014.720p.BluRay.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/La.Grande.Illusion.1937.720p.Farsi.Dubbed.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Late.Phases.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Le-Week-End.720p.%5Bfolan.net%5D.mkv
htp://dl.folan.net/Movie/1/Legendary.2010.LIMITED.720p.%5Bfolan.Net%5D.mkv

و بعد فقط خط‌هایی رو نگه داریم که آخرشون چیزهایی مثل / یا css یا html و .. نداره:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--' | awk '{ print $3 }' | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' | grep -v '\/$' 
htp://dl.folan.net/Movie/1/Into.the.Woods.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Iyobinte.Pusthakam.2014.720p.DVDrip.%5Bfolan.Net%5D.mp4
htp://dl.folan.net/Movie/1/Kick.2014.720p.BluRay.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/La.Grande.Illusion.1937.720p.Farsi.Dubbed.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Late.Phases.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Le-Week-End.720p.%5Bfolan.net%5D.mkv
htp://dl.folan.net/Movie/1/Legendary.2010.LIMITED.720p.%5Bfolan.Net%5D.mkv

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

$ sort -R all.urls | head
htp://dl.folan.net/Movie/5/Modern.Times.1936.720p.Farsi.Dubbed.folan.Net.mkv
htp://dl.folan.net/Serial/The%20Killing/S01/The.Killing.S01E08.480p.folan.Net.mkv.folan.Net.mkv.mkv
htp://dl.folan.net/Serial/Breaking%20Bad/S05/BreakingBad.S05E06.folan.Net.mkv
htp://dl.folan.net/Movie/2/Priest.of.Evil.2010.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/5/A.Midsummer.Nights.Dream.1999.720p.WEB-DL.folan.Net.mkv
htp://dl.folan.net/Serial/Castle/S05/Castle.S05E22.480p.folan.Net.mkv
htp://dl.folan.net/Serial/Twin%20Peaks/S02/Twin.Peaks.S02E22.480p.folan.Net.mkv
htp://dl.folan.net/Serial/Supernatural/S04/SN-S04_E11.folan.Net.mkv
htp://dl.folan.net/Movie/Problem%20Child%201990/Bacheye.DardesarSaz.1990.720pWEB-DL.HQ_folan.info.mkv
htp://dl.folan.net/Serial/Archer/S01/Archer.S01E08.folan.Net.mkv

$ wc -l all.urls 
11284 all.urls

اینجوری فهرستی از ۱۱هزار فایل قابل دانلود اون سایتی که تصمیم گرفتم به خاطر حفظ بیزنسش، آدرسش رو ندم رو داشته باشیم (: هدف این پست دانلود نیست،‌ یاد گرفتن شیوه کار با لینوکسه و همچنین دقت کنین که http ها رو کردم htp که وبلاگ سعی نکنه به عنوان فیلم لودشون کنه از یو آر ال گفته شده (: خوش باشین و خندون و توانمند.

جلوی باگ شیما رو بگیرین! کسی دوست نداره بهش بگن «شیما عزیز خوش اومدی»

به جز عنوان واقعا چیز زیادی برای گفتن نیست. توی فارسی وقتی اسمی به الف یا و ختم بشه و ما بهش بگیم «$اسم عزیز خوش اومدی» یک باگ ریز پیش میاد. مثلا این برنامه رو نگاه کنین:

package main

import "fmt"

func main() {
  var name string = "کاربر"
  for name != "رفتم" {
      fmt.Print(name, " عزیز خوش اومدی.\n\n")
      fmt.Print("حالا اسم جدیدت رو بده: ")
      fmt.Scanln(&name)
  }
}

که نمونه اجراش می‌شه این:

$ go run 1.go 
کاربر عزیز خوش اومدی.

حالا اسم جدیدت رو بده: جادی
جادی عزیز خوش اومدی.

حالا اسم جدیدت رو بده: شیما
شیما عزیز خوش اومدی.

حالا اسم جدیدت رو بده: رفتم

و درست همینجا است که شیما به من ایمیل زده و گفته وقتی سایتی بهش می گه «شیما عزیز خوش اومدی» اصلا براش جذاب نیست. پس برنامه باید این شکلی باشه:

package main

import "fmt"

func main() {
  var name string = "کاربر"
  var greeter string
  for name != "رفتم" {
      if (name[len(name)-2:] == "ا") || (name[len(name)-2:] == "و") {
        greeter = name + "ی"
      } else {
        greeter = name
      }
      fmt.Print(greeter, " عزیز خوش اومدی.\n\n")
      fmt.Print("حالا اسم جدیدت رو بده: ")
      fmt.Scanln(&name)
  }
}

که خروجی شخصی‌ترین شبیه این بده:

$ go run 1.go 
کاربر عزیز خوش اومدی.

حالا اسم جدیدت رو بده: جادی
جادی عزیز خوش اومدی.

حالا اسم جدیدت رو بده: شیما
شیمای عزیز خوش اومدی.

حالا اسم جدیدت رو بده: شاهو
شاهوی عزیز خوش اومدی.

حالا اسم جدیدت رو بده: رفتم

خوبه؟ پس یک if جلوی باگ شیما رو بگیرین تا افرادی که اسمشون با الف یا و نموم می‌شه حس نکنن یک باگ در برنامه شما هستن.