Mercurial
view media_processor/README.md @ 217:7ef4c9d2a72d hg-web
[DO NOT PUSH] Random values.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sun, 25 Jan 2026 10:44:04 -0800 |
| parents | |
| children |
line wrap: on
line source
# media_processor Reusable media processing library for images and videos. ## Features - **Image Processing**: Convert images to WebP format with quality/size options - **Video Processing**: Convert videos to HLS format for streaming - **Auto-detection**: Automatically detects media type from file extension - **Thumbnail Generation**: Creates thumbnails for videos - **Original Preservation**: Keeps original files alongside processed versions ## Usage ```c #include "media_processor/media_processor.h" // Process any media file (auto-detects type) MediaProcessorOpts opts = media_processor_opts_default("./output"); opts.image_quality = 85; opts.video_max_width = 1920; char* id = media_generate_id(); MediaResult* result = media_process_file("upload.mp4", id, &opts); if (result->status == MEDIA_STATUS_COMPLETED) { printf("HLS playlist: %s\n", result->hls_playlist); printf("Thumbnail: %s\n", result->thumbnail_path); } media_result_free(result); free(id); ``` ## Output Structure For images: ``` output/ └── {id}/ ├── original.jpg # Original file └── image.webp # Converted WebP ``` For videos: ``` output/ └── {id}/ ├── original.mp4 # Original file ├── video.m3u8 # HLS playlist ├── video_000.ts # HLS segments ├── video_001.ts └── video_thumb.jpg # Thumbnail ``` ## Options ### Image Options | Option | Default | Description | |--------|---------|-------------| | `image_quality` | 80 | WebP quality (0-100) | | `image_max_width` | 0 | Max width (0 = no limit) | | `image_max_height` | 0 | Max height (0 = no limit) | ### Video Options | Option | Default | Description | |--------|---------|-------------| | `video_segment_duration` | 6 | HLS segment length in seconds | | `video_bitrate` | 0 | Video bitrate in kbps (0 = auto) | | `video_max_width` | 0 | Max width (0 = no limit) | | `video_max_height` | 0 | Max height (0 = no limit) | | `generate_thumbnail` | true | Generate video thumbnail | ## Building ```bash bazel build //media_processor:media_processor ``` ## Dependencies - `//third_party/ffmpeg:ffmpeg_cli` - FFmpeg CLI wrapper - `//dowa:dowa` - Memory and string utilities