Browse Source

préciser le temps pris par la conversion en sous titre

master
Tykayn 3 months ago committed by tykayn
parent
commit
4ce54d002c
  1. 10
      README.md
  2. 14
      extract_srt.py
  3. 61
      transcript.sh

10
README.md

@ -15,6 +15,7 @@ configuration pour transcrire des fichiers audio wav avec Vosk
* youtube-dl si vous souhaitez utiliser le website
* 4Go de ram, 2Go serait trop juste pour utiliser le modèle fr par défaut.
* testé sur Ubuntu 20.04
pour les installer avec aptitude
```
sudo apt install jq python3-pip git ffmpeg
@ -26,13 +27,16 @@ git clone https://forge.chapril.org/tykayn/transcription.git && cd transcription
```
* installer vosk via le MakeFile, vérifiez les prérequis ci-dessus. une fois dans votre dossier de transcription fraîchement cloné, faites la commande:
```
```bash
make
```
* mettre un fichier audio dans le dossier "input"
* le convertir en wav mono (avec audacity par exemple)
* lancer la transcription du wav mono. Une démo est disponible, extraite de l'émission Libre à vous!
* le convertir en wav mono
```bash
make wav
```
* lancer la transcription du wav mono. Une démo est disponible, extraite de l'émission Libre à vous!
```bash
make convert file=input/demo.wav
```
n'oubliez pas l'argument `file=`

14
extract_srt.py

@ -8,12 +8,16 @@ import json
import argparse
from collections import namedtuple
from pprint import pprint
import time
try:
from tqdm import tqdm
tqdm_installed = True
except:
tqdm_installed = False
start_time = time.time()
MODEL_LANG="fr"
class SubPart:
def __init__(self, start, end, text):
@ -92,7 +96,7 @@ def gen_subparts(input_file, model_dir, verbose=False, partlen=4, progress=False
else:
pass
#print(rec.PartialResult())
#pprint(rec.PartialResult())
# pprint(rec.PartialResult())
if progress:
pbar.close()
r = json.loads(rec.PartialResult())
@ -115,18 +119,20 @@ def create_parser():
def main():
args = create_parser().parse_args()
if tqdm_installed:
it = enumerate(gen_subparts(args.input, "models/fr", args.verbose, args.interval, args.progress))
it = enumerate(gen_subparts(args.input, "models/"+MODEL_LANG, args.verbose, args.interval, args.progress))
else:
it = enumerate(gen_subparts(args.input, "models/fr", args.verbose, args.interval, False))
it = enumerate(gen_subparts(args.input, "models/"+MODEL_LANG, args.verbose, args.interval, False))
for i,subpart in it:
n = i+1
args.output.write(f"""{n}
{subpart}
"""
)
)
if __name__ == "__main__":
main()
print ("script extract_srt done in : ")
print (time.time() - start_time), "seconds"

61
transcript.sh

@ -1,10 +1,38 @@
#!/bin/bash
# utilisation: bash transcript.sh MONFICHIER.wav
# auteur du script: tykayn contact@cipherbliss.com
# ```bash
# bash transcript.sh myfile fr 1
# ```
echo " Transcript of a file - [file relative path \"input/aside/demo.wav\"] [lang en or fr] [enable srt conversion 1 or 0]"
# ----------------- Default parameters -----------------
#ENABLE_SRT=false
ENABLE_SRT=true
# disponibles: "fr" ou "en", trouvez d'autres modèles prédéfinis https://alphacephei.com/vosk/models
FOLDER_MODEL="fr"
#FOLDER_MODEL="en"
DEFAULT_FILE_TO_TRANSCRIPT="input/aside/demo.wav"
STARTTIME=$(date +%s)
# ----------------- prise en compte des arguments rentrés par l'utilisateur
if [ $1 ]; then
file=$1
else
echo "utilisation du fichier de démo"
file=$DEFAULT_FILE_TO_TRANSCRIPT
fi
if [ $2 ]; then
lang_to_search=$2
else
lang_to_search=$FOLDER_MODEL
fi
if [ $3 ]; then
ENABLE_SRT=$3
else
ENABLE_SRT=$ENABLE_SRT
fi
echo " [file name]: $file, [lang]: $lang_to_search, [enable srt conversion]: $ENABLE_SRT."
FILE_NAME=$(basename $file .wav)
@ -19,23 +47,19 @@ echo "########### $(date) : conversion de fichier audio .WAV mono piste uniqueme
echo " "
echo "########### $(date) : fichier : $file : $1"
#FOLDER_MODEL="fr" # disponibles: "fr" ou "en"
ENABLE_SRT=false
#ENABLE_SRT=true
FOLDER_MODEL="fr"
# existence du modèle demandé
if [ -d "models/$FOLDER_MODEL" ]; then
echo "models/$FOLDER_MODEL le modèle est bien présent."
# ----------------- recherche de l'existence du modèle de langue demandé -----------------
if [ -d "models/$lang_to_search" ]; then
echo "models/$lang_to_search le modèle est bien présent."
else
pwd
ls -l models
echo " "
echo "########### $(date) : [ERREUR] le modèle de données dans models/$FOLDER_MODEL n'existe pas, vérifiez son installation :C peut être avez vous oublié de faire une commande 'make'"
echo "########### $(date) : [ERREUR] le modèle de données dans models/$lang_to_search n'existe pas, vérifiez son installation :C peut être avez vous oublié de faire une commande 'make'"
exit 1
fi
# existence du fichier demandé
# ----------------- existence du fichier demandé -----------------
if [ -f "$file" ]; then
echo "$file exists."
else
@ -49,11 +73,16 @@ else
fi
echo " "
mkdir output/$FILE_NAME
mkdir output/$FILE_NAME -p
echo " convertir en sous titre ? $ENABLE_SRT"
if ($ENABLE_SRT) ; then
echo "########### $(date) : conversion de la sortie en fichier de sous titres .srt"
python3 ./extract_srt.py "$file" > $OUT_DIR/5_output_$FILE_NAME.srt
python3 ./extract_srt.py "$file" > $OUT_DIR/6_output_$FILE_NAME.srt
cat $OUT_DIR/6_output_$FILE_NAME.srt
COUNT_LINES=$(cat $OUT_DIR/6_output_$FILE_NAME.srt |wc -l)
echo " "
echo "-------------- DONE ------------"
echo " $COUNT_LINES lines in $OUT_DIR/6_phrases_min_sec.srt"
else
echo "########### $(date) : conversion de la sortie en divers fichiers marquant les temps et sans marquage"
python3 ./conversion_simple_fr.py "$file" > $OUT_DIR/0_output_$FILE_NAME.json
@ -69,17 +98,17 @@ else
echo " "
COUNT_LINES=$(cat $OUT_DIR/4_phrases_$FILE_NAME.txt |wc -l)
cat $OUT_DIR/4_phrases_$FILE_NAME.txt
echo " $COUNT_LINES lines in $OUT_DIR/4_phrases_$FILE_NAME.txt"
echo " "
echo "########### $(date) : lignes transcriptes $COUNT_LINES "
echo "########### $(date) : conversion faite dans output/converted_out_without_nulls.txt"
echo "########### $(date) : conversion de la sortie en pseudo fichier de sous titres"
perl clean.sh $OUT_DIR/0_output_$FILE_NAME.json > $OUT_DIR/5_phrases_min_sec_$FILE_NAME.txt
cat $OUT_DIR/5_phrases_min_sec.srt
fi
fi
#ls -l $OUT_DIR
ls -l $OUT_DIR
echo "########### $(date) : conversion faite "
echo "########### $(STARTTIME) -- $(date) : conversion faite "
echo "########### en $SECONDS seconds"
exit 0

Loading…
Cancel
Save