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.
Screen Shot 2015-11-07 at 13.34.23.png

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 :lol: :lol:

Re: Rada pro Automator

Napsal: 10 lis 2015 23:33
od MichalJ
PatkaJR píše:
Za 22$ se mi to nechce kupovat :lol: :lol:
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