{"id":26495980,"url":"https://github.com/rendiffdev/ffmpeg-webgui","last_synced_at":"2025-03-20T11:20:07.527Z","repository":{"id":279208528,"uuid":"938049115","full_name":"rendiffdev/ffmpeg-webgui","owner":"rendiffdev","description":"The goal of this project is to build a containerized web application that provides a graphical interface for FFmpeg. Users will be able to upload media files, configure advanced encoding/transcoding settings, launch jobs, and monitor their status.","archived":false,"fork":false,"pushed_at":"2025-03-17T09:56:41.000Z","size":17,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-17T10:43:56.495Z","etag":null,"topics":["ffmpeg","ffmpeg-gui","webui"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rendiffdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-24T10:41:58.000Z","updated_at":"2025-03-17T09:56:45.000Z","dependencies_parsed_at":"2025-02-24T11:41:59.741Z","dependency_job_id":"2ce17bc2-1312-4feb-81d2-000e37a691ee","html_url":"https://github.com/rendiffdev/ffmpeg-webgui","commit_stats":null,"previous_names":["rendiffdev/ffmpeg-webgui"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rendiffdev%2Fffmpeg-webgui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rendiffdev%2Fffmpeg-webgui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rendiffdev%2Fffmpeg-webgui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rendiffdev%2Fffmpeg-webgui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rendiffdev","download_url":"https://codeload.github.com/rendiffdev/ffmpeg-webgui/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244600725,"owners_count":20479307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ffmpeg","ffmpeg-gui","webui"],"created_at":"2025-03-20T11:20:06.926Z","updated_at":"2025-03-20T11:20:07.508Z","avatar_url":"https://github.com/rendiffdev.png","language":null,"readme":"\n# FFmpeg Web GUI in Docker\n\nA containerized web application that serves as a full-featured web GUI for FFmpeg.\nThis tool provides an intuitive interface for uploading media files, configuring advanced encoding/transcoding settings, and managing processing jobs.\nIt also integrates VMAF (Video Multi-Method Assessment Fusion) scoring to evaluate the quality of each transcoded file.\n\n\n\n---\n\n\n\n## FFmpeg WebGUI Screenshots\n\n### HLS Example\n![HLS Example](https://github.com/rendiffdev/ffmpeg-webgui/blob/80a0c0c921ff5d77103197416d863cde8b15bbaf/hls.png)\n\n### VP9 Example\n![VP9 Example](https://github.com/rendiffdev/ffmpeg-webgui/blob/80a0c0c921ff5d77103197416d863cde8b15bbaf/vp9.png)\n\n\n\n## Table of Contents\n- [Overview](#overview)\n- [Objectives](#objectives)\n- [Key Features](#key-features)\n  - [User Management](#user-management)\n  - [File Management](#file-management)\n  - [FFmpeg Job Configuration](#ffmpeg-job-configuration)\n  - [VMAF Integration](#vmaf-integration)\n  - [Job Management \u0026 Monitoring](#job-management--monitoring)\n  - [Administration \u0026 System Settings](#administration--system-settings)\n- [Architecture](#architecture)\n- [Implementation Details](#implementation-details)\n  - [Dockerfile Sample](#dockerfile-sample)\n  - [Job Management Module](#job-management-module)\n  - [VMAF Score Integration](#vmaf-score-integration)\n- [Testing and Quality Assurance](#testing-and-quality-assurance)\n- [Deployment and Maintenance](#deployment-and-maintenance)\n- [License](#license)\n\n---\n\n## Overview\n\nThis project provides a web-based interface for FFmpeg, enabling users to perform advanced encoding and transcoding tasks with ease.\nThe application runs inside a Docker container, ensuring a consistent environment and simplified deployment.\nUsers can monitor job status, view detailed logs, and even assess quality with integrated VMAF scoring.\n\n---\n\n## Objectives\n\n- **User-Friendly Web Interface:** Offer an intuitive GUI suitable for both novice and advanced users.\n- **Advanced FFmpeg Integration:** Support a wide range of codecs, formats, filters, and custom parameters.\n- **Job Management:** Enable users to queue, monitor, and control transcoding jobs with real-time updates.\n- **Quality Assessment:** Automatically compute and display VMAF scores for each processed job.\n- **Containerization:** Deploy the application within Docker to guarantee consistency and ease of deployment.\n\n---\n\n## Key Features\n\n### User Management\n- **Authentication \u0026 Authorization:** Secure login system with role-based access (admin vs. standard users).\n- **Dashboard:** A summary view of recent jobs, system status, and resource usage.\n\n### File Management\n- **File Upload/Selection:** Options to upload local files or specify file paths accessible by the container.\n- **Input Validation:** Checks for supported file formats and size limits before processing.\n\n### FFmpeg Job Configuration\n- **Preset Options:** Ready-to-use presets for common tasks (e.g., 1080p H.264, 4K HEVC).\n- **Custom Command Builder:** \n  - Define advanced FFmpeg parameters including codecs (H.264, H.265, VP9, AV1) and formats (MP4, MKV, WebM, MOV).\n  - Utilize filters for scaling, deinterlacing, denoising, color correction, etc.\n  - Configure bitrate, CRF values, two-pass encoding, and other quality settings.\n- **Advanced Options:** \n  - Integration with libraries like libx264, libx265, and libvmaf.\n  - Custom audio/video stream mapping, subtitle overlays, and more.\n\n### VMAF Integration\n- **Quality Analysis:** Automatically compute VMAF scores post-encoding by comparing the source and encoded files.\n- **Reporting:** Detailed job reports with VMAF scores, quality graphs, and log data.\n\n### Job Management \u0026 Monitoring\n- **Job Queue:** Support for multiple concurrent or sequential encoding jobs.\n- **Real-Time Status:** Live updates showing progress, estimated completion time, and command status.\n- **Logging \u0026 History:** Detailed logs for each job, with error tracking and historical data.\n- **Notifications:** Email or in-app alerts on job completion or failures.\n\n### Administration \u0026 System Settings\n- **Resource Management:** Monitor CPU, memory, and disk usage during transcoding jobs.\n- **Configuration Panel:** Admin interface for system-wide FFmpeg defaults, Docker resource settings, and log management.\n- **API Access:** RESTful endpoints for integration with external systems or automation workflows.\n\n---\n\n## Architecture\n\nThe application is built with a modern web stack:\n\n- **Frontend:** Built using a JavaScript framework (React, Vue, or Angular) for a dynamic user experience.\n- **Backend:** A RESTful API implemented in Python (Flask/Django) or Node.js (Express) to handle job submissions, process management, and integration with FFmpeg.\n- **FFmpeg Integration:** The backend constructs and executes FFmpeg commands based on user input while monitoring subprocess outputs.\n- **VMAF Processing:** Uses FFmpeg's built-in libvmaf filter or an external library for quality scoring.\n- **Database:** A lightweight database (SQLite or PostgreSQL) to track user data, job metadata, and logs.\n- **Containerization:** The entire application runs inside a Docker container, ensuring consistent deployment and operation.\n\n**System Diagram:**\n```\n\n+------------------+      HTTP/HTTPS       +--------------------+\n|    Web Browser   | \u003c-------------------\u003e |  Web Server (API)  |\n+------------------+                        +---------+----------+\n                                                     |\n                                                     | Subprocess management\n                                                     v\n                                               +--------------+\n                                               |    FFmpeg    |\n                                               | (with VMAF)  |\n                                               +--------------+\n                                                     |\n                                                     | File I/O (volumes)\n                                                     v\n                                               +--------------+\n                                               |   Storage    |\n                                               | (Docker Vol.)|\n                                               +--------------+\n```\n\n---\n\n## Implementation Details\n\n### Dockerfile Sample\n\n```dockerfile\nFROM ubuntu:22.04\n\n# Install dependencies and FFmpeg with required libraries\nRUN apt-get update \u0026\u0026 apt-get install -y \\\n    ffmpeg \\\n    python3 \\\n    python3-pip \\\n    nginx \\\n    # (Include additional libraries such as libx264, libx265, libvmaf if not bundled with ffmpeg)\n\n# Copy application code\nCOPY ./app /opt/app\n\n# Install Python dependencies\nRUN pip3 install -r /opt/app/requirements.txt\n\n# Expose port 80 for web access\nEXPOSE 80\n\n# Start the web server (using gunicorn, for example)\nCMD [\"gunicorn\", \"--bind\", \"0.0.0.0:80\", \"app:app\"]\n```\n\n### Job Management Module\n\n- **Command Generation:** Dynamically construct FFmpeg commands based on user inputs.\n- **Process Management:** Use a task queue (e.g., Celery for Python or Bull for Node.js) for managing long-running jobs.\n- **Real-Time Updates:** Implement WebSocket or long polling to provide live updates on job status.\n\n### VMAF Score Integration\n\nUtilize FFmpeg’s libvmaf filter to compute quality scores:\n\n```bash\nffmpeg -i input.mp4 -i encoded.mp4 -lavfi libvmaf=\"log_path=./vmaf_log.json\" -f null -\n```\n\nParse the resulting JSON output to display quality metrics in the job report.\n\n---\n\n## Testing and Quality Assurance\n\n- **Unit \u0026 Integration Tests:** Test individual modules (job scheduler, command builder, VMAF integration).\n- **User Acceptance Testing:** Conduct pilot tests with target users to refine UI/UX.\n- **Performance Testing:** Benchmark under load to ensure robust concurrent job handling.\n\n---\n\n## Deployment and Maintenance\n\n- **CI/CD:** Automate building, testing, and deployment using continuous integration pipelines.\n- **Documentation:** Provide comprehensive user guides, API documentation, and developer setup instructions.\n- **Monitoring:** Integrate logging and monitoring tools (e.g., Prometheus/Grafana) for ongoing system performance and resource usage tracking.\n\n---\n\n## License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frendiffdev%2Fffmpeg-webgui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frendiffdev%2Fffmpeg-webgui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frendiffdev%2Fffmpeg-webgui/lists"}