Prevod textu na reč a prevod textu na mp3

Sekcia: Programovanie 12.09 | 12:09
Avatar kamowski Linux Mint  Používateľ

Zdravím priatelia,  potrebujeme pomôcť s úpravou príkazu.
V článku Prevod textu na reč a prevod textu na mp3 píšem o príkaze:

for i in *.txt
do
    gtts-cli -f $i --lang sk --output $i-SK.mp3
    sleep 10m
done

Situácia:
1) je to cez nejaké google api, kde je limitovaná veľkosť spracovaných dát, teda celková veľkosť spracovaných dát.
2) v adresári, kde to spúšťam, je viac súborov označených 01.txt, 02.txt, ......
3) príkaz zoberie txt súbor, prevedie ho, počká (sleep), vezme ďalší txt súbor, prevedie, počká, ....
Problém:
Ak pri súbore 04.txt dosiahe limit spracovateľných dát pre toto sedenie, prevod do audia sa zastaví a ja to musím fyzicky skontrolovať, teda spustiť mp3 a pozrieť v txt, pokiaľ to je prevedené, a od toho miesta vytvoriť nový súbor na neskoršie spracovanie.

Cieľ:
Chcem upraviť príkaz tak, aby sám skontroloval, či previedol celý txt súbor. Ak nie, nech vymaže to neúplné (čo je plytvanie limitovaných dát) alebo ...., neviem, čo sa tu dá robiť

Viete mi s tým niekto, prosím, pomôcť ?
Hoci aj iným príkazom, ktorý môžem nechať pracovať v danom adresári a ja nemusím pri tom sedieť.
:)

    • RE: Prevod textu na reč a prevod textu na mp3 14.09 | 01:33
      Avatar Donsonsoft Ubuntu  Používateľ

      A čo keby si proste zistil napríklad koľko slov dokáže to api spracovať naraz a prispôsobil tomu tie txt súbory?

    • RE: Prevod textu na reč a prevod textu na mp3 14.09 | 13:52
      Avatar paldopice   Používateľ
      #!/bin/sh
      
      failed_list=/tmp/failed.lst
      
      rm -f $failed_list
      
      for file in *.txt; do
          gtts-cli -f $file --lang sk --output $file-SK.mp3
      
          if [ $? -ne 0 ]; then
              rm -f $file-SK.mp3
              echo "$file" >> $failed_list
              sleep 10m
          fi
      done
      
      failed="$(cat $failed_list | wc -l")
      
      if [ $filed -gt 0 ]; then
          echo "Number of failed conversions: $failed"
      fi
      
      • RE: Prevod textu na reč a prevod textu na mp3 14.09 | 15:49
        Avatar kamowski Linux Mint  Používateľ

        ďakujem za reakciu a skript

        1)
        uložil a spustil som to z kontextovej ponuky v Thunare,
        v adresári je 20 txt súborov
        01.txt urobil
        02. preskočil a zapísal do failed (neviem prečo)
        03. a 4. urobil
        05., 06., 07., 08., 09., zapísal do failed
        tu som to vypol, zrejme bol dosiahnutý limit

        2)
        v adresári som otvoril terminál, nakopíroval doň text skriptu a spustil
        výsledkom je:
        Error: 429 (Too Many Requests) from TTS API. Probable cause: Unknown

        áno, dosiahol limit, spustím to zase niekedy neskôr alebo zväčším sleep a nechám to bežať

        ps. po spustení z terminálu začal opäť od začiatku, začal konvertovať 01.txt
        keďže už dosiahol limit, hodil to do failed
        ale súbor 01.txt-SK.mp3, ktorý už bol vytvorený pri spustení z kontextovej ponuky Thunaru VYMAZAL!

        je to v poriadku, len to testujem, robil to aj ten pôvodný zápis, nie je to tam ošetrené a vedel som o tom

        ešte raz ďakujem za dopísanie toho skriptu, budem mať o niekoľko úkonov menej (vyhľadať koniec a vytvoriť nový txt súbor) :)

        • RE: Prevod textu na reč a prevod textu na mp3 14.09 | 21:08
          Avatar paldopice   Používateľ

          Tak to je logicke, ze ked to spustis bez nejakej upravy opat, tak to zacne vsetko konvertovat odznova.

          Takze bud konvertnute subory presunies, ale pridas kontrolu, ci uz je skovertovany:

          #!/bin/sh
          
          failed_list=/tmp/failed.lst
          
          rm -f $failed_list
          
          for file in *.txt; do
              test -f $file-SK.mp3 && continue
          
              gtts-cli -f $file --lang sk --output $file-SK.mp3
          
              if [ $? -ne 0 ]; then
                  rm -f $file-SK.mp3
                  echo "$file" >> $failed_list
                  sleep 10m
              fi
          done
          
          failed="$(cat $failed_list | wc -l)"
          
          if [ $failed -gt 0 ]; then
              echo "Number of failed conversions: $failed"
          fi

          Neviem, ako funguje ten prikaz gtts-cli, ale v linuxe to na 99% funguje tak, ze ak sa prikaz ukoci spravne, tak jeho exit kod je nula, inak je to nejake ine kladne cislo (ale to uz je na autorovi, aky error kod posle). Takze subory, ktore preskocil, treba skusit skonvertovat rucne.

    • RE: Prevod textu na reč a prevod textu na mp3 26.09 | 22:28
      Avatar kamowski Linux Mint  Používateľ

      je to lepšie, ešte raz ďakujem :)