Pipeline automatizado de processamento de mídia para homelabs. Integra qBittorrent, FFmpeg, Jellyfin e Telegram em um único fluxo — do download ao catálogo, sem intervenção manual.
qBittorrent (conclui download)
↓
qbittorrent-hook.sh (enfileira job via pasta compartilhada)
↓
queue-processor.sh (roda no host via cron, a cada 1 min)
↓
qbittorrent-hook-host.sh
├─ MKV → converter_mp4.sh → MP4 com AAC
├─ MP4 → verifica codec de áudio → converte se necessário
├─ Move para /mnt/media/jellyfin/media/Filmes/
├─ Busca metadados no TMDB (fetch-media-info.sh)
├─ Notifica via Telegram com poster + sinopse (telegram-notifier.sh)
└─ Deleta torrent + arquivos originais do qBittorrent
- Conversão automática de MKV para MP4 com recodificação de áudio para AAC
- Preservação de legendas embarcadas (convertidas para
mov_text) - Detecção inteligente de codec — só recodifica o que for necessário
- Metadados do TMDB — busca título, sinopse e poster automaticamente
- Notificação Telegram com poster do filme e informações completas
- Limpeza automática — deleta o torrent e arquivos originais após processamento bem-sucedido
- Bot Telegram para solicitar downloads diretamente pelo chat (
/baixar,/serie) - Busca de torrents via Jackett com seleção interativa de resultados
- Limpeza de nomes de arquivo — suporta padrões com pontos ou espaços, remove tags técnicas e domínios
media-processor/
├── scripts/
│ ├── config.sh # ⚠️ NÃO versionado — credenciais
│ ├── config-example.sh # Template de configuração
│ ├── qbittorrent-hook.sh # Hook do qBittorrent (roda no container)
│ ├── qbittorrent-hook-host.sh # Processamento principal (roda no host)
│ ├── queue-processor.sh # Processa fila de jobs (cron no host)
│ ├── converter_mp4.sh # Conversão MKV → MP4 via FFmpeg
│ ├── fetch-media-info.sh # Busca metadados no TMDB
│ ├── telegram-notifier.sh # Envia notificações via Telegram
│ ├── telegram-bot.sh # Bot Telegram para solicitar downloads
│ ├── torrent-search.sh # Busca torrents via Jackett API
│ ├── media-processor.service # Unit file systemd (opcional)
│ └── queue/ # Pasta de jobs pendentes (criada automaticamente)
├── references/ # Documentação de referência
├── SKILL.md # Documentação para uso com OpenClaw
├── README.md # Este arquivo
├── LICENSE
└── .gitignore
sudo apt install ffmpeg jq python3 curl -y- qBittorrent (
lscr.io/linuxserver/qbittorrent) - Jellyfin
- Jackett (para o bot de download)
git clone https://github.com/guiosamp/media-processor.git
cd media-processor/scriptscp config-example.sh config.sh
nano config.shPreencha o config.sh:
# Telegram
export TELEGRAM_BOT_TOKEN="seu_token"
export TELEGRAM_CHAT_ID="seu_chat_id"
# TMDB — https://www.themoviedb.org/settings/api
export TMDB_API_KEY="sua_chave"
export TMDB_BASE_URL="https://api.themoviedb.org/3"
export TMDB_POSTER_URL="https://image.tmdb.org/t/p/w500"
# qBittorrent
export QB_URL="http://localhost:8080"
export QB_USER="admin"
export QB_PASS="sua_senha"
export QB_SAVE_PATH="/mnt/media/qbittorrent/downloads/"
# Jackett
export JACKETT_URL="http://localhost:9117"
export JACKETT_API_KEY="sua_chave_jackett"
# Jellyfin
export JELLYFIN_MEDIA_DIR="/mnt/media/jellyfin/media/"chmod +x *.sh
mkdir -p queueMonte a pasta de scripts no container:
services:
qbittorrent:
volumes:
- /mnt/media/qbittorrent/downloads:/downloads
- /home/seu-usuario/media-processor/scripts:/scriptsAcesse Opções → Downloads → Executar programa externo ao concluir o torrent:
/scripts/qbittorrent-hook.sh "%F" "%I"
crontab -e* * * * * /home/seu-usuario/media-processor/scripts/queue-processor.sh- Crie um bot no @BotFather e copie o token
- Inicie uma conversa com o bot e acesse:
https://api.telegram.org/bot<SEU_TOKEN>/getUpdates - Copie o
iddentro dechat— esse é o seuTELEGRAM_CHAT_ID - Preencha
MP_BOT_TOKENeMP_CHAT_IDnoconfig.sh
| Comando | Descrição |
|---|---|
/baixar <título> |
Busca e baixa um filme |
/serie <título> |
Busca e baixa uma série |
1, 2, 3... |
Escolhe o resultado desejado |
0 |
Cancela a operação |
/status |
Mostra downloads em andamento |
/cancelar |
Cancela operação atual |
/ajuda |
Lista os comandos |
# Systemd (modifique media-processor.service com seu usuário)
nano media-processor.service
sudo mv media-processor.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable media-processor
sudo systemctl start media-processor
# Em foreground (para testar)
./telegram-bot.sh
# Em background
nohup ./telegram-bot.sh >> /var/log/media-processor/bot.log 2>&1 &Converte arquivos MKV para MP4.
# Arquivo único
./converter_mp4.sh --path /caminho/filme.mkv
# Com offset de áudio
./converter_mp4.sh --path /caminho/filme.mkv --offset -1.5
# Apaga o original após conversão
./converter_mp4.sh --path /caminho/filme.mkv --delete
# Opções
--path Arquivo .mkv ou diretório
--offset Offset de áudio em segundos
--delete Remove o .mkv original após conversão bem-sucedida
--log Caminho personalizado para o logBusca informações do filme no TMDB.
./fetch-media-info.sh "Nome do Filme (2024).mp4"
# Debug — mostra título e ano detectados
DEBUG=1 ./fetch-media-info.sh "Nome.Do.Filme.2024.1080p.BluRay.mkv"Retorna JSON com titulo, titulo_original, ano, sinopse, poster e nota.
/var/log/media-processor/
├── YYYY-MM-DD.log # Log diário do processamento
├── converter_mp4.log # Log detalhado do FFmpeg
└── telegram-bot.log # Log do bot Telegram
- Legendas PGS (imagem, comuns em BluRay) não podem ser convertidas para
mov_text— são descartadas silenciosamente - O torrent só é deletado se todos os arquivos forem processados com sucesso
- Se um processamento falhar, o torrent é mantido no qBittorrent para reprocessamento manual
- A variável
%Fno hook do qBittorrent pode ser um arquivo único ou uma pasta
MIT — veja LICENSE para detalhes.