Jest to prosty program pozwalający na stworzenie słownika przeznaczonego dla pojedynczego tekstu (np. książki) w celu prawidłowej wymowy przez Milenę nazw własnych. Pobiera wszystkie wyrazy z tekstu i wypisuje te, które nie pasują do słownika Mileny a w całym tekście pisane są wyłącznie wielką literą (oprócz początku zdania), zawierają apostrof lub dowolną literę z zakresu poza polskimi.
Program jest bardzo prowizoryczny, ale do czasu opracowania pełnego słownika wymawialnych wyrazów może być przydatny...
dykcjonarz [opcje]... <plik> > plik_slownika
Gdzie możliwe opcje to:
Milenizer to konwerter tekstu na format przeznaczony dla Mileny. Tekstem wejściowym może być:
W przypadku formatów "doc" i "odt" Milenizer używa zewnętrznych konwerterów (odpowiednio Antiword i odt2txt).
Na wyjściu otrzymuje się tekst w postaci akceptowanej przez Milenę (każdy akapit w jednej linii). Możliwy jest również półautomatyczny podział tekstu na rozdziały, z opcjonalną autonumeracją rozdziałów, uwzględnianiem tytułów rozdziałów oraz wyróżnieniem prologu oraz epilogu lub ostatniego rozdziału.
Milenizer może również służyć jako prosty konwerter z RTF na TXT. Na wyjściu otrzymuje się wtedy plik tekstowy w kodowaniu UTF-8.
milenizer [opcje] <plik>
Opcje -p/-P i -e/-E działają niezależnie od tego czy podano -a czy -A. Wystąpienie którejkolwiek z opcji -p/-P/-e/-E/-l bez opcji -a/-A jest nielegalne. Wszystkie opcje autonumeracji są ignorowane, jeśli nie podano opcji -s.
Milenizer rozpoznaje litery do kodu \u017f oraz "ș" i "ț" ("s" i "t" z przecinkiem). W przypadku napotkania znaku literowego niewystępującego w ISO-2:
Taki sposób konwersji w wielu przypadkach pozwala na prawidłową (lub przynajmniej nie rażąco błędną) wymowę obcojęzycznych wyrazów bez konieczności wprowadzania ich do słownika.
Dodatkowo częściowo rozpoznawana jest cyrylica i przekładana fonetycznie według uproszczonych zasad odpowiadających językowi rosyjskiemu. Oprócz liter z alfabetu rosyjskiego rozpoznawane są również litery charakterystyczne dla alfabetów ukraińskiego i białoruskiego. Translacja jest w fazie eksperymentalnej, nie należy się więc spodziewać dobrych rezultatów, ale czytany tekst powinien być zrozumiały.
Jest to bardzo prosty skrypt w bashu służący do szybkiej konwersji książki będącej wynikiem działania milenizera (czyli kompletu plików txt) na komplet plików mp3.
milena_book [opcje] <katalog>
Przy pierwszym uruchomieniu skrypt tworzy plik ~/.milena_bookrc, w którym należy ustawić wszystkie parametry, w szczególności parametr "voice" wskazujący ścieżkę do pliku językowego Mbroli.
Skrypt znajduje wszystkie pliki z rozszerzeniem .txt w podanym katalogu i tworzy z nich pliki mp3, zamieniając w nazwie rozszerzenie .txt na .mp3. Do pracy wymagany jest lame.
Również prosty skrypt w bashu, umożliwiający bezpośrednie odczytanie tekstu (z pliku lub parametrów w linii poleceń). Potrzebuje jednego z programów aplay lub sox (wykrywane są automatycznie).
milena_say [opcje] [tekst]
milena_say [opcje] -F <plik>
Jeśli nie podano opcji -F ani tekstu, będzie on odczytany
ze standardowego wejścia. W przypadku czytania ze standardowego
wejścia lub pliku tekst musi być zakodowany w ISO-8859-2.
Submixer to program umożliwiający zgranie oryginalnej ścieżki dźwiękowej filmu z czytanymi przez Milenę napisami oraz utworzenie nowego pliku, zawierającego zmiksowany materiał. Ponieważ submixer automatycznie dopasowuje poziom głośności oryginalnej ścieżki do poziomu czytanego tekstu, a jednocześnie dba o to, aby poza dialogami poziom oryginału był wysoki, komfort oglądania (i słuchania) filmu jest dużo wyższy niż przy stosowaniu programów czytających bezpośrednio napisy (np. subplayer). Również automatyczna regulacja tempa czytania w miejscach zagęszczenia dialogów pozwala na bardziej prawidłową synchronizację czytanego tekstu z oryginałem. Dzięki submixerowi można również oglądać filmy z lektorem np. na telefonach komórkowych (czytanie napisów w rozdzielczości 320x240 jest niespecjalnie wygodne).
Aby utworzyć film z wgranymi napisami, należy najpierw skonwertować napisy na jedyny znany submixerowi format JACOsub oraz zrzucić oryginalną ścieżkę audio do pliku wav. Można to zrobić pojedynczym poleceniem, np.:
mplayer -dumpjacosub -ao pcm:fast -vo null -vc null -sub napisy.txt film.avi
(bliższe informacje - patrz dokumentacja mplayera). Po wykonaniu tego polecenia
w bieżącym katalogu pojawią się pliki audiodump.wav i dumpsub.jss.
Plik dumpsub.jss należy teraz przejrzeć, usunąć zbędne linie oraz połączyć następujące po sobie kwestie, a następnie zapisać w kodowaniu ISO-8859-2. W najprostszym przypadku można po prostu przepuścić plik przez milenizer, np:
milenizer -o dumpsub_jss.txt dumpsub.jss
Najlepszym sposobem będzie jednak wykorzystanie Mileny ABC, która pozwoli na szybką edycję pliku oraz utworzenie słownika obcojęzycznych zwrotów. Dodatkowo w Milenie ABC planowane jest częściowe zautomatyzowanie edycji napisów (kod automatycznie łączący kwestie w całość jest w fazie eksperymentalnej).
Uwaga!
Mplayer czasem potrafi przy dumpjacosub wypluć nieprawidłową linię TIMERES (np. TIMERES wynosi 25,
a rzeczywista rozdzielczośc 100). Taki przypadek można wykryć od razu patrząc na początek pliku:
jeśli w pierwszej linii jest #TIMERES=25 (lub zamiast 25 inna liczba różna od 100),
a w dalszej części występują zapisy np. 00:11:22.32 (ostatni człon oznaczający ilość jednostek
czasowych jest nie mniejszy niż TIMERES) należy po prostu zmienić wartość w pierwszej linii na 100.
Teraz można przystąpić do tworzenia ścieżki audio. Wydajemy polecenie (przykładowo):
milena_submixer -u dumpsub_jss.dic audiodump.wav dumpsub_jss.txt newaudio.wav
Proces tworzenia ścieżki dźwiękowej potrwa kilka minut. Po jego zakończeniu możemy sprawdzić poprawność odtwarzając plik w mplayerze:
mplayer -audiofile newaudio.wav film.avi
Wynikowy plik wav będzie miał te same parametry (wielkość, częstotliwość próbkowania, ilośc kanałów) jak plik źródłowy. Jedynym ograniczeniem jest tu ilość kanałów (maksymalnie dwa, czyli mono lub stereo).
Teraz można już stworzyć wynikowy film. Tworzymy go za pomocą mencodera, przykładowo:
mencoder -audiofile newaudio.wav -oac mp3lame -lameopts cbr:br=128:mode=3 \
-ovc copy film.avi -o nowy_film.avi
Ponieważ wspominałem o tworzeniu wersji dla komórki, oto przykładowy skrypt tworzący film w formacie strawnym dla Nokii (w rozdzielczości 320x240):
#!/bin/bash
a=`ffmpeg -i "$1" 2>&1 | grep 'Stream.*Video' 2>/dev/null | tr ',' ' '`
w=""
h=""
if [ "$a" != "" ] ; then
for b in $a; do
if echo -n $b | grep -E '^[0-9]+x[0-9]+$' ; then
w=`echo $b | cut -dx -f1`
h=`echo $b | cut -dx -f2`
break
fi
done
fi
if [ "$#" != 2 ] && [ "$#" != "3" ] ; then
echo Sposób użycia: $0 '<infile> <outfile.3gp> [audiotrack.wav]'
exit 1
fi
left=0
top=0
rite=0
bot=0
let "th=($h*320)/$w"
if let "$th>=180" ; then
let "top=(240-$th)/2"
let "bot=240-(th+top)"
else
top=30
bot=30
th=180
let "nw=($h*16)/9"
let "left=($w-$nw)/2"
let "rite=$w-($nw+$left)"
let "left=2*($left/2)"
let "rite=2*($rite/2)"
fi
echo $left $rite $top $bot
let "tw=320+$left+$rite"
sx=""
if [ $left != "0" ] ; then
sx="$sx -cropleft "$left
fi
if [ $rite != "0" ] ; then
sx="$sx -cropright "$rite
fi
if [ $top != "0" ] ; then
sx="$sx -padtop "$top
fi
if [ $bot != "0" ] ; then
sx="$sx -padbottom "$bot
fi
if [ "$3" != "" ] ; then
ffmpeg -i "$1" -s ${tw}x${th} -i "$3" -map 0:1 -map 1:0 \
-vcodec mpeg4 -acodec libfaac \
$sx -r 15 -y -aspect 4:3 "$2"
else
ffmpeg -i "$1" -s ${tw}x${th} -vcodec mpeg4 -acodec libfaac \
$sx -r 15 -y -aspect 4:3 "$2"
fi
Uwaga!
Przy pierwszym uruchomieniu zostanie utworzony plik
~/.milena_submixer (dokładny opis znaczenia poszczególnych wartości w załączonym
pliku README). O ile domyślne parametry regulacju głośności powinny być prawidłowe, o tyle wartości
tempa i wysokości głosu należy dopasować do swoich upodobań.