1 <ng-container [formGroup]=
"form">
3 <div class=
"row mt-4"> <!-- transcoding grid -->
4 <div class=
"col-12 col-lg-4 col-xl-3"></div>
5 <div class=
"col-12 col-lg-8">
7 <div class=
"callout callout-orange">
9 Estimating a server's capacity to transcode and stream videos isn't easy and we can't tune PeerTube automatically.
13 However, you may want to read
<a class=
"link-orange" target=
"_blank" rel=
"noopener noreferrer" href=
"https://docs.joinpeertube.org/admin/configuration#vod-transcoding">our guidelines
</a> before tweaking the following values.
19 <div class=
"row mt-4"> <!-- transcoding grid -->
20 <div class=
"col-12 col-lg-4 col-xl-3">
21 <div i18n
class=
"inner-form-title">TRANSCODING
</div>
22 <div i18n
class=
"inner-form-description">
23 Process uploaded videos so that they are in a streamable form that any device can play. Though costly in
24 resources, this is a critical part of PeerTube, so tread carefully.
28 <div class=
"col-12 col-lg-8 col-xl-9">
30 <ng-container formGroupName=
"transcoding">
32 <div class=
"col-12 col-xl-11">
33 <my-peertube-checkbox inputName=
"transcodingEnabled" formControlName=
"enabled" [recommended]=
"true">
34 <ng-template ptTemplate=
"label">
35 <ng-container i18n
>Transcoding enabled
</ng-container>
38 <ng-container ngProjectAs=
"extra">
40 <div class=
"form-group" formGroupName=
"remoteRunners" [ngClass]=
"getTranscodingDisabledClass()">
42 inputName=
"transcodingRemoteRunnersEnabled" formControlName=
"enabled"
43 i18n-labelText
labelText=
"Enable remote runners"
45 <ng-container ngProjectAs=
"description">
47 Use
<a routerLink=
"/admin/system/runners/runners-list">remote runners
</a> to process VOD transcoding.
48 Remote runners has to register on your instance first.
51 </my-peertube-checkbox>
54 <div class=
"callout callout-light pt-2 pb-0">
55 <label i18n
>Input formats
</label>
57 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
59 inputName=
"transcodingAllowAdditionalExtensions" formControlName=
"allowAdditionalExtensions"
60 i18n-labelText
labelText=
"Allow additional extensions"
62 <ng-container ngProjectAs=
"description">
63 <span i18n
>Allows users to upload videos with additional extensions than .mp4, .ogv and .webm (for example: .avi, .mov, .mkv etc).
</span>
65 </my-peertube-checkbox>
68 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
70 inputName=
"transcodingAllowAudioFiles" formControlName=
"allowAudioFiles"
71 i18n-labelText
labelText=
"Allow audio files upload"
73 <ng-container ngProjectAs=
"description">
74 <div i18n
>Allows users to upload .mp3, .ogg, .wma, .flac, .aac, or .ac3 audio files.
</div>
75 <div i18n
>The file will be merged in a still image video with the preview file on upload.
</div>
77 </my-peertube-checkbox>
81 <div class=
"callout callout-light pt-2 mt-2 pb-0">
82 <label i18n
>Output formats
</label>
84 <ng-container formGroupName=
"webtorrent">
85 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
87 inputName=
"transcodingWebTorrentEnabled" formControlName=
"enabled"
88 i18n-labelText
labelText=
"WebTorrent enabled"
90 <ng-template ptTemplate=
"help">
92 <p i18n
>If you also enabled HLS support, it will multiply videos storage by
2</p>
95 </my-peertube-checkbox>
99 <ng-container formGroupName=
"hls">
100 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
101 <my-peertube-checkbox
102 inputName=
"transcodingHlsEnabled" formControlName=
"enabled"
103 i18n-labelText
labelText=
"HLS with P2P support enabled"
106 <ng-template ptTemplate=
"help">
108 <strong>Requires ffmpeg
>=
4.1</strong>
110 <p>Generate HLS playlists and fragmented MP4 files resulting in a better playback than with plain WebTorrent:
</p>
112 <li>Resolution change is smoother
</li>
113 <li>Faster playback especially with long videos
</li>
114 <li>More stable playback (less bugs/infinite loading)
</li>
117 <p>If you also enabled WebTorrent support, it will multiply videos storage by
2</p>
120 </my-peertube-checkbox>
124 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
125 <label i18n
>Resolutions to generate
</label>
127 <div class=
"ms-2 d-flex flex-column">
128 <my-peertube-checkbox
129 inputName=
"transcodingAlwaysTranscodeOriginalResolution" formControlName=
"alwaysTranscodeOriginalResolution"
130 i18n-labelText
labelText=
"Always transcode original resolution"
132 </my-peertube-checkbox>
134 <span class=
"mt-3 mb-2 small muted" i18n
>
135 The original file resolution will be the default target if no option is selected.
138 <ng-container formGroupName=
"resolutions">
139 <div class=
"form-group" *
ngFor=
"let resolution of resolutions">
140 <my-peertube-checkbox
141 [inputName]=
"getResolutionKey(resolution.id)" [formControlName]=
"resolution.id"
142 labelText=
"{{ resolution.label }}"
144 <ng-template *
ngIf=
"resolution.description" ptTemplate=
"help">
145 <div [innerHTML]=
"resolution.description"></div>
147 </my-peertube-checkbox>
155 </my-peertube-checkbox>
158 <div class=
"form-group mt-4" [ngClass]=
"getTranscodingDisabledClass()">
159 <label i18n
for=
"transcodingThreads">Transcoding threads
</label>
161 <span class=
"small muted ms-1">
162 <ng-container *
ngIf=
"getTotalTranscodingThreads().atMost" i18n
>
163 will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with live transcoding
166 <ng-container *
ngIf=
"!getTotalTranscodingThreads().atMost" i18n
>
167 will claim at least {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with live transcoding
171 <my-select-custom-value
172 id=
"transcodingThreads"
173 [items]=
"transcodingThreadOptions"
174 formControlName=
"threads"
176 ></my-select-custom-value>
178 <div *
ngIf=
"formErrors.transcoding.threads" class=
"form-error">{{ formErrors.transcoding.threads }}
</div>
181 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
182 <label i18n
for=
"transcodingConcurrency">Transcoding jobs concurrency
</label>
183 <span class=
"small muted ms-1" i18n
>allows to transcode multiple files in parallel. ⚠️ Requires a PeerTube restart
</span>
185 <div class=
"number-with-unit">
186 <input type=
"number" name=
"transcodingConcurrency" formControlName=
"concurrency" />
187 <span i18n
>jobs in parallel
</span>
190 <div *
ngIf=
"formErrors.transcoding.concurrency" class=
"form-error">{{ formErrors.transcoding.concurrency }}
</div>
193 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
194 <label i18n
for=
"transcodingProfile">Transcoding profile
</label>
195 <span class=
"small muted ms-1" i18n
>new transcoding profiles can be added by PeerTube plugins
</span>
198 id=
"transcodingProfile"
199 formControlName=
"profile"
200 [items]=
"transcodingProfiles"
202 ></my-select-options>
204 <div *
ngIf=
"formErrors.transcoding.profile" class=
"form-error">{{ formErrors.transcoding.profile }}
</div>
212 <div class=
"row mt-2"> <!-- video studio grid -->
213 <div class=
"col-12 col-lg-4 col-xl-3">
214 <div i18n
class=
"inner-form-title">VIDEO STUDIO
</div>
215 <div i18n
class=
"inner-form-description">
216 Allows your users to edit their video (cut, add intro/outro, add a watermark etc)
220 <div class=
"col-12 col-lg-8 col-xl-9">
222 <ng-container formGroupName=
"videoStudio">
223 <div class=
"form-group" [ngClass]=
"getTranscodingDisabledClass()">
224 <my-peertube-checkbox
225 inputName=
"videoStudioEnabled" formControlName=
"enabled"
226 i18n-labelText
labelText=
"Enable video studio"
228 <ng-container ngProjectAs=
"description" *
ngIf=
"!isTranscodingEnabled()">
229 <span i18n
>⚠️ You need to enable transcoding first to enable video studio
</span>
231 </my-peertube-checkbox>
234 <div class=
"form-group" formGroupName=
"remoteRunners" [ngClass]=
"getStudioDisabledClass()">
235 <my-peertube-checkbox
236 inputName=
"videoStudioRemoteRunnersEnabled" formControlName=
"enabled"
237 i18n-labelText
labelText=
"Enable remote runners"
239 <ng-container ngProjectAs=
"description">
241 Use
<a routerLink=
"/admin/system/runners/runners-list">remote runners
</a> to process studio transcoding tasks.
242 Remote runners has to register on your instance first.
245 </my-peertube-checkbox>