Mostanában sikerült vennem némi lossless zenét mka-ba csomagolva. Szép és jó, VLC meg totem is lejátssza, de azért mégsem az igazi.
Ezekben az a bizonyos mka fájlokban két hangsáv van, egy DTS5.1 meg egy sztereó FLAC. Na, nekem csak az utóbbira volt szükségem. Nem volt egyszerű kihámozni a matroska audio containerből a holmit, úgyhogy össze is raktam egy provizorikus kis scriptet, amivel az összes ilyen mka-mat sikerült átkódolnom.
Erősen experimental, nagyon provizorikus, semmi hibakezelés. Azért osztom meg, hogy másnak ne kelljen végigmennie azon a kínlódáson, amin nekem sikerült. Be is tageli a fájlokat. Kell hozzá mkvmerge, metaflac, flac, shntool, cuetool és a split2flac nevű szkript is – ez legutóbbi egyébként egy igen ügyes holmi.
Az alábbi kódot kizárólag a WTFPL feltételei szerint szabad felhasználni!
#!/bin/bash # # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE # Version 2, December 2004 # # Copyright (C) 2004 Sam Hocevar # 14 rue de Plaisance, 75014 Paris, France # Everyone is permitted to copy and distribute verbatim or modified # copies of this license document, and changing it is allowed as long # as the name is changed. # # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION # # 0. You just DO WHAT THE FUCK YOU WANT TO. echo "AStech mkatoflac init." file=$(ls -1 *.mka | tail -n1) if [[ -f "$file" ]] then echo "extracting flac (track 2)..." mkvextract tracks "$file" 2:flac.flac echo "extracting chapters xml..." mkvextract chapters "$file" > flac.xml echo "gathering timecodes..." grep ChapterTimeStart flac.xml | sed 's/<[/a-zA-Z]*>//g' | sed 's/ //g' | awk 'BEGIN{FS=":"; OFS="";}{printf("%.2d:%.2d:%.2d\n", $1*60+$2,int($3),int($3 %1 * 100));}' > times.txt echo "gathering track titles..." grep ChapterString flac.xml | sed 's/<[/a-zA-Z]*>//g' | sed 's/ //g' | sed 's/[0-9]*\. //g' | sed 's/[0-9]\:[0-9]*$//g' > titles.txt tracks=$(cat titles.txt | wc -l) echo "creating cue sheet..." echo "REM COMMENT \"AStech mkatoflac\"" > flac.cue artist=$(metaflac --show-tag=artist flac.flac | sed 's/^[a-z]*=//g') if [ -z "$artist" ] then artist="Unknown" fi echo "PERFORMER \"$artist\"" >> flac.cue title=$(metaflac --show-tag=title flac.flac | sed 's/^[a-z]*=//g') if [ -z "$title" ] then title="Unknown" fi echo "TITLE \"$title\"" >> flac.cue echo "FILE \"flac.flac\" WAVE" >> flac.cue for (( c=1; c<=$tracks; c++ )) do temp=$c if [ $temp -lt 10 ] then temp=$(echo 0$temp) fi echo "TRACK $temp AUDIO" >> flac.cue echo -n "TITLE \"" >> flac.cue echo "$(head -n$c titles.txt | tail -n1)\"" >> flac.cue echo -n "INDEX 00 " >> flac.cue echo "$(head -n$c times.txt | tail -n1)" >> flac.cue done echo "splitting to multiple flac files..." split2flac flac.flac else echo "file not found" fi
Igen – tudom, hogy szörnyű. Egyelőre ez van.