Транскрибация в Linux + lifehack

от автора

Скрипт работает
Скрипт работает

Нет, это не ругательное слово (для тех, кто не в курсе). Транскрибация это перевод голоса в текст.

На протяжении нескольких лет я подрабатывал этим делом. Титры для видео (использовал subtitle editor), интервью, доклады, проповеди и т. п. По заказам речь переводил в текст.

Долго пытался автоматизировать этот процесс. Сейчас существует много сервисов, которые могли бы в этом помочь. Но, как выяснилось, в реальной работе эти сервисы не могут быть полезны. На записях шум, необычный выговор докладчика, качество самой записи не позволяли применить методы автоматического распознавания голоса и перевода речи в текст.

Тем не менее существенно облегчить труд может творческое отношение к процессу.

Во время транскрибации можно использовать любой аудио проигрыватель, который управляется с клавиатуры и показывает тайминг.

При записи текста обычно требуется указывать этот самый тайминг.

Если текст большой, хотелось бы иметь некоторую форму для записи этого текста, в которой тайминги уже указаны с некоторым периодом.

Это существенно помогает ориентироваться в тексте и в аудио записи.

При необходимости по тексту легко определить место в записи, чтобы перейти к нему для уточнения.

Обычно работа по транскрибации оплачивается по времени записи. Было бы удобно сразу после завершения работы видеть и сумму, которую вам должен будет заплатить заказчик.

Оказалось, что в Linux есть простое средство позволяющее создать небольшой скрипт, который может просмотреть аудио файл, определить его продолжительность и создать текстовый файл с указанием интервалов по 15 секунд. В конце файла может быть указана цена работы.

Это средство обыкновенный терминал и bash (Одна из наиболее популярных современных разновидностей командной оболочки UNIX).

Я далеко не программист. Но мне потребовалось всего пара дней для создания такого файла. А теперь, когда я уже давно не занимаюсь транскрибацией регулярно, мне пришёл случайный заказ. Достав из закромов свой файл скрипта, я оперативно этот заказ исполнил.

Вот фрагмент работы:

0:15:30 !

Дадим же Богу возможность в нашей жизни действовать. Действовать через нас, через нашу жизнь, через наши слова, через наши поступки.

0:15:45 !

Сделаемся и мы его орудием для того чтобы ещё хоть кого-то обратить к Богу. Во всём этом пусть каждому из нас Господь поможет

0:16:00 !

и укрепит в наших желаниях. Аминь.

0:16:15 !

— — —

=282.75 ₽.

Скрипт определяет стоимость работы исходя из расценки 17 р/мин. Эта цена настраивается в строке 65 указанием цены за 15 секунд.

MON1=$(bc <<< "$TIMING*0.26016")

Содержание файла:

#!/bin/bash ##Создание формы для транскрибации ## 15 р / мин 0,216666667 р/ сек. # # echo "Запускается перетаскиванием исполняемого файла и акдиофайла в окно терминала, открытого в рабочем каталоге." echo "Из исходного видео или аудио извлекает фрагменты в формата opus по 15 сек." echo "и записывает пустые строки [имя аудио].txt" echo "Временные файлы удаляются автоматически"   F_NAME_FULL1=$1 echo $F_NAME_FULL1 ##sleep 5 EXT=${F_NAME_FULL1##*.} BNAME=`basename "$F_NAME_FULL1" ".$EXT"` F_NAME_FULL="./"$BNAME"."$EXT  echo $BNAME  ##sleep 2   TIME_R=15   ###################################### ## Преобразование входного файла в формат OPUS для расшифровки  ffmpeg -i $F_NAME_FULL -vn -c:a libopus audio.opus && ffmpeg -i ./audio.opus -f segment -segment_time $TIME_R  -acodec copy "%03d.ogg"  ##sleep 1 rm ./audio.opus  ## Проверка наличия файла для расшифровки RASH=".ogg" NNN=0 FILE1=$F_NAME_PREF$(printf '%03d' $NNN)$RASH echo $FILE1 while [ -f "$FILE1" ]  do     ## echo $FILE1     echo "Есть"      ## Распознавание     ################################     PREF="@"     FILE2=$PREF$FILE1     echo $FILE2   (echo "X")>>./text_1.txt      ## Контролируем процесс      ################################     rm $FILE1     NNN=$[1+$NNN]     ## Добавляем пустую строку с номером минуты.     TIMING=$(($NNN*$TIME_R))  ## расходы ############################################  MON1=$(bc <<< "$TIMING*0.26016") ##MON1=$(bc <<< "$TIMING*0.27") MON==$(echo "scale=2;$MON1/1" |bc) printf -v ts '%d:%02d:%02d' `expr $TIMING / 3600` `expr $TIMING / 60` `expr $TIMING % 60`      echo " $ts ! "  >> ./text_1.txt ###########################################      FILE1=$F_NAME_PREF$(printf '%03d' $NNN)$RASH     ## sleep 1  done echo " - - - ">>./text_1.txt echo ${MON} " ₽. ">>./text_1.txt echo " 0:00:00 !">'./'$BNAME'.txt' echo  -e «\n+++» | cat ./text_1.txt>>'./'$BNAME'.txt' ##echo  | cat ./text_1.txt>>'./'$BNAME'.txt' clear ################################  rm ./text_1.txt  ## mm.ss TIME_CODE="0:00:00" TIME_CODE_str=$"("$TIME_CODE$")" 

Имя файла любое допустимое, например write-speech-form.

Достаточно открыть окно терминала из каталога где лежит аудио файл и скрипт, перетащить мышью файл скрипта и аудио файл в окно терминала, нажать <Enter>. Имя аудио файла не должно содержать пробелов и лишних точек, должны быть установлены права на выполнение. Я именую обычно датой или временем 20_59_19.mp3.

Через несколько секунд в каталоге появится текстовая форма разграфка с ценой работы.

При необходимости автоматически проставленные тайминги можно удалить или заменить на более редкие.

В процессе работы скрипт разбирает исходный файл на фрагменты. Это можно использовать для анализа фрагментов и решении других задач автоматизации. Раньше мной это использовалось для отправки фрагментов Яндексу для дешифровки.


ссылка на оригинал статьи https://habr.com/ru/post/655333/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *