背景
n8n-ffmpeg
這是一個為 n8n 工作流自動化平台集成 FFmpeg 功能的 Docker 鏡像項目。通過此項目,您可以在 n8n 中使用 FFmpeg 進行音視頻處理、轉碼、分析等多媒體操作。
- 項目:with-ffmpeg
-
成品:
docker pull skyjilygao/n8n-with-ffmpeg:1.122.5-20251216154621- 可以直接用現成鏡像執行即可
📋 項目背景
隨着短視頻和內容創作需求爆發式增長,企業急需將專業的音視頻處理能力集成到自動化工作流中。然而 FFmpeg 命令複雜、學習成本高,缺乏可視化操作界面。n8n-ffmpeg 項目應運而生,通過將 FFmpeg 集成到 n8n 平台,讓媒體處理變得簡單高效,助力企業數字化轉型。
項目概述
本項目基於官方 n8n 鏡像(1.122.5),集成了 FFmpeg 7.0.2 靜態編譯版本,提供了完整的音視頻處理能力。適用於需要在 n8n 工作流中進行媒體文件處理的各種場景。
主要特性
🎬 FFmpeg 功能
- 音視頻轉碼: 支持各種格式之間的轉換
- 視頻處理: 剪輯、合併、添加水印、調整分辨率等
- 音頻處理: 提取、合併、轉換音頻格式
- 媒體分析: 獲取媒體文件詳細信息
- VMAF 支持: 包含完整的 VMAF 模型庫,用於視頻質量評估
🐳 Docker 集成
- 基於官方 n8n 鏡像構建
- 中國時區配置 (Asia/Shanghai)
- 優化的容器配置
- 支持外部數據卷持久化
📊 VMAF 模型庫
包含完整的 VMAF (Video Multimethod Assessment Fusion) 模型庫:
- 標準模型: vmaf_v0.6.1, vmaf_b_v0.6.3 等
- 4K 模型: vmaf_4k_v0.6.1, vmaf_4k_rb_v0.6.2 等
- 浮點模型: vmaf_float 系列
- Netflix 模型: 多種 Netflix 訓練模型
快速開始
前提條件
- Docker 和 Docker Compose 已安裝
- 可用的域名和 SSL 證書(用於生產環境)
1. 克隆項目
git clone <項目地址>
cd n8n-ffmpeg
2. 構建鏡像
./build-image.sh
# 或docker build -t n8n-with-ffmpeg:latest .
腳本説明:build-image.sh
3. 啓動服務
./restart.sh
# 或 docker-compose up -d
腳本説明:restart.sh
4. 使用便捷腳本
項目提供了幾個便捷的 shell 腳本來簡化容器管理:
🔨 構建鏡像腳本 (build-image.sh)
自動化構建新鏡像並更新 docker-compose.yml 文件:
./build-image.sh
功能特點:
- 自動構建帶有時間戳標籤的鏡像
- 備份原有的 docker-compose.yml 文件
- 智能替換鏡像名稱(支持變量和直接引用格式)
- 驗證 docker-compose 文件語法
- 自動清理舊鏡像(保留最新3個)
構建過程:
- 檢查必要文件是否存在
- 構建新的 Docker 鏡像(格式:
n8n-with-ffmpeg:1.122.5-YYYYMMDDhhmmss) - 備份當前的 docker-compose.yml 文件
- 更新 docker-compose.yml 中的鏡像引用
- 驗證配置文件語法
- 提供部署和清理指導
🔄 重啓腳本 (restart.sh)
快速重啓 n8n 容器:
./restart.sh
執行流程:
- 停止當前運行的容器
- 等待1秒確保完全停止
- 重新啓動容器
⏹️ 停止腳本 (stop.sh)
停止 n8n 容器:
./stop.sh
功能:
- 優雅地停止 n8n 容器
- 釋放相關資源
5. 訪問 n8n
打開瀏覽器訪問 http://localhost:5678 即可使用 n8n。
配置説明
Docker Compose 配置
version: '3.8'
services:
n8n:
image: n8n-with-ffmpeg:1.122.5-20251208182708
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
# 本地化配置
- N8N_DEFAULT_LOCALE=zh-CN
- GENERIC_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
# URL 配置
- N8N_EDITOR_BASE_URL=https://your-domain.com
- WEBHOOK_URL=https://your-domain.com/
- N8N_HOST=your-domain.com
# 性能優化
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_RUNNERS_ENABLED=false
# 日誌配置
- LOG_LEVEL=debug
- N8N_LOG_OUTPUT_FORMATTER=simple
volumes:
- n8n_data:/home/node/.n8n
- /your/path/files:/home/node/files
shm_size: '256mb'
環境變量説明
| 變量名 | 説明 | 默認值 |
|---|---|---|
N8N_DEFAULT_LOCALE |
默認語言 | zh-CN |
GENERIC_TIMEZONE |
時區設置 | Asia/Shanghai |
TZ |
系統時區 | Asia/Shanghai |
N8N_EDITOR_BASE_URL |
n8n 編輯器基礎 URL | - |
WEBHOOK_URL |
Webhook 基礎 URL | - |
N8N_HOST |
n8n 主機名 | - |
N8N_DEFAULT_BINARY_DATA_MODE |
二進制數據存儲模式 | filesystem |
LOG_LEVEL |
日誌級別 | debug |
使用示例
在 n8n 中使用 FFmpeg
1. 執行節點中使用 FFmpeg
在 Execute Command 節點中,您可以直接使用 ffmpeg 命令:
# 獲取視頻信息
ffmpeg -i input.mp4
# 轉換視頻格式
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
# 提取音頻
ffmpeg -i input.mp4 -vn -acodec copy output.aac
# 調整視頻分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output_720p.mp4
2. 使用 VMAF 進行視頻質量評估
# 使用 VMAF 模型比較兩個視頻的質量
ffmpeg -i reference.mp4 -i distorted.mp4 -lavfi "libvmaf=model_path=/usr/local/share/model/vmaf_v0.6.1.pkl" -f null -
3. 批量處理示例
# 批量轉換目錄中的所有視頻文件
for file in *.mov; do
ffmpeg -i "$file" -c:v libx264 -c:a aac "${file%.mov}.mp4"
done
文件結構
n8n-ffmpeg/
├── Dockerfile # Docker 鏡像構建文件
├── docker-compose.yml # Docker Compose 配置文件
├── build-image.sh # 智能構建鏡像腳本
├── restart.sh # 快速重啓容器腳本
├── stop.sh # 停止容器腳本
├── ffmpeg-7.0.2-amd64-static/ # FFmpeg 靜態編譯版本
│ ├── ffmpeg # FFmpeg 可執行文件
│ ├── ffprobe # FFprobe 可執行文件
│ ├── manpages/ # 幫助文檔
│ └── model/ # VMAF 模型庫
└── README.md # 項目説明文檔
便捷腳本使用指南
本項目提供了三個實用的 shell 腳本,用於簡化容器管理操作:
🔨 build-image.sh - 智能構建腳本
這是最強大的腳本,自動化了整個鏡像構建和部署流程。
使用方法:
chmod +x build-image.sh # 確保腳本有執行權限
./build-image.sh
腳本功能詳解:
- 環境檢查:驗證 Dockerfile 和 docker-compose.yml 文件存在
- 鏡像構建:創建帶時間戳標籤的新鏡像
- 自動備份:為 docker-compose.yml 創建帶時間戳的備份
- 智能替換:自動更新 docker-compose.yml 中的鏡像引用
- 語法驗證:確保更新後的配置文件語法正確
- 清理建議:提供清理舊鏡像的命令
輸出示例:
🎯 Building new image: n8n-with-ffmpeg:1.122.5-20241216153045
✅ Image built successfully.
🔍 Verifying built image:
REPOSITORY TAG IMAGE ID SIZE
n8n-with-ffmpeg 1.122.5-20241216153045 abc123def456 1.23GB
💾 Backup saved as: docker-compose.yml.bak.20241216153045
🔍 Step 3/5: Previewing change...
--- docker-compose.yml
+++ docker-compose.yml
@@ -1,5 +1,5 @@
services:
n8n:
- image: n8n-with-ffmpeg:1.122.5-20241216150000
+ image: n8n-with-ffmpeg:1.122.5-20241216153045
✅ Compose file is valid and ready to deploy.
🔄 restart.sh - 快速重啓腳本
用於快速重啓 n8n 容器,常用於配置更新後。
使用方法:
chmod +x restart.sh
./restart.sh
執行過程:
stop...
[+] Running 2/2
✔ Container n8n Stopped
start...
[+] Running 2/2
✔ Container n8n Started
⏹️ stop.sh - 容器停止腳本
優雅地停止 n8n 容器服務。
使用方法:
chmod +x stop.sh
./stop.sh
執行結果:
stop...
[+] Running 2/2
✔ Container n8n Stopped
💡 腳本使用最佳實踐
- 定期構建:建議定期運行
build-image.sh獲取最新的安全更新 - 重啓策略:配置更新後使用
restart.sh而不是手動操作 - 備份管理:build-image.sh 會自動創建備份,但建議定期清理舊備份
- 權限設置:首次使用時確保腳本有執行權限 (
chmod +x *.sh)
🛠️ 故障排除
腳本執行權限問題:
# 如果提示權限不足
chmod +x build-image.sh restart.sh stop.sh
Docker 命令未找到:
# 確保 Docker 和 Docker Compose 已正確安裝
docker --version
docker compose version
構建失敗:
- 檢查 Dockerfile 是否存在且語法正確
- 確認網絡連接正常(需要下載基礎鏡像)
- 查看詳細的錯誤信息輸出
性能優化建議
1. 資源配置
- 內存: 建議分配至少 2GB 內存用於媒體處理
- 共享內存: 設置
shm_size: '256mb'或更高 - CPU: 媒體轉碼需要較強的 CPU 性能
2. 存儲優化
- 使用
N8N_DEFAULT_BINARY_DATA_MODE=filesystem模式 - 將文件存儲卷掛載到高速存儲設備
- 定期清理臨時文件
3. 網絡配置
- 配置適當的 Webhook URL
- 使用 CDN 加速靜態資源訪問
- 配置反向代理以提高安全性
故障排除
常見問題
1. FFmpeg 命令執行失敗
- 檢查輸入文件路徑是否正確
- 確認文件權限是否足夠
- 查看容器日誌獲取詳細錯誤信息
2. 內存不足
- 增加 Docker 容器內存限制
- 優化 FFmpeg 命令參數
- 分批處理大文件
3. 處理速度慢
- 檢查 CPU 資源分配
- 使用硬件加速(如可用)
- 優化編碼參數
日誌查看
# 查看容器日誌
docker logs n8n
# 實時查看日誌
docker logs -f n8n
安全注意事項
- 文件權限: 確保掛載卷的文件權限設置正確
- 網絡安全: 在生產環境中使用 HTTPS 和身份驗證
- 資源限制: 設置適當的容器資源限制
- 定期更新: 保持鏡像和依賴項的最新狀態
更新和維護
使用便捷腳本更新
推薦使用提供的腳本來簡化更新過程:
# 構建新鏡像並自動更新配置
./build-image.sh
# 重啓容器應用更新
./restart.sh
手動更新 FFmpeg
- 下載新版本的 FFmpeg 靜態包 ffmpeg-release-amd64-static.tar.xz
- 替換
ffmpeg-7.0.2-amd64-static目錄 - 更新 Dockerfile 中的版本引用
- 運行
./build-image.sh重新構建鏡像
手動更新 n8n
- 修改 Dockerfile 中的基礎鏡像版本
- 運行
./build-image.sh重新構建鏡像 - 測試兼容性
許可證
本項目採用 GPLv3 許可證。FFmpeg 靜態包及其包含的組件遵循各自的許可證條款。
貢獻
歡迎提交 Issue 和 Pull Request 來改進此項目。
支持
如果您遇到問題或有建議,請通過以下方式聯繫:
- 提交 GitHub Issue
- 查看 FFmpeg 官方文檔: https://ffmpeg.org/documentation.html
- 查看 n8n 官方文檔: https://docs.n8n.io/
注意: 使用此項目即表示您同意遵守所有相關軟件許可證條款和條件。