1. Подготовка папок в контейнере
В контейнере n8n:
mkdir -p /videos/input mkdir -p /root/.n8n-files/input/mp3
-
/videos/input- сюда кидаем исходные видео. -
/root/.n8n-files/input/mp3- сюда ffmpeg будет складывать звук.
2. Local File Trigger
Нода: Local File Trigger
-
Watch Folder:
/videos/input -
Operation:
Add(реакция на новые файлы)
На выходе у нас есть путь к файлу, например: /videos/input/2.MOV.
3. Нода to mp3 (ffmpeg)
Нода: Execute Command
ffmpeg -y -i "{{ $('Local File Trigger').item.json.path }}" -vn -acodec libmp3lame "/root/.n8n-files/input/mp3/{{ $('Local File Trigger').item.json.path.split('/').pop().split('.').slice(0, -1).join('.') }}.mp3"
Что делает expression:
-
Берёт полный путь
/videos/input/2.MOV. -
Оставляет только имя файла
2.MOV. -
Отрезает расширение →
2. -
Собирает итоговый путь:
/root/.n8n-files/input/mp3/2.mp3.
Важно:
После запуска этой ноды в контейнере можно проверить:
ls -l /root/.n8n-files/input/mp3
Там должен лежать 2.mp3.
4. Read/Write Files from Disk
Нода: Read/Write Files from Disk
-
Operation:
Read File(s) From Disk -
File(s) Selector: включаем Expression и пишем:
/root/.n8n-files/input/mp3/{{ $('Local File Trigger').item.json.path.split('/').pop().split('.').slice(0, -1).join('.') }}.mp3
Эта нода читает mp3 и добавляет его в Binary.
Имя бинарного поля по умолчанию - data (на вкладке Binary ты видишь блок с заголовком data и инфой о файле).
5. OpenAI: расшифровка аудио
Нода: OpenAI
-
Resource:
Audio -
Operation:
Transcribe a Recording -
Input Data Field Name:
data← то же имя, что в Binary после предыдущей ноды.
Модель можно оставить whisper-1.
На выходе получаешь текст транскрипции в json.text (или аналогичном поле - зависит от версии ноды).
6. Типичный фейл, на котором все падают
-
Писать mp3 в путь, который не примонтирован в контейнер.
-
Смотреть на хосте
/root/.n8n-files, думать, что «файла нет», хотя ffmpeg положил его внутрь контейнера. -
Забывать создать папку заранее - ffmpeg не делает промежуточные каталоги.
Поэтому жёстко придерживаемся:
-
Для ffmpeg:
/root/.n8n-files/input/mp3/... -
Для чтения: тот же путь через expression.
-
В OpenAI:
Input Data Field Name = data.
