Stránka 1 z 1
Rada pro Automator
Napsal: 06 lis 2015 20:54
od Miro_CZ
Dobrý večer,
je možné nějak v aplikaci Automator (nebo nějaké jiné, podobné) vytvořit funkci/aplikaci, která by uměla určitým způsobem upravit textový soubor? Poslední dobou mi nejde v přehrávači MPlayerX přidat k videu titulky, pokud nejsou v Unicode 8 kódování, tudíž musím všechny ručně přepisovat a poslední dobou mě to přestává bavit.
Zde je popis kroků, které by to mělo dělat:
1) Otevřít soubor v TextEdit
2) Duplikovat
3) Uložit...
4) Umazat z názvu (kopie) na konci názvu
5) Změnit kódování na Unicode 8
6) Potvrdit uložení
Je možné něco takového vytvořit? S Automatorem jsem nikdy nedělal, tak netuším jaké jsou jeho možnosti.
Předem děkuji za odpovědi
Re: Rada pro Automator
Napsal: 06 lis 2015 22:32
od MichalM.Mac
Placená aplikace Subtitles.app na automatické stažení titulků umí konvertovat rovnou po stažení. Doporučuji.
Mam na to vyrobený shell skript, který jsem dal do automatoru.
Jako
argumenty to bere buď přímo soubory titulků nebo složky, ve kterých je má vyhledávat.
Kód: Vybrat vše
#!/bin/bash
# Author: MichalM.Mac
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Config
export ENCODING_FROM='CP1250'
export ENCODING_TO='UTF-8'
SUB_EXTENSION='.srt'
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
error_printer() {
echo "$@" 1>&2;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
convert_sub_encoding(){
if file --mime-encoding "$1" | grep -iq "$ENCODING_TO"; then
error_printer "Error: File $1 is alredy encoded in $ENCODING_TO"
return
fi
mv "$1" "${1}_temp"
iconv -f "$ENCODING_FROM" -t "$ENCODING_TO" "${1}_temp" > "$1" && rm "${1}_temp"
}
find_subs(){
export -f error_printer
export -f convert_sub_encoding
find "$1" -name "*${SUB_EXTENSION}" -exec bash -c 'convert_sub_encoding "$0"' {} \;
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Main Body
if [ $# -eq 0 ]; then
echo "Error: No Aruments specified -> Nothing to do."
fi
# Postupné zpracování všech dodaných parametrů
while [ $# -gt 0 ]
do
if [ -d "$1" ]; then
find_subs "$1"
elif [ -f "$1" ]; then
convert_sub_encoding "$1"
else
error_printer "Error: $1 is not valid file or directory"
fi
shift
done
Případně to můžeš spouštět z terminálu.
Re: Rada pro Automator
Napsal: 07 lis 2015 11:29
od Miro_CZ
Děkuji za tip na aplikaci, ale raději si vybírám titulky sám, přece jenom jsou tady kvalitnější a méně kvalitní překladatelé..
Děkuji za kód, jen bych potřeboval trochu poradit, nasměrovat, co s ním mám dělat. Jak jsem psal výše, s Automatorem jsem nikdy nedělal..
Re: Rada pro Automator
Napsal: 07 lis 2015 13:30
od MichalM.Mac
Vytvoř si workflow podle obrázku. Podstatné je, aby Akce, která spouští kód (Run Shell script), dostala na vstup soubory.
Pokud to bude obyčejné workflow, budeš tam potřebovat něco jako
Ask for Finder Items.
V mém případě jde o Service workflow (služba), které spustím tak, že ve Finderu označím soubor(y), kliknu pravým tlačítkem myši -> Services -> UTFySubs (moje služba z Automatoru).
Přidávám ještě příklad pro Folder Action, kdy se skript spouští na všechny nově připadané soubory ve specifikované složce. Ty dvě filtrovací akce jsou tam asi trochu navíc, když je to ošetřeno ve skriptu, ale pro jistotu proč ne.
Re: Rada pro Automator
Napsal: 07 lis 2015 15:15
od Miro_CZ
Super děkuji moc. Moje první použití Automatoru bylo úspěšné a titulky se převedou dvěma kliknutími
Re: Rada pro Automator
Napsal: 07 lis 2015 15:32
od PatkaJR
MichalM.Mac píše:Placená aplikace Subtitles.app na automatické stažení titulků umí konvertovat rovnou po stažení. Doporučuji.
Za 22$ se mi to nechce kupovat
Re: Rada pro Automator
Napsal: 10 lis 2015 23:33
od MichalJ
PatkaJR píše:
Za 22$ se mi to nechce kupovat
Tohle nechápu. Pokud to dělá co potřebujete tak 22 USD není tak moc.
Re: Rada pro Automator
Napsal: 10 lis 2015 23:41
od PatkaJR
Vyřešil jsem to jinak. Nainstaloval jsem si rozšíření do VLC na stahování titulků a zdarma.
Re: Rada pro Automator
Napsal: 11 lis 2015 00:21
od MichalM.Mac
Dobré pro tebe. Co třeba zmínit, jak se rozšíření jmenuje?
Re: Rada pro Automator
Napsal: 11 lis 2015 00:26
od PatkaJR
Re: Rada pro Automator
Napsal: 25 úno 2021 19:20
od Miro_CZ
Ahoj, zkusím to tady po dlouhý době oživit. Přešel jsem na nový Mac a nedaří se mi v Automatoru vytvořit tohle workflow. Zkopíroval jsem kód od Michala, uložil jako Quick Action, služba se mi zobrazí při kliku pravým tlačítkem na soubor s titulky, něco asi proběhne, vyskočí mi notifikace, že se titulky převedly, ale se souborem jako takovým se nic nestane.
Nevíte někdo prosím, kde by mohl být problém? Je možné, že by se něco změnilo v OS Big Sur, že by shell skript najednou nefungoval?
Re: Rada pro Automator
Napsal: 25 úno 2021 21:58
od Miro_CZ
Vyřešeno. Smazal jsem všechno kromě samotného shell skriptu s Michalovým kódem a notifikace na konci a už to funguje. Z nějakého důvodu se tomu najednou přestalo líbit to filtrování na začátku.
Re: Rada pro Automator
Napsal: 05 pro 2021 16:02
od Miro_CZ
Ahoj, zkusím to tady ještě s jedním dotazem. Poslední dobou se začalo v titulcích objevovat {\an8} což by mělo zobrazit titulky v horní straně obrazovky, ale některé přehrávače si s tím neví rady a celý řádek s titulky to vynechá. Potřeboval bych tedy nějak do automatoru přidat funkci "najít a nahradit". Použil jsem AppleScript viz níže, ale zasekne se to na parametru udávajícím vyhledávaný string "{\an8}" a vyskočí chyba
"Syntaktická chyba. Očekáváno: „"“, ale nalezeno: neznámý token." Umíte mi někdo prosím poradit, jak skript opravit, aby fungoval?
Kód: Vybrat vše
use framework "Foundation"
use scripting additions
property NSString : a reference to current application's NSString
set stringToFind to "{\an8}"
set stringToReplace to ""
set theTextFile to (choose file of type {"public.plain-text"} default location (path to desktop))
set theContent to read theTextFile as text
set newContent to my replace_text(theContent, stringToFind, stringToReplace)
try
set fileRef to (open for access theTextFile with write permission)
set eof of fileRef to 0 # truncate file
write newContent to fileRef
close access fileRef
on error
close access fileRef
end try
return
on replace_text(atext, xfind, xreplace)
return ((NSString's stringWithString:atext)'s stringByReplacingOccurrencesOfString:xfind withString:xreplace) as text
end replace_text