Транскрибация в 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.
Достаточно открыть окно терминала из каталога где лежит аудио файл и скрипт, перетащить мышью файл скрипта и аудио файл в окно терминала, нажать
Через несколько секунд в каталоге появится текстовая форма разграфка с ценой работы.
При необходимости автоматически проставленные тайминги можно удалить или заменить на более редкие.
В процессе работы скрипт разбирает исходный файл на фрагменты. Это можно использовать для анализа фрагментов и решении других задач автоматизации. Раньше мной это использовалось для отправки фрагментов Яндексу для дешифровки.