annotate third_party/ffmpeg/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 # ffmpeg
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 FFmpeg wrapper for Bazel projects.
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 ## Prerequisites
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 FFmpeg must be installed on the system:
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
8
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
9 ```bash
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
10 # Ubuntu/Debian
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
11 sudo apt install ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev
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 # macOS
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
14 brew install ffmpeg
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
15
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
16 # Arch Linux
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
17 sudo pacman -S ffmpeg
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
18 ```
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
19
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
20 ## Libraries
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
21
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
22 ### ffmpeg_cli
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
23
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
24 Shells out to the `ffmpeg` and `ffprobe` command-line tools. This is the recommended approach for most projects as it's simpler and doesn't require linking against FFmpeg libraries.
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 ```starlark
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
27 deps = ["//third_party/ffmpeg:ffmpeg_cli"]
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
28 ```
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 ```c
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
31 #include "third_party/ffmpeg/ffmpeg_cli.h"
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
32
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
33 // Convert image to WebP
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
34 ImageConvertOpts opts = ffmpeg_image_opts_default();
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
35 opts.quality = 85;
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
36 ffmpeg_image_to_webp("input.jpg", "output.webp", &opts);
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
37
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
38 // Convert video to HLS
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
39 HlsConvertOpts hls_opts = ffmpeg_hls_opts_default();
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
40 ffmpeg_video_to_hls("input.mp4", "./output", "video", &hls_opts);
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
41 ```
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
42
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
43 ### ffmpeg (library)
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 Links against FFmpeg libraries directly. Use this when you need low-level access to FFmpeg's encoding/decoding APIs.
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 ```starlark
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
48 deps = ["//third_party/ffmpeg:ffmpeg"]
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
49 ```
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
50
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
51 ## API
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
52
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
53 ### Image Conversion
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 ```c
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
56 FfmpegResult ffmpeg_image_to_webp(const char* input, const char* output, ImageConvertOpts* opts);
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
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59 ### Video to HLS
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
60
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
61 ```c
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
62 FfmpegResult ffmpeg_video_to_hls(const char* input, const char* output_dir, const char* name, HlsConvertOpts* opts);
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
63 ```
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
65 ### Video Thumbnail
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
66
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
67 ```c
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
68 FfmpegResult ffmpeg_video_thumbnail(const char* input, const char* output, int timestamp_seconds);
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
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
71 ### Duration
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
72
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
73 ```c
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
74 FfmpegResult ffmpeg_get_duration(const char* input, double* duration_out);
7ef4c9d2a72d [DO NOT PUSH] Random values.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
75 ```