{"id":18838790,"url":"https://github.com/starkdmi/media_tool_flutter","last_synced_at":"2025-10-03T13:05:54.240Z","repository":{"id":173462133,"uuid":"625672311","full_name":"starkdmi/media_tool_flutter","owner":"starkdmi","description":"Flutter plugin for video, image and audio processing via native platform code","archived":false,"fork":false,"pushed_at":"2024-06-26T12:05:24.000Z","size":18218,"stargazers_count":12,"open_issues_count":4,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-08T14:20:33.145Z","etag":null,"topics":["android","apple","audio","compressor","converter","ffmpeg","flutter","image","image-processing","ios","macos","video","video-processing"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/media_tool_flutter","language":"Dart","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/starkdmi.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":"2023-04-09T20:36:53.000Z","updated_at":"2025-03-29T12:47:04.000Z","dependencies_parsed_at":"2023-10-23T14:56:13.347Z","dependency_job_id":"a4994617-1b0d-4f86-b345-30059ba3aa78","html_url":"https://github.com/starkdmi/media_tool_flutter","commit_stats":null,"previous_names":["starkdmi/media_tool_flutter"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starkdmi%2Fmedia_tool_flutter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starkdmi%2Fmedia_tool_flutter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starkdmi%2Fmedia_tool_flutter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/starkdmi%2Fmedia_tool_flutter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/starkdmi","download_url":"https://codeload.github.com/starkdmi/media_tool_flutter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248836290,"owners_count":21169370,"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":["android","apple","audio","compressor","converter","ffmpeg","flutter","image","image-processing","ios","macos","video","video-processing"],"created_at":"2024-11-08T02:40:44.183Z","updated_at":"2025-10-03T13:05:54.154Z","avatar_url":"https://github.com/starkdmi.png","language":"Dart","readme":"## Media Tool Flutter\n\n\u003e Video, image and audio processing via native platform code.\n\n## 🚧 WIP 🚧\n\nOnly Apple (iOS \u0026 macOS) support is implemented via native code yet.\n\n## About\n\nFlutter plugin for advanced media manipulation using native platform code. Supported media types are `video`, `audio` and `image`.\n\n## Native Frameworks\n\n| Platform | Framework |\n| --- | --- |\n| Apple | [MediaToolSwift](https://github.com/starkdmi/MediaToolSwift) |\n| Android | MediaCodec\\* | \n| Windows \u0026 Linux | OpenCL\\* | \n\n\\* Pull requests with implementation of `MediaToolPlatform` are welcome!\n\n## Video\n\n### Features:\n- Compress with multiple codecs\n- Resize\n- Frame rate adjustment\n- Audio track manipulataion\n- Alpha channel and HDR handling\n- Slow motion support\n- Metadata preserving\n- Hardware acceleration\n- Thumbnails extraction\n- Video information gathering\n- Progress and cancellation\n\n### Codecs\n\n__Video__: `H.264`, `H.265/HEVC` and `ProRes`.\n\n__Audio__: `AAC`, `Opus` and `FLAC`.\n\n### Example\n\n```Dart\n// Compress video file\nfinal task = VideoTool.compress(\n  id: id, // unique id\n  path: path,\n  destination: destination,\n  // Video\n  videoSettings: const VideoSettings(\n    codec: VideoCodec.h264,\n    bitrate: 2000000, // 2 Mbps\n    size: Size(1280.0, 1280.0), // size to fit in\n    // quality, frame rate, atd.\n  ),\n  // Audio\n  skipAudio: false,\n  audioSettings: const AudioSettings(\n    codec: AudioCodec.opus, \n    bitrate: 96000, // 96 Kbps\n    // sample rate, quality, atd.\n  ),\n  // Metadata and file options\n  skipMetadata: false,\n  overwrite: true,\n  deleteOrigin: false\n);\n\n// State notifier\ntask.events.listen(print);\n\n// Cancellation\ntask.cancel();\n```\n\n## Image\n\n### Features:\n- Convert with multiple formats\n- Resize and crop\n- Frame rate adjustment\n- Animated image sequences support\n- Alpha channel and HDR handling\n- Metadata and orientation preserving\n- Image information gathering\n\n### Formats:\n- `JPEG`\n- `PNG` and `APNG`\n- `GIF`\n- `TIFF`\n- `BMP`\n- `WEBP`\n- `HEIF`\n\n### Example\n\n```Dart\n// Convert image file\nfinal metadata = await ImageTool.compress(\n  path: path,\n  destination: destination,\n  settings: const ImageSettings(\n    format: ImageFormat.png,\n    size: Size(1280.0, 1280.0),\n    crop: false, // crop or fit\n    // frame rate, quality, alpha channel, background color, atd.\n  ),\n  skipMetadata: false,\n  overwrite: true,\n  deleteOrigin: false\n);\n```\n\n## Audio\n\n### Features:\n- Compress with multiple codecs\n- Metadata preserving\n- Hardware acceleration\n- Audio information gathering\n- Progress and cancellation\n\n### Codecs:\n- `AAC`\n- `Opus`\n- `FLAC`\n\n### Example\n\n```Dart\n// Compress audio file\nfinal task = AudioTool.compress(\n  id: id, // unique id\n  path: path,\n  destination: destination,\n  settings: const AudioSettings(\n    codec: AudioCodec.opus, \n    bitrate: 96000, // 96 Kbps\n    // sample rate, quality, atd.\n  ),\n  skipMetadata: false,\n  overwrite: true,\n  deleteOrigin: false\n);\n\n// State notifier\ntask.events.listen(print);\n\n// Cancellation\ntask.cancel();\n```\n\n## Internally\n\nEach plugin methods which run platform code do support multiple parallel executions, each of execution has it's own progress, cancellation and error handling. Main tests stored at [integration_test](media_tool/example/integration_test/).\n\n## Benchmarks \n\n### Video\n| Plugin Name | Time |\n| :-: | :-: |\n| [media_tool_darwin](https://pub.dev/packages/media_tool_darwin) | __1x__ |\n| [video_compress](https://pub.dev/packages/video_compress) | __1x__ |\n| [light_compressor](https://pub.dev/packages/light_compressor) | __1.5-2x__ |\n| [media_tool_ffmpeg](https://pub.dev/packages/media_tool_ffmpeg) | __8-12x__ |\n\nVideo tests were executed on macOS (Apple Silicon) using H.264/AAC/MP4 with 1280x720 and 1920x1080 resolutions.\n\n### Image \n| Plugin Name | Time |\n| :-: | :-: |\n| [media_tool_darwin](https://pub.dev/packages/media_tool_darwin) | __1x__ | /* up to 3x speed up on sequential calls (1/3x) */\n| [media_tool_ffmpeg](https://pub.dev/packages/media_tool_ffmpeg) | __3-5x__ | /* no speed up on sequential calls */\n| [image](https://pub.dev/packages/image) | __10x__ |\n\nImage tests were executed on macOS (Apple Silicon) using PNG and JPEG.\n\n## License\n\nThe Plugin is licensed under the MIT. The platform implementations may have their own licenses:\n- MediaToolSwift - Mozilla Public License 2.0\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstarkdmi%2Fmedia_tool_flutter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstarkdmi%2Fmedia_tool_flutter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstarkdmi%2Fmedia_tool_flutter/lists"}