types.ts
⎇
Raw
1export interface SubtitleTrack {
2 //ordinal among subtitle streams, matching ffmpeg's 0:s:<streamIndex> mapping
3 streamIndex: number;
4 language?: string;
5 title?: string;
6 default: boolean;
7 forced: boolean;
8 codec?: string;
9}
10
11export interface AudioTrack {
12 //ordinal among audio streams, matching ffmpeg's 0:a:<streamIndex> mapping
13 streamIndex: number;
14 language?: string;
15 title?: string;
16 default: boolean;
17}
18
19export interface Chapter {
20 start: number;
21 end?: number;
22 title: string;
23}
24
25export interface VideoExtras {
26 subtitleTracks: SubtitleTrack[];
27 chapters: Chapter[];
28}
29
30export interface Metadata {
31 duration: number;
32 trackNumber?: number;
33 title?: string;
34 artist?: string;
35 album?: string;
36 genre?: string[];
37 audioCodec?: string;
38 audioBitrate?: number;
39 videoCodec?: string;
40 videoBitrate?: number;
41 videoWidth?: number;
42 videoHeight?: number;
43 frameRate?: number;
44 interlaced?: boolean;
45 container?: string;
46 audioTracks?: AudioTrack[];
47 subtitleTracks?: SubtitleTrack[];
48}
49
50export interface MediaFile {
51 metadata: Metadata;
52}
53
54export interface Directory {
55 files: FileListing;
56}
57
58//Scanned = we know which children exist
59//Unknown = either:
60// - not scanned (is a subdirectory and recursive=false)
61// - only partially exists, because some deeper file was scanned, and this entry only exists as a link
62export interface DirectoryWithStatus {
63 files: FileListingWithStatus;
64 status: "Scanned" | "Unknown";
65}
66
67export type FileListing = Record<string, Directory | MediaFile>;
68export type FileListingWithStatus = Record<string, DirectoryWithStatus | MediaFile>;
69
70export enum MediaContainer {
71 mp4 = "mp4",
72 webm = "webm",
73 mp3 = "mp3",
74 ogg = "ogg",
75}
76
77export enum VideoCodec {
78 none = "none",
79 av1 = "av1",
80 h264 = "h264",
81 h265 = "h265",
82 vp9 = "vp9",
83}
84
85export enum AudioCodec {
86 opus = "opus",
87 aac = "aac",
88 vorbis = "vorbis",
89 mp3 = "mp3",
90 flac = "flac",
91}
92
93export enum VideoEncodingSetting {
94 veryfast = "veryfast",
95 fast = "fast",
96 balanced = "balanced",
97 quality = "quality",
98}
99