-
Notifications
You must be signed in to change notification settings - Fork 0
/
class.mkvmerge.php
129 lines (88 loc) · 2.56 KB
/
class.mkvmerge.php
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
<?php
class Mkvmerge {
public $debug = false;
public $verbose = false;
// mkvmerge
public $binary = 'mkvmerge';
public $chapters = '';
public $mkvmerge_opts = '';
public $mkvmerge_output = '/dev/null';
public $track_order = '';
// mkvmerge source
public $input_filename = '/dev/sr0';
public $input_filenames = array();
public $output_filename = 'media_track.mkv';
// Video
public $video_tracks = array();
// Audio
public $audio_tracks = array();
// Subtitles
public $subtitle_tracks = array();
public function debug($bool = true) {
$this->debug = $this->verbose = (boolean)$bool;
}
public function verbose($bool = true) {
$this->verbose = (boolean)$bool;
}
public function set_binary($str) {
$this->binary = $str;
}
/** Filename **/
public function input_filename($src) {
$this->input_filenames[] = $src;
}
public function output_filename($str) {
$this->output_filename = $str;
}
public function add_input_filename($str) {
$this->input_filenames[] = $str;
}
public function add_video_track($str) {
$this->video_tracks[] = abs(intval($str));
}
public function add_audio_track($str) {
$this->audio_tracks[] = abs(intval($str));
}
public function add_subtitle_track($str) {
$this->subtitle_tracks[] = abs(intval($str));
}
public function add_chapters($str) {
$this->chapters = $str;
}
public function set_track_order($str) {
$this->track_order = $str;
}
public function get_arguments() {
$args = array();
$args['-o'] = $this->output_filename;
if(count($this->video_tracks))
$args['--video-tracks'] = implode(',', $this->video_tracks);
if(count($this->audio_tracks))
$args['--audio-tracks'] = implode(',', $this->audio_tracks);
if(count($this->subtitle_tracks))
$args['--subtitle-tracks'] = implode(',', $this->subtitle_tracks);
if(strlen($this->chapters))
$args['--chapters'] = $this->chapters;
if(strlen($this->track_order))
$args['--track-order'] = $this->track_order;
$args['--default-language'] = "eng";
return $args;
}
public function get_executable_string() {
$cmd = array();
$cmd[] = $this->binary;
$args = $this->get_arguments();
foreach($args as $key => $value) {
$arg_value = escapeshellarg($value);
$cmd[] = "$key $arg_value";
}
if(!count($this->subtitle_tracks))
$cmd[] = "--no-subtitles";
if($this->verbose)
$cmd[] = "-v";
foreach($this->input_filenames as $filename)
$cmd[] = escapeshellarg($filename);
$str = implode(" ", $cmd);
return $str;
}
}