préciser le temps pris par la conversion en sous titre
This commit is contained in:
parent
0b79f0799d
commit
4ce54d002c
10
README.md
10
README.md
@ -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=`
|
||||||
|
@ -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"
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user