From 4ce54d002c51acb9a86904ddce18d63277d8ccba Mon Sep 17 00:00:00 2001 From: Tykayn Date: Tue, 12 Apr 2022 10:17:44 +0200 Subject: [PATCH] =?UTF-8?q?pr=C3=A9ciser=20le=20temps=20pris=20par=20la=20?= =?UTF-8?q?conversion=20en=20sous=20titre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++--- extract_srt.py | 14 ++++++++---- transcript.sh | 61 +++++++++++++++++++++++++++++++++++++------------- 3 files changed, 62 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index a28ec80..1554198 100755 --- a/README.md +++ b/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=` diff --git a/extract_srt.py b/extract_srt.py index 603f83f..35070d4 100755 --- a/extract_srt.py +++ b/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" diff --git a/transcript.sh b/transcript.sh index 9e952d2..ca5182c 100755 --- a/transcript.sh +++ b/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 +#ls -l $OUT_DIR - -ls -l $OUT_DIR - -echo "########### $(date) : conversion faite " +echo "########### $(STARTTIME) -- $(date) : conversion faite " +echo "########### en $SECONDS seconds" exit 0