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

This commit is contained in:
Tykayn 2022-04-12 10:17:44 +02:00 committed by tykayn
parent 0b79f0799d
commit 4ce54d002c
3 changed files with 62 additions and 23 deletions

View File

@ -15,6 +15,7 @@ configuration pour transcrire des fichiers audio wav avec Vosk
* youtube-dl si vous souhaitez utiliser le website * youtube-dl si vous souhaitez utiliser le website
* 4Go de ram, 2Go serait trop juste pour utiliser le modèle fr par défaut. * 4Go de ram, 2Go serait trop juste pour utiliser le modèle fr par défaut.
* testé sur Ubuntu 20.04 * testé sur Ubuntu 20.04
pour les installer avec aptitude pour les installer avec aptitude
``` ```
sudo apt install jq python3-pip git ffmpeg 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: * 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 make
``` ```
* mettre un fichier audio dans le dossier "input" * mettre un fichier audio dans le dossier "input"
* le convertir en wav mono (avec audacity par exemple) * le convertir en wav mono
* lancer la transcription du wav mono. Une démo est disponible, extraite de l'émission Libre à vous! ```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 make convert file=input/demo.wav
``` ```
n'oubliez pas l'argument `file=` n'oubliez pas l'argument `file=`

View File

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

View File

@ -1,10 +1,38 @@
#!/bin/bash #!/bin/bash
# utilisation: bash transcript.sh MONFICHIER.wav # utilisation: bash transcript.sh MONFICHIER.wav
# auteur du script: tykayn contact@cipherbliss.com # 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 if [ $1 ]; then
file=$1 file=$1
else
echo "utilisation du fichier de démo"
file=$DEFAULT_FILE_TO_TRANSCRIPT
fi 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) FILE_NAME=$(basename $file .wav)
@ -19,23 +47,19 @@ echo "########### $(date) : conversion de fichier audio .WAV mono piste uniqueme
echo " " echo " "
echo "########### $(date) : fichier : $file : $1" 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é # ----------------- recherche de l'existence du modèle de langue demandé -----------------
if [ -d "models/$FOLDER_MODEL" ]; then if [ -d "models/$lang_to_search" ]; then
echo "models/$FOLDER_MODEL le modèle est bien présent." echo "models/$lang_to_search le modèle est bien présent."
else else
pwd pwd
ls -l models ls -l models
echo " " 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 exit 1
fi fi
# existence du fichier demandé # ----------------- existence du fichier demandé -----------------
if [ -f "$file" ]; then if [ -f "$file" ]; then
echo "$file exists." echo "$file exists."
else else
@ -49,11 +73,16 @@ else
fi fi
echo " " echo " "
mkdir output/$FILE_NAME mkdir output/$FILE_NAME -p
echo " convertir en sous titre ? $ENABLE_SRT" echo " convertir en sous titre ? $ENABLE_SRT"
if ($ENABLE_SRT) ; then if ($ENABLE_SRT) ; then
echo "########### $(date) : conversion de la sortie en fichier de sous titres .srt" 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 else
echo "########### $(date) : conversion de la sortie en divers fichiers marquant les temps et sans marquage" 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 python3 ./conversion_simple_fr.py "$file" > $OUT_DIR/0_output_$FILE_NAME.json
@ -69,17 +98,17 @@ else
echo " " echo " "
COUNT_LINES=$(cat $OUT_DIR/4_phrases_$FILE_NAME.txt |wc -l) COUNT_LINES=$(cat $OUT_DIR/4_phrases_$FILE_NAME.txt |wc -l)
cat $OUT_DIR/4_phrases_$FILE_NAME.txt cat $OUT_DIR/4_phrases_$FILE_NAME.txt
echo " $COUNT_LINES lines in $OUT_DIR/4_phrases_$FILE_NAME.txt"
echo " " echo " "
echo "########### $(date) : lignes transcriptes $COUNT_LINES " echo "########### $(date) : lignes transcriptes $COUNT_LINES "
echo "########### $(date) : conversion faite dans output/converted_out_without_nulls.txt" echo "########### $(date) : conversion faite dans output/converted_out_without_nulls.txt"
echo "########### $(date) : conversion de la sortie en pseudo fichier de sous titres" 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 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
echo "########### $(STARTTIME) -- $(date) : conversion faite "
ls -l $OUT_DIR echo "########### en $SECONDS seconds"
echo "########### $(date) : conversion faite "
exit 0 exit 0