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