Media Center Szent Grál: behódolunk a H264-nek

A probléma Mondjuk, hogy van egy zsák DVD-nk (tényleg van), adja Isten találtunk hozzájuk .SRT feliratokat is és mindezt cakkumpúder csinosított formában szeretnénk felajánlani az iTunes librarynknak népgazdasági hasznosításra (egy üveg fröccs már bennem van, elnézést a hablatyért).

A megoldás

A feladatot két részre bontjuk: előbb hagyjuk a computerünket tömegesen konvertálni, aztán majd szerzünk az eredményhez metaadatot is, végül megszólítjuk iTunes komát is. Csapjunk bele!

1. lépés: tömeges konverzió

Szóval nagyjából úgy, ahogy a fenti bagoly rajzolós HOWTO mutatja. Igaziból persze leszedünk egy HandbrakeCLI-t, bemásoljuk a /Applications mappánkba a binárist és megírjuk az alábbi scriptet:
#!/bin/sh
#
# Handbrake gyipaci
# lmdate 2010.07.05
#
# Végigmegy rekurzívan egy könytáron és megkeresi a filmcim-hu{n}.srt, filmcim-en{g}.srt feliratfile-okat,
# aztán ha igazán akarod, csinál neked soft subtitle-os m4v-ket az avi-jaidból.
#
# A script feltételezi, hogy ha csak egy, az avi file-lal megegyező nevű srt file-t talál, akkor abban magyar
# subtitle lakik.
#
convert() {
	film="$1"
	base="${film%.*}"
	srt="$base".srt
	hu="$base"-hu.srt
	hun="$base"-hun.srt
	en="$base"-en.srt
	eng="$base"-eng.srt
	srthuc=0
	srthu=""
	if [ -e "$srt" ];	then
		srthuc=1
		srthu="$srt"
	elif [ -e "$hu" ]; then
		srthuc=1
		srthu="$hu"
	elif [ -e "$hun" ]; then
		srthuc=1
		srthu="$hun"
	fi
	srtenc=0
	srten=""
	if [ -e "$en" ]; then
		srtenc=1
		srten="$en"
	elif [ -e "$eng" ]; then
		srtenc=1
		srten="$eng"
	fi
	let srtc=$srthuc+$srtenc
	srtfiles=""
	srtcodes=""
	srtlangs=""
	case $srtc in
		0 ) ;;
		1 )
			if [ -s "$srthu" ]; then
				srtfiles="$srthu"
				srtcodes="WINDOWS-1250"
				srtlangs="hun"
			else
				srtfiles="$srten"
				srtcodes="ISO-8859-1"
				srtlangs="eng"
			fi
			;;
		2 )
			srtfiles="$srthu","$srten"
			srtcodes="WINDOWS-1250,ISO-8859-1"
			srtlangs="hun,eng"
			;;
	esac
	if [ $srtc -ne 0 ]; then
		echo Found $srtc subtitles:
		echo "$srtfiles"
		echo "$srtcodes"
		echo "$srtlangs"
	else
		echo No subtitles found.
	fi
	options="-e x264 -q 20.0 -a 1,1 -E faac,copy:ac3 -B 160,160 -6 dpl2,auto -R Auto,Auto -D 0.0,0.0 -f mp4 -4 -X 960 --loose-anamorphic -m -x cabac=0:ref=2:me=umh:b-pyramid=none:b-adapt=2:weightb=0:trellis=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500 -C 8"
	case $srtc in
		0 )
			# ha felirat nélkül is konvertálnál
			echo "" | $hbcli -v -i "$film" -o "$2" $options
			;;
		1 )
			# ha konvertálnád a home videód akkor is, ha csak a default magyar felirat van meg hozzá
			echo "" | $hbcli -v -i "$film" -o "$2" $options --srt-file "$srtfiles" --srt-codeset "$srtcodes" --srt-lang "$srtlangs"
			;;
		2 )
			# ha konvertálnád a home videód mind az angol, mind a magyar felirat birtokában a kétnyelvű családod számára
			echo "" | $hbcli -v -i "$film" -o "$2" $options --srt-file "$srtfiles" --srt-codeset "$srtcodes" --srt-lang "$srtlangs"
		 ;;
	esac
	return
}
hbcli=/Applications/HandBrakeCLI
source_dir="."
input_file_type="avi"
output_file_type="m4v"
echo "# Using HandBrakeCLI at "$hbcli
echo "# Using source directory "$source_dir
echo "# Converting "$input_file_type" to "$output_file_type
# Convert from one file to another
convert() {
   # The beginning part, echo "" | , is really important.  Without that, HandBrake exits the while loop.
   echo "" | $hbcli -i "$1" -o "$2" --preset="AppleTV 2" -C 8;
}
# Find the files and pipe the results into the read command.  The read command properly handles spaces in directories and files names.
find "$source_dir" -iname "*.$input_file_type" | while read in_file
do
        echo "Processing…"
   echo ">Input  "$in_file
   # Replace the file type
   out_file=$(echo $in_file|sed "s/\(.*\.\)$input_file_type/\1$output_file_type/g")
   echo ">Output "$out_file
   # Convert the file
   convert "$in_file" "$out_file"
   if [ $? != 0 ]
        then
            echo "$in_file had problems" >> handbrake-errors.log
        fi
   echo ">Finished "$out_file "\n\n"
done
echo "DONE CONVERTING FILES"
A sctiptünkben az options= kezdetű sorban a -C utáni számot kicseréljük a rendelkezésünkre álló CPU magok számára. Egy folderbe bepakoljuk az eddig bután .avi formában tárolt filmjeinket / sorozatainkat, melléjük tesszük az .srt file-okat (ha ezt nem értjük, elolvassuk a scriptet, nem csak nyakló nélkül mentjük). Ha ez kész, nyitunk egy shellt, bemászunk a filmek könyvtárába és elindítjuk a scriptünket, majd a végén örülünk a sok szép új m4v file-nak.

2. lépés: metázunk

Az előbb lett sok szép mv4 file-unk – ezekbe kell nekünk proper metadata. Ehhez vásároljuk meg a Mac App Storeból az iDentify alkalmazást, esetleg szedjük le a trialt innen. Az iDentifybe bedobáljuk az m4v file-jainkat, ő meg szépen feltaggeli őket. Ha ezt mégsem teszi meg magától, akkor nagy eséllyel nem tudott kitalálni szerencsétlen semmi kézzelfoghatót a filenévből. Ilyenkor forduljunk az IMDB-hez bizalommal: keressük ki a film / sorozat IMDB oldalát és adjuk meg az iDentifynek az IMDB által használt azonosítót.

3. lépés: iTunes etetés

A drága megalomán média alkalmazásunk minden valószínűség szerint a ~/Music/iTunes mappában tárolja a cuccait. Ebben a folderben keressük meg az iTunes Media/Automatically Add to iTunes könyvtárat és dobáljuk bele vadul az előbb legyártott, majd gondosan feltaggelt m4v állományainkat. Az iTunes észreveszi az új jövevényeket, belenéz a metaadatokba és szépen a helyére pakolja a cuccost. Innentől kezdve pedig már csak egy iTunes Home Sharing bekapcsolás és egy Apple TV dobozka kell ahhoz, hogy a nappaliban molesztáljuk a csodaszép videós médiatárunkat.]]>

1 thought on “Media Center Szent Grál: behódolunk a H264-nek

  1. Pingback: Media Center Szent Grál: raspbmc « eFi.blog

Leave a Reply

Your email address will not be published.