|
217
|
1 # ffmpeg
|
|
|
2
|
|
|
3 FFmpeg wrapper for Bazel projects.
|
|
|
4
|
|
|
5 ## Prerequisites
|
|
|
6
|
|
|
7 FFmpeg must be installed on the system:
|
|
|
8
|
|
|
9 ```bash
|
|
|
10 # Ubuntu/Debian
|
|
|
11 sudo apt install ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev
|
|
|
12
|
|
|
13 # macOS
|
|
|
14 brew install ffmpeg
|
|
|
15
|
|
|
16 # Arch Linux
|
|
|
17 sudo pacman -S ffmpeg
|
|
|
18 ```
|
|
|
19
|
|
|
20 ## Libraries
|
|
|
21
|
|
|
22 ### ffmpeg_cli
|
|
|
23
|
|
|
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.
|
|
|
25
|
|
|
26 ```starlark
|
|
|
27 deps = ["//third_party/ffmpeg:ffmpeg_cli"]
|
|
|
28 ```
|
|
|
29
|
|
|
30 ```c
|
|
|
31 #include "third_party/ffmpeg/ffmpeg_cli.h"
|
|
|
32
|
|
|
33 // Convert image to WebP
|
|
|
34 ImageConvertOpts opts = ffmpeg_image_opts_default();
|
|
|
35 opts.quality = 85;
|
|
|
36 ffmpeg_image_to_webp("input.jpg", "output.webp", &opts);
|
|
|
37
|
|
|
38 // Convert video to HLS
|
|
|
39 HlsConvertOpts hls_opts = ffmpeg_hls_opts_default();
|
|
|
40 ffmpeg_video_to_hls("input.mp4", "./output", "video", &hls_opts);
|
|
|
41 ```
|
|
|
42
|
|
|
43 ### ffmpeg (library)
|
|
|
44
|
|
|
45 Links against FFmpeg libraries directly. Use this when you need low-level access to FFmpeg's encoding/decoding APIs.
|
|
|
46
|
|
|
47 ```starlark
|
|
|
48 deps = ["//third_party/ffmpeg:ffmpeg"]
|
|
|
49 ```
|
|
|
50
|
|
|
51 ## API
|
|
|
52
|
|
|
53 ### Image Conversion
|
|
|
54
|
|
|
55 ```c
|
|
|
56 FfmpegResult ffmpeg_image_to_webp(const char* input, const char* output, ImageConvertOpts* opts);
|
|
|
57 ```
|
|
|
58
|
|
|
59 ### Video to HLS
|
|
|
60
|
|
|
61 ```c
|
|
|
62 FfmpegResult ffmpeg_video_to_hls(const char* input, const char* output_dir, const char* name, HlsConvertOpts* opts);
|
|
|
63 ```
|
|
|
64
|
|
|
65 ### Video Thumbnail
|
|
|
66
|
|
|
67 ```c
|
|
|
68 FfmpegResult ffmpeg_video_thumbnail(const char* input, const char* output, int timestamp_seconds);
|
|
|
69 ```
|
|
|
70
|
|
|
71 ### Duration
|
|
|
72
|
|
|
73 ```c
|
|
|
74 FfmpegResult ffmpeg_get_duration(const char* input, double* duration_out);
|
|
|
75 ```
|