منبع اصلی نوشتار زیر در این لینک قرار دارد

مهاجرت به قالب ماتروسکا

به قصد پاکسازی سیستمم، تصمیم گرفتم تا جای ممکن از قالب‌ها، نرم‌افزارها و مجوزهای آزاد استفاده کنم. در راستای این مهم، ماتروسکا رو برای پرونده‌های تصویری انتخاب کردم. قالب خیلی جالبیه و همه‌جا هم به راحتی قابل پخشه و البته شناخته شده(با پسوند mkv). یکی از مزایایی هم که داره کم‌تر بودن حجمش نسبت به امپگ هست. اسکریپتی برای پاکسازی سیستم از قالب منحوس و شوم(!) MP4 نوشتم که تقریبا هوشمندانه عمل می‌کنه. البته به قول جادی، ما هر چیزی رو که براش if می‌ذاریم بهش می‌گیم هوشمند :)

نحوه‌ی کار به این صورته که find، پرونده‌هایی رو که پسوند MP4 دارند رو داخل پوشه‌ی Videos در پوشه‌ی خانگی کاربر جاری پیدا می‌کنه و با یه حلقه‌ی for مانند (که با while پیاده شده)، تابع convert_to_mkv رو به ازای هر کدوم از این پرونده‌ها صدا می‌زنه. این تابع، موظفه که برنامه‌ی avconv رو اجرا کنه که عمل اصلی تبدیل رو انجام می‌ده. بقیه‌ی کارها هم مختص فرستادن نامه به کاربره که گزارش تبدیل رو به کاربر جاری ایمیل می‌کنه.

#!/bin/sh
# make cron usage easy :)
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# go to the user's videos directory
cd /home/$USER/Videos/

# this function converts given filename
convert_to_mkv() {
  INPUT="$1"
  OUTPUT="$(echo $1 | sed -r -e 's/.w+$/.mkv/')"
  avconv -v info -i "$INPUT" -c:v libx264 -f matroska "$OUTPUT"
}

# find any mp4 and kill it!
find . -type f -name '*.mp4' | while read FULL_PATH; do
  FILE="$(echo "$FULL_PATH" | sed 's/.///')"
  LOGFILE="$(basename "${FILE}" | sed -e 's/ /_/g' -e 's/mp4$/log/')"
  if convert_to_mkv "$FILE" < /dev/null >> "$LOGFILE" 2>&1; then
    echo "$FILE converting successfully finished. see attachment for details." | mail -A "$LOGFILE" -s 'Converting Finished' $USER
    rm "$LOGFILE" "${FILE}"
  else
    echo "$FILE converting faild. see attachment for details." | mail -A "$LOGFILE" -s 'Error While Converting' $USER
  fi
done

در پست‌های بعدی، درباره‌ی مهاجرت به قالب‌های آزاد دیگه (نظیر Vorbis و ...) خواهم نوشت.



برچسب ها : , ,