{"id":25984572,"url":"https://github.com/yeautyye/ez-ffmpeg","last_synced_at":"2025-08-17T01:10:03.695Z","repository":{"id":280792320,"uuid":"943186462","full_name":"YeautyYE/ez-ffmpeg","owner":"YeautyYE","description":"A safe and ergonomic Rust interface for FFmpeg integration, designed for ease of use.","archived":false,"fork":false,"pushed_at":"2025-07-19T06:42:35.000Z","size":616,"stargazers_count":195,"open_issues_count":4,"forks_count":8,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-19T10:13:39.065Z","etag":null,"topics":["audio","cross-platform","easy","example","ffmpeg","flv","integration","media","opengl","rtmp","rust","safe","tutorial","video"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YeautyYE.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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,"zenodo":null}},"created_at":"2025-03-05T09:55:58.000Z","updated_at":"2025-07-19T06:42:30.000Z","dependencies_parsed_at":"2025-03-05T10:44:32.385Z","dependency_job_id":"117d641f-12bd-4a20-97ef-092809951486","html_url":"https://github.com/YeautyYE/ez-ffmpeg","commit_stats":null,"previous_names":["yeautyye/ez-ffmpeg"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/YeautyYE/ez-ffmpeg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YeautyYE%2Fez-ffmpeg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YeautyYE%2Fez-ffmpeg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YeautyYE%2Fez-ffmpeg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YeautyYE%2Fez-ffmpeg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YeautyYE","download_url":"https://codeload.github.com/YeautyYE/ez-ffmpeg/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YeautyYE%2Fez-ffmpeg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270793535,"owners_count":24646611,"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","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["audio","cross-platform","easy","example","ffmpeg","flv","integration","media","opengl","rtmp","rust","safe","tutorial","video"],"created_at":"2025-03-05T11:25:30.591Z","updated_at":"2025-08-17T01:10:03.521Z","avatar_url":"https://github.com/YeautyYE.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/YeautyYE/ez-ffmpeg/main/logo.jpg\" alt=\"Logo\" width=\"300\"\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Crates.io](https://img.shields.io/crates/v/ez-ffmpeg.svg)](https://crates.io/crates/ez-ffmpeg)\n[![Documentation](https://img.shields.io/badge/docs.rs-ez--ffmpeg-blue)](https://docs.rs/ez-ffmpeg)\n[![License: MIT/Apache-2.0/MPL-2.0](https://img.shields.io/badge/License-MIT%2FApache--2.0%2FMPL--2.0-brightgreen.svg)](https://github.com/YeautyYE/ez-ffmpeg/blob/main/LICENSE-APACHE)\n[![Rust](https://img.shields.io/badge/Rust-%3E=1.80.0-orange)](https://www.rust-lang.org/)\n[![FFmpeg](https://img.shields.io/badge/FFmpeg-%3E=7.0-blue)](https://ffmpeg.org)\n\n\u003c/div\u003e\n\n\n## Overview\n\n**`ez-ffmpeg`** provides a **safe and ergonomic Rust interface for FFmpeg integration**, offering a familiar API that closely follows FFmpeg’s original logic and parameter structures.\n\nThis library:\n- Ensures full safety without using `unsafe` code\n- Keeps the execution logic and parameter conventions as close to FFmpeg as possible\n- Provides an intuitive and user-friendly API for media processing\n- Supports custom Rust filters and flexible input/output handling\n- Offers optional RTMP and OpenGL integration\n\nBy abstracting the complexity of the raw C API, `ez-ffmpeg` simplifies configuring media pipelines, performing transcoding and filtering, and inspecting media streams.\n\n## Version Requirements\n\n- **Rust:** Version 1.80.0 or higher.\n- **FFmpeg:** Version 7.0 or higher. \n\n## Documentation\n\nMore information about this crate can be found in the [crate documentation](https://docs.rs/ez-ffmpeg).\n\n## Quick Start\n\n### Installation Prerequisites\n\n#### macOS\n```bash\nbrew install ffmpeg\n```\n\n#### Windows\n```bash\n# For dynamic linking\nvcpkg install ffmpeg\n\n# For static linking (requires 'static' feature)\nvcpkg install ffmpeg:x64-windows-static-md\n\n# Set VCPKG_ROOT environment variable\n```\n\n### Adding the Dependency\n\nAdd **ez-ffmpeg** to your project by including it in your `Cargo.toml`:\n\n```toml\n[dependencies]\nez-ffmpeg = \"*\"\n```\n\n### Basic Usage\n\nBelow is a basic example to get you started. Create or update your `main.rs` with the following code:\n\n```rust\nuse ez_ffmpeg::FfmpegContext;\nuse ez_ffmpeg::FfmpegScheduler;\n\nfn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    // 1. Build the FFmpeg context\n    let context = FfmpegContext::builder()\n        .input(\"input.mp4\")\n        .filter_desc(\"hue=s=0\") // Example filter: desaturate (optional)\n        .output(\"output.mov\")\n        .build()?;\n\n    // 2. Run it via FfmpegScheduler (synchronous mode)\n    let result = FfmpegScheduler::new(context)\n        .start()?\n        .wait();\n    result?; // Propagate any errors that occur\n    Ok(())\n}\n```\nMore examples can be found [here][examples].\n\n[examples]: https://github.com/YeautyYE/ez-ffmpeg/tree/master/examples\n\n## Features\n\n**ez-ffmpeg** offers several optional features that can be enabled in your `Cargo.toml` as needed:\n\n- **opengl:** Enables GPU-accelerated OpenGL filters for high-performance video processing.\n- **rtmp:** Includes an embedded RTMP server for local streaming scenarios.\n- **flv:** Provides support for FLV container parsing and handling.\n- **async:** Adds asynchronous functionality (allowing you to `.await` operations).\n- **static:** Enables static linking for FFmpeg libraries (via `ffmpeg-next/static`).\n\n## License\n\nez-ffmpeg is licensed under your choice of the MIT, Apache-2.0, or MPL-2.0 licenses. You may select the license that best fits your needs.\n**Important:** While ez-ffmpeg is freely usable, FFmpeg has its own licensing terms. Ensure that your use of its components complies with FFmpeg's license.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeautyye%2Fez-ffmpeg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyeautyye%2Fez-ffmpeg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeautyye%2Fez-ffmpeg/lists"}