Youtogg

Kendi işlerimi kolaylaştırmak için bir script (betik) yazdım. Bunu da sizlerle paylaşmadan olmazdı. Genelde saçma isimler bulmakta üzerime yoktur. Bu betik için de aynısı oldu diyebilirim.

Ne işe yarıyor?
Youtogg, hemen hemen birçok video sitesinden (Youtube, Vimeo, Dailymotion vd.) video indirip bunları ses formatına (*.ogg) dönüştürmenize olanak sağlayan basit bir betiktir. Bunun dışında, Tor ağı üzerinden indirme seçeneği hariç hiçbir özelliği yoktur.

Nasıl çalışıyor?
İlk olarak, kullanıcı dizini altında “youtogg” dizini oluşturuyor. İndirdiği videolar ve dönüştürdüğü ses dosyalarına buradan erişebileceksiniz. Ardından, indirmek istediğiniz video linkini girerek istediğiniz formatı (mp4, flv, webwm vd.) ve çözünürlüğü seçeceğiniz bir ekran çıkmaktadır. Burada 18, 22, 143 vd. gibi seçimler yapıyorsunuz. Bu noktada bağlantı hızınıza göre hareket edebilirsiniz. Bununla birlikte, video indikten sonra sizlere dönüştürülecek çıktının adını sormaktadır. Örneğin, burada şarkının ve sanatçının adını veya ikisini birden (ya da ne yazarsanız) yazabilirsiniz.

Kurmanız gereken birkaç uygulama/kütüphane var. Bunlar, youtube-dl, ffmpeg ve libvorbis. Dağıtımınızın paket yöneticisinden aratarak kurabilirsiniz. Tor ağı seçeneği opsiyoneldir. Eğer, Tor ağı üzerinden indirmek isterseniz tor ve polipo paketlerini de kurmanız, polipo’yu tor için ayarlamanız gerekmektedir. Kısaca bir polipo ayarı (/etc/polipo/config) göstermem gerekirse:

daemonise=false
diskCacheRoot=/var/cache/polipo/
proxyAddress=127.0.0.1
proxyName=localhost
serverSlots=4
serverMaxSlots=8
cacheIsShared=true
allowedClients=127.0.0.1
socksParentProxy = localhost:9050
socksProxyType = socks5

Neden?
Öncelikle, bu betik benim için gerekli. Flash  ve HTML5 kullanmıyorum. Genelde bir video izleyeceksem bunu youtube-dl ve mplayer ile birlikte yapmaktayım. Fakat, dinlediğim şarkıları telefonda veya mp3 çalarda da bulunmaları ve tekrar tekrar indirmemek için böyle bir şey yaptım. Benim işimi fazlasıyla görüyor. Diğer yandan, belki ilgisini çeken birileri betiği geliştirmek isteyebilirler. Ek olarak, bir yazılımcı değilim. Kod yazmayı bilmiyorum.

Kod

#!/bin/bash
#
# Youtogg is a basic video to ogg conversion script.
#
# Dependencies: youtube-dl, ffmpeg, libvorbis
# Optional: tor, polipo
# Contact: kusburnu@riseup.net
###
# Welcome screen
_welcome () {
	echo $@ | sed -e 's/^/../' -e 's/$/../' -e 's/./*/g'
	echo $@ | sed -e 's/^/* /' -e 's/$/ */'
	echo $@ | sed -e 's/^/../' -e 's/$/../' -e 's/./*/g'
	}
_welcome "WELCOME TO YOUTOGG"
echo
###
# Folder check
_folder_check () {
	if [ -d ~/youtogg ]
	then
		read -p "Video Link: " video
		echo
	else
	        echo "Creating youtogg folder"
		mkdir ~/youtogg
		read -p "Video Link: " video
		echo
	fi
}
_folder_check "$@"
###
# Video download
_video_download () {
	while true
	do
		echo
		read -p "Do you want to torify? (Y/N) " answer1
		echo
		case $answer1 in
			[yY]* ) cd ~/youtogg && filename=source && 
				youtube-dl -F --proxy "127.0.0.1:8123" $video &&
				echo && read -p "Choose your video format: " format &&
				echo && youtube-dl -f $format -o $filename --proxy "127.0.0.1:8123"  $video
				break;;

			[nN]* ) cd ~/youtogg && filename=source &&
				youtube-dl -F $video && echo && read -p "Choose your video format: " format &&
				echo && youtube-dl -f $format -o $filename $video
				break;;

   		* )     echo "Y or N, please!";;
  	esac
done
}
_video_download "$@"
###
# Name for the output file
_filename () {
	echo
	read -p "Output filename: " name
	echo
}
_filename "$@"
###
# Converting video to ogg
_convert () {
		while true
		do
			ffmpeg -i $filename -vn -acodec libvorbis "$name.ogg"
			echo
			read -p "Do you want to keep video file? (Y/N) " answer2
			echo
			case $answer2 in
				[yY]* ) mv $filename $filename.$(date +%m%d%Y_%H%M%S)
					break;;

				[nN]* ) rm $filename
					break;;

   		* )     echo "Y or N, please!";;
  	esac
done
}
_convert "$@"
###
# Log
_log () {
	echo "$video = $name.ogg" > youtogg.log.$(date +%m%d%Y_%H%M%S)
}
_log "$@"
###
# Loop
_loop () {
	while true
	do
		echo
		read -p "Do you want to convert again? (Y/N) " answer3
		echo
		case $answer3 in
			[yY]* ) _folder_check "$@" && _video_download "$@" && _filename "$@" && _convert "$@" && _log "$@"
				break;;

			[nN]* ) echo "Goodbye!" 
				exit;;

   		* )     echo "Y or N, please!";;
  	esac
done
}
_loop "$@"

Son olarak…
Bu kodu aynen bir metin düzenleyicisine kopyalayıp kaydedin. chmod +x dosyadı ile çalıştırılabilir hale getirin. Son olarak, terminalden çalıştırın. Hepsi bu kadar. Kullanır ve yorum yaparsanız memnun olurum. Önerilerinizi ve geliştirmelerinizi de eklerseniz mükemmel olur.

Ekleme (01.02.2014): Log eklendi.