Вырезать SRT и преобразовать в TXT из MP4 в скрипте для Automator
Помогите написать скрипт Хочу сделать чтобы работал на маке. Исходные данные. Есть файлы mp4, скажем "Видео 1.mp4", "Видео два.mp4" и т.д. Русские буквы, пробелы в имени файлов. На выходе нужно чтобы были TXT (merged plain text) с такими же именами. Идеально было бы чтобы на маке по правой клавише в Finder->Services можно было выбрать соответствующее действие "Extract Subtitles into TXT".
Пока удалось понять как вырезать субтитры (поставил ffmpeg через homebrew):
ffmpeg -i 1.mp4 -map 0:s:0 1.srt
И как из вырезанных субтитров вырезать тайминги, удалить пустые строки и вставить пробелы при склейке
sed -r 's/\r$//;/^[0-9]+$/{N;/\n[0-9]/d;}' ./1.srt | sed '/^$/d' | awk '{print}' ORS=' ' > 1.txt
Вопросы: Как объединить 2 команды? Можно ли обойтись без создания временного файла с субтитрами .SRT? Как передать имя файла в скрипт, может из командной строки.
Вообще идеальным решением был бы по правой клавише мыши на нужном файле создать в той же папке TXT файл с совпадающим именем. Или написать сервис, который был отслеживал новые mp4 файлы в текущей папке и создавал соответcтвующие им TXT файлы с субтитрами.
Помогите, пожалуйста, куда копать
Обновление. Написал скрипт для Quick Actions для Finder. Перед этим, конечно, установлен ffmpeg с помощью homewbrew (brew install ffmpeg). Если у вас homebrew установлен в другое место, измените в скрипте путь к ffmpeg соответственно.
В Automator настройки: Workflow receives current: movie files in Finder, и/или Path Finder
Image: Video
Shell: bin/bash
Pass input: as arguments
Вот собственно сам скрипт:
for f in "$@" do
NameSRT="${f%.*}.srt"
NameTXT="${f%.*}.txt"
/opt/homebrew/opt/ffmpeg/bin/ffmpeg -i "$f" -map 0:s:0 "$NameSRT"
sed -r 's/\r$//;/^[0-9]+$/{N;/\n[0-9]/d;}' "$NameSRT" | sed '/^$/d' | awk '{print}' ORS=' ' > "$NameTXT"
rm "$NameSRT"
done
Сохранил скрипт как Extract Subtitles to Text Появляется по правой клавише мыши в Finder в Quick Actions Или в PathFinder в Services