1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use structopt::clap::AppSettings::ColoredHelp;
use structopt::StructOpt;
use av1an_core::encoder::Encoder;
use av1an_core::{ChunkMethod, ConcatMethod, SplitMethod};
#[derive(StructOpt, Debug, Serialize, Deserialize)]
#[structopt(name = "av1an", setting = ColoredHelp)]
pub struct Args {
#[structopt(short, parse(from_os_str))]
pub input: PathBuf,
#[structopt(long, parse(from_os_str))]
pub temp: Option<PathBuf>,
#[structopt(short, parse(from_os_str))]
pub output_file: Option<PathBuf>,
#[structopt(short, long, possible_values = &["ffmpeg", "mkvmerge", "ivf"], default_value = "ffmpeg")]
pub concat: ConcatMethod,
#[structopt(short, long)]
pub quiet: bool,
#[structopt(long)]
pub verbose: bool,
#[structopt(short, long)]
pub logging: Option<String>,
#[structopt(short, long)]
pub resume: bool,
#[structopt(long)]
pub keep: bool,
#[structopt(short = "m", long, possible_values=&["segment", "select", "ffms2", "lsmash", "hybrid"])]
pub chunk_method: Option<ChunkMethod>,
#[structopt(short, long, parse(from_os_str))]
pub scenes: Option<PathBuf>,
#[structopt(long, possible_values=&["av-scenechange", "av-scenechange-fast", "none"], default_value = "av-scenechange")]
pub split_method: SplitMethod,
#[structopt(short = "x", long, default_value = "240")]
pub extra_split: usize,
#[structopt(long, default_value = "60")]
pub min_scene_len: usize,
#[structopt(short, long)]
pub passes: Option<u8>,
#[structopt(short, long)]
pub video_params: Option<String>,
#[structopt(short, long, default_value = "aom", possible_values=&["aom", "rav1e", "vpx", "svt-av1", "x264", "x265"])]
pub encoder: Encoder,
#[structopt(short, long, default_value = "0")]
pub workers: usize,
#[structopt(long)]
pub force: bool,
#[structopt(short = "f", long)]
pub ffmpeg: Option<String>,
#[structopt(short, long)]
pub audio_params: Option<String>,
#[structopt(long, default_value = "yuv420p10le")]
pub pix_format: String,
#[structopt(long)]
pub vmaf: bool,
#[structopt(long, parse(from_os_str))]
pub vmaf_path: Option<PathBuf>,
#[structopt(long, default_value = "1920x1080")]
pub vmaf_res: String,
#[structopt(long)]
pub vmaf_threads: Option<u32>,
#[structopt(long)]
pub target_quality: Option<f32>,
#[structopt(long, possible_values = &["per_shot"], default_value = "per_shot")]
pub target_quality_method: String,
#[structopt(long, default_value = "4")]
pub probes: u32,
#[structopt(long, default_value = "4")]
pub probing_rate: u32,
#[structopt(long)]
pub probe_slow: bool,
#[structopt(long)]
pub min_q: Option<u32>,
#[structopt(long)]
pub max_q: Option<u32>,
#[structopt(long)]
pub vmaf_filter: Option<String>,
}