Automatic movie transcoding for Linux, Docker and NAS using FFmpeg and NVIDIA NVENC.
Compatible with Jellyfin, Plex, Emby and other media servers.
FFmpeg Auto Transcoder is an automated movie transcoding service for Linux servers, Docker deployments, NAS systems and home media libraries. It integrates seamlessly with Jellyfin, Plex, Emby, and any media server that monitors local folders.
The application continuously watches an incoming directory, identifies new movies using TMDb and OMDb, transcodes them to H.265/HEVC using NVIDIA NVENC hardware acceleration, and automatically organizes the resulting files into a structured media library.
It can be installed either as a native Linux service or with Docker Compose, making it suitable for home servers, NAS devices and virtual machines. Once installed, it runs unattended, automatically processing every new movie placed in the monitored folder.
- π¬ Automatic movie detection and processing
- π NVIDIA NVENC hardware-accelerated transcoding
- π¦ H.265 / HEVC video encoding
- ποΈ Automatic movie identification using TMDb and OMDb
- π Automatic media library organization
- π Real-time web monitor
- π³ Docker Compose deployment for Linux and NAS
- βοΈ Native Linux installation with systemd integration
- π Automatic startup and service recovery
- π‘οΈ Automatic recovery from stalled FFmpeg processes
- π Detailed logging and processing history
ffmpeg-auto-transcoder/
βββ transcoder.sh
βββ monitor.sh
βββ monitor-web.sh
βββ install.sh
βββ uninstall.sh
βββ lib/
βββ templates/
βββ deploy/
β βββ docker/
βββ README.md
View logs from all containers:
docker compose logs -fView only the transcoder logs:
docker compose logs -f transcoderView only the monitor logs:
docker compose logs -f monitorPress Ctrl+C to stop following the logs.
docker compose downdocker compose restartFrom the repository root:
git pull
cd deploy/docker
docker compose up -d --buildAll Docker configuration is managed directly in:
deploy/docker/docker-compose.yml
No .env file is required.
Common options include:
- User ID and group ID
- Host media library path
- TMDb API key
- OMDb API key
- Time zone
- Target movie size
- Minimum movie duration
- Minimum video bitrate
- Output resolution: 4K, 1440p, 1080p or 720p
Each option is documented inside the Compose file.
All transcoding settings are stored in:
/etc/ffmpeg-auto-transcoder/config.sh
Configuration is managed directly in:
deploy/docker/docker-compose.yml
Movie identification requires API keys from both services.
You can obtain free personal API keys here:
Without valid API keys the application can still transcode movies, but automatic identification and renaming will be unavailable.
The application automatically manages the following directory structure:
MEDIA_DIR/
βββ incoming/
βββ processing/
βββ library/
βββ completed/
βββ failed/
βββ logs/
βββ temp/
When a new movie is copied into incoming, the application automatically:
- Detects the new file.
- Moves it to
processing. - Identifies the movie using TMDb and OMDb.
- Analyzes the media with FFprobe.
- Transcodes it to H.265 / HEVC.
- Saves the new file into
library. - Moves the original movie to
completed.
If transcoding fails, the original file is automatically moved to the failed directory.
The target resolution can be configured in either config.sh or docker-compose.yml.
Supported resolutions:
| Resolution | Width | Height |
|---|---|---|
| 4K UHD | 3840 | 2160 |
| 1440p | 2560 | 1440 |
| Full HD | 1920 | 1080 |
| HD | 1280 | 720 |
The transcoder always preserves the original aspect ratio, adding padding only when required.
A built-in web monitor provides a live view of the transcoding process from any browser.
During an active job it displays:
- Current movie
- Detected title
- Progress percentage
- Progress bar
- Elapsed time
- Estimated remaining time (ETA)
- Current FPS
- Encoding speed
- NVIDIA GPU utilization
- Encoder utilization
- Decoder utilization
- GPU memory usage
- GPU temperature
- GPU power consumption
- FFmpeg process ID
http://SERVER_IP:9001
Local access:
http://localhost:9001
http://SERVER_IP:9002
Local access:
http://localhost:9002
When no movie is being processed, the monitor automatically switches to an idle view showing:
- Service status
- GPU information
- Media library location
- Pending movie count
- Helpful management commands
The display refreshes automatically, allowing you to monitor the system in real time.
The application continuously watches the incoming directory for new movies.
Whenever a new file appears, the following workflow is executed automatically:
incoming
β
βΌ
processing
β
βββ Movie identification (TMDb / OMDb)
βββ Media analysis (FFprobe)
βββ Hardware transcoding (NVENC)
βββ Progress monitoring
βββ Error detection
β
βΌ
library
β
βΌ
completed
If an unrecoverable error occurs, the original movie is automatically moved to:
failed/
FFmpeg Auto Transcoder uses NVIDIA NVENC hardware acceleration whenever a compatible GPU is available.
Supported features include:
- H.265 / HEVC hardware encoding
- Automatic GPU utilization monitoring
- Encoder and decoder utilization monitoring
- GPU memory usage reporting
- Automatic detection of stalled FFmpeg processes
- Automatic recovery from encoding failures
By offloading video encoding to the GPU, the application significantly reduces CPU usage while maintaining excellent transcoding performance.
Detailed logs are stored in:
MEDIA_DIR/logs/
The logs include transcoding activity, errors and progress information, making troubleshooting and auditing straightforward.
Keeping the application up to date is simple.
First, update your local repository:
git pullRun the installer again:
sudo ./install.shThe installer updates the application while preserving your existing configuration and media library.
Rebuild and restart the containers:
docker compose up -d --buildThis project is released under the MIT License.
You are free to use, modify and distribute this software in accordance with the terms of the license.
Contributions are always welcome.
If you discover a bug, have an idea for a new feature or would like to improve the project, feel free to open an issue or submit a pull request.
Every contribution, no matter how small, is appreciated.
This project would not be possible without the outstanding work of the following projects and communities:
- FFmpeg
- NVIDIA NVENC
- The Movie Database (TMDb)
- OMDb API
- ttyd
Many thanks to everyone involved in developing and maintaining these tools.
Planned improvements for future releases include:
- Enhanced web dashboard
- Additional transcoding profiles
- Multi-language support
- Improved metadata handling
- Better Docker customization
- Expanded monitoring and statistics
Suggestions and feature requests are always welcome.
Automatically identify, transcode and organize your movie collection using FFmpeg and NVIDIA NVENC.
Designed to run unattended on Linux, Docker and NAS environmentsβsimply copy your movies into the incoming directory and let the application handle the rest.
Happy transcoding! π¬
