comparison 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
comparison
equal deleted inserted replaced
192:b818a4561a3c 217:7ef4c9d2a72d
1 # media_processor
2
3 Reusable media processing library for images and videos.
4
5 ## Features
6
7 - **Image Processing**: Convert images to WebP format with quality/size options
8 - **Video Processing**: Convert videos to HLS format for streaming
9 - **Auto-detection**: Automatically detects media type from file extension
10 - **Thumbnail Generation**: Creates thumbnails for videos
11 - **Original Preservation**: Keeps original files alongside processed versions
12
13 ## Usage
14
15 ```c
16 #include "media_processor/media_processor.h"
17
18 // Process any media file (auto-detects type)
19 MediaProcessorOpts opts = media_processor_opts_default("./output");
20 opts.image_quality = 85;
21 opts.video_max_width = 1920;
22
23 char* id = media_generate_id();
24 MediaResult* result = media_process_file("upload.mp4", id, &opts);
25
26 if (result->status == MEDIA_STATUS_COMPLETED) {
27 printf("HLS playlist: %s\n", result->hls_playlist);
28 printf("Thumbnail: %s\n", result->thumbnail_path);
29 }
30
31 media_result_free(result);
32 free(id);
33 ```
34
35 ## Output Structure
36
37 For images:
38 ```
39 output/
40 └── {id}/
41 ├── original.jpg # Original file
42 └── image.webp # Converted WebP
43 ```
44
45 For videos:
46 ```
47 output/
48 └── {id}/
49 ├── original.mp4 # Original file
50 ├── video.m3u8 # HLS playlist
51 ├── video_000.ts # HLS segments
52 ├── video_001.ts
53 └── video_thumb.jpg # Thumbnail
54 ```
55
56 ## Options
57
58 ### Image Options
59
60 | Option | Default | Description |
61 |--------|---------|-------------|
62 | `image_quality` | 80 | WebP quality (0-100) |
63 | `image_max_width` | 0 | Max width (0 = no limit) |
64 | `image_max_height` | 0 | Max height (0 = no limit) |
65
66 ### Video Options
67
68 | Option | Default | Description |
69 |--------|---------|-------------|
70 | `video_segment_duration` | 6 | HLS segment length in seconds |
71 | `video_bitrate` | 0 | Video bitrate in kbps (0 = auto) |
72 | `video_max_width` | 0 | Max width (0 = no limit) |
73 | `video_max_height` | 0 | Max height (0 = no limit) |
74 | `generate_thumbnail` | true | Generate video thumbnail |
75
76 ## Building
77
78 ```bash
79 bazel build //media_processor:media_processor
80 ```
81
82 ## Dependencies
83
84 - `//third_party/ffmpeg:ffmpeg_cli` - FFmpeg CLI wrapper
85 - `//dowa:dowa` - Memory and string utilities