Вырезать 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


Ответы (0 шт):