matroska audio -> flac

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.

This entry was posted in experiments and tagged , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *