Browse Source

add website style

master
Tykayn 1 year ago committed by tykayn
parent
commit
590fcfd6ff
  1. 1
      .gitignore
  2. 2
      Makefile
  3. 4
      conversion_simple_fr.py
  4. 32
      flac_to_wav.sh
  5. 0
      input/aside/demo.wav
  6. 0
      input/ydl/.gitkeep
  7. 89
      inputs_to_wav.sh
  8. 32
      mkv_to_wav.sh
  9. 32
      mp3_to_wav.sh
  10. 32
      mp4_to_wav.sh
  11. 32
      ogg_to_wav.sh
  12. 57
      transcript.sh
  13. 24
      webm_to_wav.sh
  14. 25
      website/_foot.php
  15. 13
      website/_head.php
  16. 1
      website/bulma.min.css
  17. 64
      website/download.php
  18. 53
      website/index.php
  19. 9
      website/youtube-dl.sh

1
.gitignore vendored

@ -12,3 +12,4 @@
/output/**/*.csv
/output/**/*.json
/output/**/*.srt
.idea

2
Makefile

@ -1,6 +1,8 @@
default: install
install:
bash install.sh
wav:
bash inputs_to_wav.sh
convert:
bash transcript.sh $(args)
srt:

4
conversion_simple_fr.py

@ -6,11 +6,13 @@ import os
import wave
SetLogLevel(0)
print(" ------- conversion simple de", sys.argv[1])
if not os.path.exists("models/fr"):
print ("Please download the model from https://alphacephei.com/vosk/models and unpack as 'models' in the current folder.")
exit (1)
wf = wave.open(sys.argv[1], "rb")
if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
print ("Audio file must be WAV format mono PCM.")
@ -25,7 +27,5 @@ while True:
break
if rec.AcceptWaveform(data):
print(rec.Result())
#else:
# print(rec.PartialResult())
print(rec.FinalResult())

32
flac_to_wav.sh

@ -1,32 +0,0 @@
#!/bin/bash
# utilisation: bash flac_to_wav.sh
# auteur du script: tykayn contact@cipherbliss.com
echo "########### conversion des fichiers audio .flac placés dans le dossier input, vers du wav mono-piste uniquement dans le dossier input/converted_to_wav"
echo " "
cd input
mkdir already_converted
for i in *.flac; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%flac}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
echo " "
echo "########### OK "
echo "########### fichiers flac restant dans le dossier input "
ls -l *.flac
cd ..
echo " "
COUNT_LINES_ORIGIN=$(ls -l input/*.flac |wc -l)
COUNT_LINES=$(ls -l input/converted_to_wav |wc -l)
echo "########### fichiers flac dans le dossier input: $COUNT_LINES_ORIGIN "
echo "########### fichiers wav dans le dossier input/converted_to_wav: $COUNT_LINES "
echo "########### conversion faite dans output/converted_out_without_nulls.txt"
exit 0

0
input/demo.wav → input/aside/demo.wav

0
input/ydl/.gitkeep

89
inputs_to_wav.sh

@ -0,0 +1,89 @@
#!/bin/bash
# utilisation: bash inputs_to_wav.sh
# auteur du script: tykayn contact@cipherbliss.com
echo "########### conversion des fichiers audio (mkv, mp3, mp4, ogg, webm, wav, avi) placés dans le dossier input, vers du wav mono-piste uniquement dans le dossier input/converted_to_wav"
echo " "
cd input
if -f already_converted; then
mkdir already_converted
fi
for i in *.avi; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%avi}wav"
echo " converti en WAV, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
for i in *.flac; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%flac}wav"
echo " converti en WAV, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
for i in *.mkv; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%mkv}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
for i in *.mp3; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%mp3}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
for i in *.mp4; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%mp4}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
for i in *.ogg; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%ogg}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
for i in *.webm; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%webm}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
for i in *.wav; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%wav}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
COUNT_LINES=$(ls -l input/converted_to_wav | wc -l)
echo "########### fichiers wav dans le dossier input/converted_to_wav: $COUNT_LINES "
echo "########### conversion faite dans output/converted_out_without_nulls.txt"
exit 0

32
mkv_to_wav.sh

@ -1,32 +0,0 @@
#!/bin/bash
# utilisation: bash mkv_to_wav.sh
# auteur du script: tykayn contact@cipherbliss.com
echo "########### conversion des fichiers audio .mkv placés dans le dossier input, vers du wav mono-piste uniquement dans le dossier input/converted_to_wav"
echo " "
cd input
mkdir already_converted
for i in *.mkv; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%mkv}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
echo " "
echo "########### OK "
echo "########### fichiers mkv restant dans le dossier input "
ls -l *.mkv
cd ..
echo " "
COUNT_LINES_ORIGIN=$(ls -l input/*.mkv |wc -l)
COUNT_LINES=$(ls -l input/converted_to_wav |wc -l)
echo "########### fichiers mkv dans le dossier input: $COUNT_LINES_ORIGIN "
echo "########### fichiers wav dans le dossier input/converted_to_wav: $COUNT_LINES "
echo "########### conversion faite dans output/converted_out_without_nulls.txt"
exit 0

32
mp3_to_wav.sh

@ -1,32 +0,0 @@
#!/bin/bash
# utilisation: bash mp3_to_wav.sh
# auteur du script: tykayn contact@cipherbliss.com
echo "########### conversion des fichiers audio .mp3 placés dans le dossier input, vers du wav mono-piste uniquement dans le dossier input/converted_to_wav"
echo " "
cd input
mkdir already_converted
for i in *.mp3; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%mp3}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
echo " "
echo "########### OK "
echo "########### fichiers mp3 restant dans le dossier input "
ls -l *.mp3
cd ..
echo " "
COUNT_LINES_ORIGIN=$(ls -l input/*.mp3 |wc -l)
COUNT_LINES=$(ls -l input/converted_to_wav |wc -l)
echo "########### fichiers mp3 dans le dossier input: $COUNT_LINES_ORIGIN "
echo "########### fichiers wav dans le dossier input/converted_to_wav: $COUNT_LINES "
echo "########### conversion faite dans output/converted_out_without_nulls.txt"
exit 0

32
mp4_to_wav.sh

@ -1,32 +0,0 @@
#!/bin/bash
# utilisation: bash mp4_to_wav.sh
# auteur du script: tykayn contact@cipherbliss.com
echo "########### conversion des fichiers audio .mp4 placés dans le dossier input, vers du wav mono-piste uniquement dans le dossier input/converted_to_wav"
echo " "
cd input
mkdir already_converted
for i in *.mp4; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%mp4}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
echo " "
echo "########### OK "
echo "########### fichiers mp4 restant dans le dossier input "
ls -l *.mp4
cd ..
echo " "
COUNT_LINES_ORIGIN=$(ls -l input/*.mp4 |wc -l)
COUNT_LINES=$(ls -l input/converted_to_wav |wc -l)
echo "########### fichiers mp4 dans le dossier input: $COUNT_LINES_ORIGIN "
echo "########### fichiers wav dans le dossier input/converted_to_wav: $COUNT_LINES "
echo "########### conversion faite dans output/converted_out_without_nulls.txt"
exit 0

32
ogg_to_wav.sh

@ -1,32 +0,0 @@
#!/bin/bash
# utilisation: bash ogg_to_wav.sh
# auteur du script: tykayn contact@cipherbliss.com
echo "########### conversion des fichiers audio .ogg placés dans le dossier input, vers du wav mono-piste uniquement dans le dossier input/converted_to_wav"
echo " "
cd input
mkdir already_converted
for i in *.ogg; do
echo "fichier à traiter: $i"
ffmpeg -i "$i" -ac 1 "converted_to_wav/${i%ogg}wav"
echo " converti en WAv, déplacement dans le dossier input/already_converted"
mv "$i" already_converted/
done
echo " "
echo "########### OK "
echo "########### fichiers ogg restant dans le dossier input "
ls -l *.ogg
cd ..
echo " "
COUNT_LINES_ORIGIN=$(ls -l input/*.ogg |wc -l)
COUNT_LINES=$(ls -l input/converted_to_wav |wc -l)
echo "########### fichiers ogg dans le dossier input: $COUNT_LINES_ORIGIN "
echo "########### fichiers wav dans le dossier input/converted_to_wav: $COUNT_LINES "
echo "########### conversion faite dans output/converted_out_without_nulls.txt"
exit 0

57
transcript.sh

@ -2,11 +2,18 @@
# utilisation: bash transcript.sh MONFICHIER.wav
# auteur du script: tykayn contact@cipherbliss.com
if [ $1 ]; then
file=$1
fi
echo "########### $(date) : conversion de fichier audio .WAV mono piste uniquement,
avec Vosk installé par pip3, et un modèle de textes en français."
echo " "
echo "########### $(date) : fichier : $file"
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é
@ -24,8 +31,11 @@ fi
if [ -f "$file" ]; then
echo "$file exists."
else
echo "########### $(date) : [ERREUR] fichier introuvable: $file"
echo "########### $(date) : [ERREUR] voici les fichiers disponibles dans input/converted_to_wav: "
echo " "
ls -l input/converted_to_wav
echo " "
echo "########### $(date) : [ERREUR] le fichier $file n'existe PAS :C "
exit 1
fi
@ -33,31 +43,34 @@ echo " "
FILE_NAME=$(basename $file .wav)
OUT_DIR=$( echo "output/$FILE_NAME")
mkdir output/$FILE_NAME
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
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
python3 ./conversion_simple_fr.py "$file" > $OUT_DIR/0_output_$FILE_NAME.json
echo " "
echo "########### $(date) : nettoyer la sortie "
jq .text $OUT_DIR/0_output_$FILE_NAME.json > $OUT_DIR/1_converted_$FILE_NAME.txt
echo " "
echo "########### $(date) : nettoyer la sortie "
jq .text $OUT_DIR/0_output_$FILE_NAME.json > $OUT_DIR/1_converted_$FILE_NAME.txt
sed 's/null//g' $OUT_DIR/1_converted_$FILE_NAME.txt > $OUT_DIR/2_without_nulls_$FILE_NAME.txt
sed 's/^ *//; s/ *$//; /^$/d' $OUT_DIR/2_without_nulls_$FILE_NAME.txt > $OUT_DIR/3_without_nulls_$FILE_NAME.txt
sed 's/\"//g' $OUT_DIR/3_without_nulls_$FILE_NAME.txt > $OUT_DIR/4_phrases_$FILE_NAME.txt
echo "########### $(date) : OK "
echo " "
COUNT_LINES=$(cat $OUT_DIR/4_phrases_$FILE_NAME.txt |wc -l)
cat $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
sed 's/null//g' $OUT_DIR/1_converted_$FILE_NAME.txt > $OUT_DIR/2_without_nulls_$FILE_NAME.txt
sed 's/^ *//; s/ *$//; /^$/d' $OUT_DIR/2_without_nulls_$FILE_NAME.txt > $OUT_DIR/3_without_nulls_$FILE_NAME.txt
sed 's/\"//g' $OUT_DIR/3_without_nulls_$FILE_NAME.txt > $OUT_DIR/4_phrases_$FILE_NAME.txt
echo "########### $(date) : OK "
echo " "
COUNT_LINES=$(cat $OUT_DIR/4_phrases_$FILE_NAME.txt |wc -l)
cat $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
echo "########### $(date) : conversion de la sortie en fichier de sous titres "
python3 ./extract_srt.py "$file" > $OUT_DIR/5_output_$FILE_NAME.srt
ls -l $OUT_DIR

24
webm_to_wav.sh

@ -0,0 +1,24 @@
#!/bin/bash
# utilisation: bash webm_to_wav.sh
# auteur du script: tykayn contact@cipherbliss.com
echo "########### conversion des fichiers audio .webm placés dans le dossier input, vers du wav mono-piste uniquement dans le dossier input/converted_to_wav"
echo " "
cd input
mkdir already_converted
echo " "
echo "########### OK "
echo "########### fichiers webm restant dans le dossier input "
ls -l *.webm
cd ..
echo " "
COUNT_LINES_ORIGIN=$(ls -l input/*.webm |wc -l)
COUNT_LINES=$(ls -l input/converted_to_wav |wc -l)
echo "########### fichiers webm dans le dossier input: $COUNT_LINES_ORIGIN "
echo "########### fichiers wav dans le dossier input/converted_to_wav: $COUNT_LINES "
echo "########### conversion faite dans output/converted_out_without_nulls.txt"
exit 0

25
website/_foot.php

@ -0,0 +1,25 @@
</main>
<section class="container footer has-background-black has-text-grey-light">
<div class="columns">
<div class="column">
<h1 class="title is-2">Confidentialité</h1>
ce site utilise youtube-dl pour récupérer la vidéo à transcrire et travailler dessus sur le serveur où cette page
est installée.
Ce site ne contient aucun tracker, les fichiers audio et vidéo téléchargés sont supprimés régulièrement, aucun usage de ce que vous mettez sur ce site autre que pour transcrire de l'audio n'est opéré.
Vous pouvez aussi installer sur votre propre machine ce logiciel libre sous licence GNU affero v3.
</div>
<div class="column">
<h1 class="title is-2">Sources</h1>
<a href="https://forge.chapril.org/tykayn/transcription">
Sources: Transcription sur la forge du chapril. </a>
<br>Ceci est un logiciel libre, vous pouvez l'améliorer et examiner
son fonctionnement comme bon vous semble.
</div>
</div>
</section>
</main>
</body>
</html>

13
website/_head.php

@ -0,0 +1,13 @@
<html>
<head>
<title>
Transcription vosk
</title>
<link rel="stylesheet" type="text/css" href="./bulma.min.css"/>
</head>
<body>
<main class='main'>
<div class="container">
<h1 class="title is-2">Transcription Vosk</h1>
</div>

1
website/bulma.min.css vendored

File diff suppressed because one or more lines are too long

64
website/download.php

@ -1,27 +1,55 @@
<?php
include( '_head.php' );
/**
* récupération d'une vidéo par youtube dl et conversion
*/
/**
* @param $cmd
*
* @return bool
*/
function command_exist( $cmd ) {
$return = shell_exec( sprintf( "which %s", escapeshellarg( $cmd ) ) );
return ! empty( $return );
}
if ( isset( $_POST[ 'url' ] ) ) {
// sanitize input
$url = $_POST[ 'url' ];
echo "récupération de la vidéo à l'url " . $url . " ... <br>";
// if (!command_exist('youtube-dl')) {
// print '[Erreur] pas de commande youtube-dl installée sur ce serveur';
// } else {
$uniqid = time();
# exemple url https://peertube.cipherbliss.com/videos/watch/e6a37508-042e-4d83-8598-5d36b764bb3d
shell_exec( 'bash youtube-dl.sh ' . $uniqid . ' ' . $url );
// shell_exec('youtube-dl --extract-audio --audio-format flac --audio-quality 0 --output "../input/ydl/$time.flac" '.$url);
// shell_exec('youtube-dl --extract-audio --audio-format flac --audio-quality 0 --output "../input/ydl/%(title)s_audio.%(ext)s" '.$url);
// récup du nom de fichier
echo "récupération de la vidéo OK " . $url . ". <br>";
function command_exist($cmd) {
$return = shell_exec(sprintf("which %s", escapeshellarg($cmd)));
return !empty($return);
}
if(isset($_POST['url'])){
// sanitize input
echo "Conversion de la vidéo" . $url . "... <br>";
$url = $_POST['url'];
echo "Vous pouvez télécharger vos fichiers.<br>";
echo "récupération de la vidéo à l'url " . $url. " ... <br>";
$dir = scandir( '../input/ydl' );
var_dump( $dir );
// }
if (!command_exist('youtube-dl')) {
print '[Erreur] pas de commande youtube-dl installée sur ce serveur';
} else {
shell_exec('youtube-dl -i -f best --output "../input/ydl/%(title)s.%(ext)s" '.$url);
}
}else{
echo "pas d'url envoyée. Vérifiez le formulaire. <a href='index.php'>Retour</a>";
}
} else {
echo "pas d'url envoyée. Vérifiez le formulaire. <a href='index.php'>Retour</a>";
}
include( 'website/run.php' );
include( '_foot.php' );

53
website/index.php

@ -1,32 +1,27 @@
<?php
include( 'website/download.php' );
?>
<html>
<head>
<title>
Transcription vosk
</title>
</head>
<body>
include( '_head.php' );
?>
<section class="hero is-info is-large">
<div class="hero-body">
<div class="container">
<main class='container'>
<h1>Transcription</h1>
<section>
Donnez l'url de la vidéo à transcrire.
<form action='download.php' method='post' >
<input type='text' name='url'>
<button type='submit'>Envoyer</button>
</form >
</section>
<section class='result'>
Voici votre fichier de sous titres:
<p class="title">
Conversion d'audio ou de vidéo en texte
</p>
<p class="subtitle">
Transcrire en Français avec une URL
<form action='download.php' method='post'>
<input class="input is-block" type='text' name='url'
value="https://peertube.cipherbliss.com/videos/watch/e6a37508-042e-4d83-8598-5d36b764bb3d">
<br>
<button class="button is-primary" type='submit'>Envoyer</button>
</form>
</div>
</p>
</div>
</section>
</section>
<section>
<h1>Vie privée</h1>
ce site utilise youtube-dl pour récupérer la vidéo à transcrire et travailler dessus sur le serveur où cette page est installée.
Vous pouvez aussi installer sur votre propre machine ce logiciel libre sous licence GNU affero v3.
</section>
</main>
</body>
</html>
<?php
include( '_foot.php' );
?>

9
website/youtube-dl.sh

@ -0,0 +1,9 @@
#!/bin/bash
UNIQID=$1
URL=$2
OUTPUT="../input/ydl/$UNIQID.flac"
youtube-dl --extract-audio --audio-format flac --audio-quality 0 --output $OUTPUT $URL
mkdir ../input/ydl/$UNIQID
ffmpeg -i "../input/ydl/$UNIQID" -ac 1 "../input/ydl/'.$UNIQID.'.wav"
Loading…
Cancel
Save