forked from jlesage/docker-handbrake
-
Notifications
You must be signed in to change notification settings - Fork 0
/
appdefs.xml
1134 lines (1089 loc) · 58.5 KB
/
appdefs.xml
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!--
Definitions for HandBrake docker container.
This file is used as data source to generate README.md and unRAID template files
from Jinja2 templates.
-->
<defs>
<app>
<id>3</id>
<gui_type>x11</gui_type>
<friendly_name>HandBrake</friendly_name>
<name>{{ defs.app.friendly_name|lower|replace(' ', '-') }}</name>
<project>
<description>HandBrake is a tool for converting video from nearly any format to a selection of modern, widely supported codecs.</description>
<url>https://handbrake.fr/</url>
</project>
<unraid>
<support_url>https://forums.unraid.net/topic/57420-support-handbrake/</support_url>
<category>MediaApp:Video</category>
</unraid>
<container>
<overview>A fully automated mode is also available: drop files into a watch folder and let {{ defs.app.friendly_name }} process them without any user interaction.</overview>
<rough_download_size>80MB</rough_download_size>
<storage_permissions>ro</storage_permissions>
</container>
<!-- Extra stuff to be added to the documentation. -->
<documentation>
<section>
<title level="2">Access to Optical Drive(s)</title>
<content>
By default, a Docker container doesn't have access to host's devices. However,
access to one or more device can be granted with the `--device DEV` parameter.
Optical drives usually have `/dev/srX` as device. For example, the first drive
is `/dev/sr0`, the second `/dev/sr1`, and so on. To allow HandBrake to access
the first drive, this parameter is needed:
```
--device /dev/sr0
```
To easily find devices of optical drives, start the container and look at its
log for messages similar to these ones:
```
...
[cont-init.d] 95-check-optical-drive.sh: executing...
[cont-init.d] 95-check-optical-drive.sh: looking for usable optical drives...
[cont-init.d] 95-check-optical-drive.sh: found optical drive /dev/sr0, but it is not usable because is not exposed to the container.
[cont-init.d] 95-check-optical-drive.sh: no usable optical drive found.
[cont-init.d] 95-check-optical-drive.sh: exited 0.
...
```
Since HandBrake can decrypt DVD video discs, their conversion can be performed
directly from the optical device. From the graphical interface, click the
`Open Source` button and browse through the file system to find your optical
drive device (e.g. `/dev/sr0`).
</content>
</section>
<section>
<title level="2">Automatic Video Conversion</title>
<content>
This container has an automatic video converter built-in. This is useful to
batch-convert videos without user interaction.
Basically, files copied to the `/watch` container folder are automatically
converted by HandBrake to a pre-defined video format according to a pre-defined
preset. Both the format and the preset are specified via environment variables:
| Variable | Default |
|----------------|---------|
|`AUTOMATED_CONVERSION_PRESET` | "General/Very Fast 1080p30" |
|`AUTOMATED_CONVERSION_FORMAT` | "mp4" |
See the [Environment Variables](#environment-variables) section for details
about setting environment variables.
**NOTE**: A preset is identified by its category and its name.
**NOTE**: All default presets, along with personalized/custom ones, can be seen
with the HandBrake GUI.
**NOTE**: Converted videos are stored, by default, to the `/output` folder of
the container.
**NOTE**: The status and progression of conversions performed by the automatic
video converter can be seen from both the GUI and the container's log.
Container's log can be obtained by executing the command
`docker logs handbrake`, where `handbrake` is the name of the container. Also,
full details about the conversion are stored in `/config/log/hb/conversion.log`
(container path).
</content>
</section>
<section>
<title level="3">Multiple Watch Folders</title>
<content>
If needed, up to 4 additionnal watch folders can be used:
- `/watch2`
- `/watch3`
- `/watch4`
- `/watch5`
This is useful in scenarios where videos need to be converted by different
presets. For example, one could use a watch folder for movies and another watch
folder for TV shows, both having different encoding quality requirements.
By default, additional watch folders inherits the same settings has the main one
(`/watch`). A setting for a particular watch folder can be overrided by adding
its index to the corresponding environment variable name.
For example, to set the HandBrake preset used to convert videos in `/watch2`,
the environment variable `AUTOMATED_CONVERSION_PRESET_2` is used.
`AUTOMATED_CONVERSION_PRESET_3` is used for `/watch3`, and so on.
All settings related to the automatic video converter can be overrided for each
additional watch folder:
- `AUTOMATED_CONVERSION_PRESET`
- `AUTOMATED_CONVERSION_FORMAT`
- `AUTOMATED_CONVERSION_SOURCE_STABLE_TIME`
- `AUTOMATED_CONVERSION_SOURCE_MIN_DURATION`
- `AUTOMATED_CONVERSION_OUTPUT_DIR`
- `AUTOMATED_CONVERSION_OUTPUT_SUBDIR`
- `AUTOMATED_CONVERSION_OVERWRITE_OUTPUT`
- `AUTOMATED_CONVERSION_KEEP_SOURCE`
- `AUTOMATED_CONVERSION_VIDEO_FILE_EXTENSIONS`
- `AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION`
- `AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS`
</content>
</section>
<section>
<title level="3">Video Discs</title>
<content>
The automatic video converter supports video discs, in the following format:
- ISO image file.
- DVD video disc folder containing the `VIDEO_TS` folder.
- Blu-ray video disc folder containing the `BDMV` folder.
Note that folder names are case sensitive. For example, `video_ts`, `Video_Ts`
or `Bdmv` won't be treated as discs, but as normal directories.
When the source is a disc folder, the name of the converted video file will
match to one of its folder. For example, `/watch/MyMovie/VIDEO_TS` will produce
a video file with name `MyMovie.mp4`.
Video discs can have multiple titles (the main movie, previews, extras, etc).
In a such case, each title is converted to its own file. These files have the
suffix `.title-XX`, where `XX` is the title number. For example, if the file
`MyMovie.iso` has 2 titles, the following files would be generated:
- `MyMovie.title-1.mp4`
- `MyMovie.title-2.mp4`
It is possible to ignore titles shorted than a specific amount of time. By
default, only titles longer than 10 seconds are processed. This duration can be
adjusted via the `AUTOMATED_CONVERSION_SOURCE_MIN_DURATION` environment
variable. See the [Environment Variables](#environment-variables) section for
details about setting environment variables.
</content>
</section>
<section>
<title level="3">Hooks</title>
<content>
Custom actions can be performed using hooks. Hooks are shell scripts executed
by the automatic video converter.
**NOTE**: Hooks are always invoked via `/bin/sh`, ignoring any shebang the
script may have.
Hooks are optional and by default, no one is defined. A hook is defined and
executed when the script is found at a specific location.
The following table describe available hooks:
| Container location | Description | Parameter(s) |
|--------------------|-------------|--------------|
| `/config/hooks/pre_conversion.sh` | Hook executed before the beginning of a video conversion. | The first argument is the path of the converted video. The second argument is the path to the source file. Finally, the third argument is the name of the Handbrake preset that will be used to convert the video. |
| `/config/hooks/post_conversion.sh` | Hook executed when the conversion of a video file is terminated. | The first parameter is the status of the conversion. A value of `0` indicates that the conversion terminated successfuly. Any other value represent a failure. The second argument is the path to the converted video (the output). The third argument is the path to the source file. Finally, the fourth argument is the name of the Handbrake preset used to convert the video. |
| `/config/post_watch_folder_processing.sh | Hook executed after all videos in the watch folder have been processed. | The path of the watch folder. |
During the first start of the container, example hooks are installed in
`/config/hooks/`. Example scripts have the suffix `.example`. For example,
you can use `/config/hooks/post_conversion.sh.example` as a starting point.
**NOTE**: Keep in mind that this container has the minimal set of packages
required to run HandBrake. This may limit actions that can be performed in
hooks.
</content>
</section>
<section>
<title level="3">Temporary Conversion Directory</title>
<content>
A video being converted is written in a hidden, temporary directory under the
root of the output directory (`/output` by default). Once a conversion
successfully terminates, the video file is moved to its final location.
This feature can be useful for scenarios where the output folder is monitored
by another application: with proper configuration, one can make sure this
application only "sees" the final, converted video file and not the transient
versions.
If the monitoring application ignores hidden directories, then nothing special
is required and the application should always see the final file.
However, if the monitoring application handles hidden directories, the automatic
video converter should be configured with the
`AUTOMATED_CONVERSION_OUTPUT_SUBDIR` environment variable sets to a
subdirectory. The application can then be configured to monitor this
subdirectory. For example, if `AUTOMATED_CONVERSION_OUTPUT_SUBDIR` is set to
`TV Shows` and `/output` is mapped to `$HOME/appvolumes/HandBrake` on the host,
`$HOME/appvolumes/HandBrake/TV Shows` should be monitored by the application.
</content>
</section>
<section>
<title level="2">Intel Quick Sync Video</title>
<content>
Intel Quick Sync Video is Intel's brand for its dedicated video encoding and
decoding hardware core. It is a technology that is capable of offloading video
decoding and encoding task to the integrated GPU, thus saving the CPU usage to
do other tasks. As a specialized hardware core on the processor die, Quick Sync
offers a much more power efficient video processing which is much superior to
video encoding on a CPU.
For HandBrake to be able to use hardware-accelerated encoding, the following are
required:
- Have a compatible Intel processor. To determine if your CPU has the Quick
Sync Video hardware, consult this [list] from the [Intel Ark] website. The
model name of your processor is printed to the container's log during its
startup. Look for a message like this:
```
[cont-init.d] 95-check-qsv.sh: Processor: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
```
- The Intel i915 graphic driver must be loaded on the **host**.
- The `/dev/dri` device must be exposed to the container. This is done by
adding the `--device /dev/dri` parameter to the `docker run` command.
When Intel Quick Sync Video is properly enabled, HandBrake offers the following
video encoder:
```
H.264 (Intel QSV)
```
If this encoder is not part of the list, something is wrong and looking at the
container's log can give more details about the issue.
**NOTE**: In most cases, HandBrake can successfully access the `/dev/dri` device
without changing anything on the host side. This is possible because the user
under which the container is running is automatically added to the group owning
the `/dev/dri` device. However, this method doesn't work if the device is owned
by the group `root`. The problem can be fixed using one of the following
methods:
- Running the container as root (`USER_ID=0`).
- Adding, on the host, read/write permissions for all to the `/dev/dri`
device:
```
sudo chmod a+wr /dev/dri/*
```
- Changing, on the host, the group owning the `/dev/dri` device. For example,
to change the group to `video`:
```
sudo chown root:video /dev/dri/*
```
[list]: https://ark.intel.com/Search/FeatureFilter?productType=processors&QuickSyncVideo=true
[Intel Ark]: https://ark.intel.com
</content>
</section>
<section>
<title level="3">unRAID</title>
<content>
The Intel i915 driver is already included in unRAID. To automatically load the
driver during the startup of the host, the following lines must be added to
`/boot/config/go`:
```
# Load the i915 driver.
modprobe i915
```
</content>
</section>
<section>
<title level="2">Nightly Builds</title>
<content>
{{ defs.app.friendly_name }} nightly builds are based on the latest development code, which means
they may or may not be stable.
The latest development version is available by using the `dev-latest` Docker
image tag. For other specific development versions, look at available
[tags on Docker Hub].
When creating the container, the tag needs to be appended to the name of the
Docker image, like this:
```
docker run [OPTIONS..] jlesage/{{ defs.app.name }}:dev-latest
```
[tags on Docker Hub]: https://hub.docker.com/r/jlesage/{{ defs.app.name }}/tags/
</content>
</section>
<section>
<title level="2">Debug Builds</title>
<content>
Debug builds can be used to better investigate problems that can occur with
{{ defs.app.friendly_name }}. These builds have {{ defs.app.friendly_name }}
compiled in debug mode and all symbols are kept.
The main use case of debug builds is debugging a crash. To do this, a core dump
needs to be generated when {{ defs.app.friendly_name }} crashes. To make sure
this core dump is properly generated, two things are required:
1. Core dumps must be enabled. This is done by setting the maximum size of
cores via the `--ulimit core=-1` parameter of the `docker run` command.
A value of `-1` mean "unlimited".
2. Location of the cores must be set. This can be done by executing the
following command on the **host**:
```
echo 'CORE_PATTERN' | sudo tee /proc/sys/kernel/core_pattern
```
Where `CORE_PATTERN` is the template that defines the naming of core dump
files. For example, to set the files in the configuration volume of the
container (for easy retrieval from the host), use the pattern
`/config/core.%e.%t`.
**NOTE**: Because a core file contains the complete memory layout of an
application, it is created with restrictive permissions. If another user
other than the one used to run {{ defs.app.friendly_name }} needs to access
the core file, permissions must be changed by executing
`chmod a+r CORE`, where `CORE` is the path to the core file.
**NOTE**: Since the core dump files pattern is shared between the host and
the container, you may want to revert to the original pattern once
done.
**NOTE**: The current value of the pattern can be obtained by executing
`cat /proc/sys/kernel/core_pattern`.
Debug builds are available by using Docker image tags with the `debug` suffix.
Make sure to look at available [tags on Docker Hub].
When creating the container, the tag needs to be appended to the name of the
Docker image, like this:
```
docker run [OPTIONS..] jlesage/{{ defs.app.name }}:v1.14.3-debug
```
[tags on Docker Hub]: https://hub.docker.com/r/jlesage/{{ defs.app.name }}/tags/
</content>
</section>
<section>
<title level="3">unRAID</title>
<content>
On systems running unRAID, the `--ulimit core=-1` parameter can be added to the
`Extra Parameters` field of the container settings.
</content>
</section>
</documentation>
<!-- Changelog of the application. -->
<history>
<release>
<version>1.24.2</version>
<date>2021-10-04</date>
<change>Updated HandBrake to version 1.4.2.</change>
<change>Updated Intel Media SDK to version 21.3.5.</change>
<change>Updated gmmlib to version 21.3.1.</change>
</release>
<release>
<version>1.24.1</version>
<date>2021-08-21</date>
<change>Updated Handbrake to version 1.4.1.</change>
</release>
<release>
<version>1.24.0</version>
<date>2021-07-19</date>
<change>Updated Handbrake to version 1.4.0.</change>
<change>Updated libva to version 2.12.0.</change>
<change>Updated gmmlib to version 21.2.1.</change>
<change>Updated Intel Media Driver to version 21.2.3.</change>
<change>Updated Intel Media SDK to version 21.2.3.</change>
<change>Now using baseimage version 3.5.7, which brings the following changes:</change>
<change level="2">Updated installed packages to get latest security fixes.</change>
</release>
<release>
<version>1.23.2</version>
<date>2021-03-13</date>
<change>Fixed issue where the wrong parameter was passed to the post watch folder processing hook.</change>
</release>
<release>
<version>1.23.1</version>
<date>2021-02-06</date>
<change>Fixed an issue where the automatic video converter would not process Blu-ray video disc folder.</change>
</release>
<release>
<version>1.23.0</version>
<date>2021-01-01</date>
<change>Added the ability to overwrite the output file if it exists.</change>
<change>Added the ability to define the file extensions to be considered as video files.</change>
<change>Updated libva to version 2.10.0.</change>
<change>Updated gmmlib to version 20.4.1.</change>
<change>Updated Intel Media Driver to version 20.4.5.</change>
<change>Updated Intel Media SDK to version 20.5.1.</change>
<change>Now using baseimage based on Alpine 3.12.</change>
</release>
<release>
<version>1.22.4</version>
<date>2020-08-05</date>
<change>Upgraded libva to version 2.8.0.</change>
<change>Upgraded Intel Media SDK to version 20.2.1.</change>
<change>Upgraded Intel Media Driver to version 20.2.0.</change>
<change>Fixed an issue where non-video files would fail to be copied.</change>
<change>Now using baseimage version 3.5.6, which brings the following changes:</change>
<change level="2">Other small adjustments for the YAD log monitor target.</change>
</release>
<release>
<version>1.22.3</version>
<date>2020-06-22</date>
<change>Upgraded HandBrake to version 1.3.3.</change>
<change>Upgraded Intel VAAPI driver to version 2.4.1.</change>
<change>Now using Alpine 3.11 baseimage.</change>
</release>
<release>
<version>1.22.2</version>
<date>2020-05-26</date>
<change>Fixed issue where Intel QSV H.265 encoding would fail.</change>
</release>
<release>
<version>1.22.1</version>
<date>2020-05-09</date>
<change>Fixed the default preset used by the automatic video converter.</change>
<change>Fixed an issue where progress of a multi-pass encoding done by the automatic video converter would not be displayed correctly in the UI.</change>
</release>
<release>
<version>1.22.0</version>
<date>2020-05-04</date>
<change>Upgraded HandBrake to version 1.3.2.</change>
<change level="2">NOTE: Presets are now identified with their category. This means that any preset configured for the automatic video converter needs to be adjusted.</change>
<change>Upgraded libva to version 2.7.1.</change>
<change>Upgraded Intel Media Driver to version 20.1.1.</change>
<change>Upgraded Intel Media SDK to version 20.1.1.</change>
</release>
<release>
<version>1.21.0</version>
<date>2020-03-08</date>
<change>Custom packages for the Automatic Video Converter can now be installed via the `AUTOMATED_CONVERSION_INSTALL_PKGS` environment variable.</change>
</release>
<release>
<version>1.20.0</version>
<date>2020-02-10</date>
<change>Upgraded HandBrake to version 1.3.1.</change>
<change>Upgraded libva to version 2.6.1.</change>
<change>Upgraded Intel Media SDK to version 19.4.0.</change>
<change>Upgraded Intel Media Driver to version 19.4.0.</change>
<change>Upgraded Intel VAAPI driver to version 2.4.0.</change>
</release>
<release>
<version>1.19.0</version>
<date>2019-12-08</date>
<change>Added the ability to set a list of file extensions to be considered as non-video files. This fixes an issue where the automatic video converter would successfully convert non-video files, like images.</change>
<change>Added the ability to provide custom arguments to HandBrake when it is invoked by the automatic video converter.</change>
</release>
<release>
<version>1.18.0</version>
<date>2019-11-11</date>
<change>Upgraded HandBrake to version 1.3.0.</change>
<change>Action to take by the automatic video converter for non-video files is now configurable.</change>
<change>The automatic video converter now fails the conversion if no title is found in video file.</change>
<change>Now using baseimage v3.5.3, based on Alpine Liux 3.10, which brings the following changes:</change>
<change level="2">Updated installed packages to get latest security fixes.</change>
<change level="2">Make sure the tzdata is installed.</change>
</release>
<release>
<version>1.17.1</version>
<date>2019-05-04</date>
<change>Fixed an issue where the progress output of the automatic video converter would hang.</change>
<change>Enhanced the progress output of the automatic video converter by showing the path of the video being converted.</change>
<change>Enhanced the progress output of the automatic video converter by adjusting the frequency of messages.</change>
</release>
<release>
<version>1.17.0</version>
<date>2019-04-26</date>
<change>Progress of conversions performed by the automatic video converter can be seen in the HandBrake GUI.</change>
<change>Fixed an issue where a video conversion failure would not be detected.</change>
<change>Now using baseimage v3.5.2, which brings the following changes:</change>
<change level="2">Updated installed packages to get latest security fixes.</change>
<change level="2">Fixed issue where the container could have a zombie process.</change>
<change level="2">Fixed issue where the password would not be submitted when pressing the enter key in the password modal.</change>
<change level="2">Use relative path for favicon ressources to be more friendly with reverse proxy senarios.</change>
</release>
<release>
<version>1.16.0</version>
<date>2019-03-25</date>
<change>Upgraded HandBrake to version 1.2.2.</change>
<change>Upgraded libva to version 2.4.0.</change>
<change>Upgraded Intel Media SDK to version 18.4.1.</change>
<change>Upgraded Intel Media Driver to version 18.4.1.</change>
<change>Use baseimage based on Alpine Linux 3.9.</change>
<change>The number of watch folders is now configurable.</change>
<change>The root output directory used by the automatic video converter is now configurable.</change>
<change>Added hook invoked after all files in a watch folder are processed.</change>
</release>
<release>
<version>1.15.1</version>
<date>2019-02-12</date>
<change>Fixed issue where Intel QSV would not be setup properly when its associated Linux devices where having different owners.</change>
</release>
<release>
<version>1.15.0</version>
<date>2019-01-14</date>
<change>Upgraded HandBrake to version 1.2.0.</change>
<change>The automatic video converter now creates the output folder just before moving the video.</change>
</release>
<release>
<version>1.14.11</version>
<date>2018-12-10</date>
<change>Fixed issue where libraries required to use Intel QSV would not be found.</change>
</release>
<release>
<version>1.14.10</version>
<date>2018-12-10</date>
<change>Fixed issues related to usage of QSV on recent processors:</change>
<change level="2">Added Intel Media driver version 18.3.0.</change>
<change level="2">Upgraded Intel VAAPI driver to version 2.3.0.</change>
<change level="2">Upgraded to Intel Media SDK to version 18.3.1.</change>
<change level="2">Upgraded libva to version 2.3.0.</change>
<change level="2">By default, the new Intel Media driver is now used.</change>
<change level="2">For processors not supported by the Intel Media driver, use the Intel VAAPI driver.</change>
</release>
<release>
<version>1.14.9</version>
<date>2018-11-12</date>
<change>The automatic video converter now processes older files first.</change>
<change>Fixed an issue where the automatic video converter would fail to start when `USER_ID` is set to `0`.</change>
<change>Do not setup supplementary group if device for Intel QSV is already accessible.</change>
<change>Added a new log message for a scenario where Intel QSV would not work.</change>
</release>
<release>
<version>1.14.8</version>
<date>2018-09-19</date>
<change>Now using baseimage v3.5.1, which brings the following changes:</change>
<change level="2">Updated installed packages to get latest security fixes.</change>
</release>
<release>
<version>1.14.7</version>
<date>2018-09-11</date>
<change>Upgraded to HandBrake version 1.1.2.</change>
<change>Fixes to the automatic video converter:</change>
<change level="2">Gracefully handle the case where the pre-conversion hook removes the source video file.</change>
<change level="2">Skip unreadable files.</change>
<change level="2">Drop root privileges at start.</change>
<change level="2">Better handling of unexisting cache files.</change>
</release>
<release>
<version>1.14.6</version>
<date>2018-07-30</date>
<change>Fixed an issue where the automatic video converter would fail to convert video with multiple titles.</change>
<change>Make sure to apply the `HANDBRAKE_DEBUG` environment variable to the automatic video converter.</change>
</release>
<release>
<version>1.14.5</version>
<date>2018-07-19</date>
<change>A video being converted is now written to a temporary directory before being moved to its final location.</change>
</release>
<release>
<version>1.14.4</version>
<date>2018-07-17</date>
<change>Fixed an issue where HandBrake could crash while encoding a video using x264.</change>
</release>
<release>
<version>1.14.3</version>
<date>2018-07-16</date>
<change>Added support for debug images.</change>
</release>
<release>
<version>1.14.2</version>
<date>2018-07-13</date>
<change>Upgraded HandBrake to version 1.1.1.</change>
<change>Reduced the size of the container image.</change>
</release>
<release>
<version>1.14.1</version>
<date>2018-07-12</date>
<change>Fixed an issue where the automatic video converter would not be able to access the device required to enable Intel Quick Sync Video hardware-accelerated encoding.</change>
</release>
<release>
<version>1.14.0</version>
<date>2018-07-09</date>
<change>Added support for Intel Quick Sync Video hardware-accelerated encoding.</change>
<change>Now using baseimage v3.4.0, which is based on Alpine Linux 3.8.</change>
<change>Fixed issue where selecting a different video encoder would result in incorrect video preset selection.</change>
<change>Fixed an issue where the automatic video converter would choose an incorrect output subfolder when `SAME_AS_SRC` is used.</change>
<change>Fixed an issue where the automatic video converter, during source cleanup, would try to remove the watch folder itself.</change>
<change>Fixed an issue where the automatic video converter would choose an incorrect output filename when the source is a DVD/Blu-Ray folder.</change>
</release>
<release>
<version>1.13.5</version>
<date>2018-06-18</date>
<change>Fixed nightly build.</change>
</release>
<release>
<version>1.13.4</version>
<date>2018-06-11</date>
<change>Fixed nightly build.</change>
</release>
<release>
<version>1.13.3</version>
<date>2018-05-21</date>
<change>Moved the HandBrake debug log under the proper directory.</change>
<change>Fixed the nightly build.</change>
</release>
<release>
<version>1.13.2</version>
<date>2018-05-09</date>
<change>Fixed issue where handling DVD structure would cause a crash.</change>
</release>
<release>
<version>1.13.1</version>
<date>2018-04-26</date>
<change>Improved fix for FLAC encoder crash.</change>
</release>
<release>
<version>1.13.0</version>
<date>2018-04-09</date>
<change>Upgraded HandBrake to version 1.1.0.</change>
</release>
<release>
<version>1.12.0</version>
<date>2018-03-22</date>
<change>Added pre-conversion hook for the automatic video converter.</change>
<change>Added support for creation of image based on the latest HandBrake development code.</change>
<change>Switched to a baseimage based on Alpine Linux 3.7.</change>
</release>
<release>
<version>1.11.5</version>
<date>2018-03-02</date>
<change>Now using baseimage v3.3.4, which brings the following changes (since last used version):</change>
<change level="2">Make sure the log monitor is started after the X server.</change>
<change level="2">Fixed an issue where the log monitor `yad` target would use XDG folders of the application.</change>
<change level="2">Fixed issue where log monitor states were not cleared during container startup.</change>
</release>
<release>
<version>1.11.4</version>
<date>2018-03-01</date>
<change>Since HandBrake doesn't work well with ffmpeg, reverted to libav.</change>
<change>Thus, the FLAC encoder crash has been fixed in libav instead.</change>
<change>Make sure the main window is always visible in background.</change>
</release>
<release>
<version>1.11.3</version>
<date>2018-02-13</date>
<change>Fixed an issue where encoding audio to FLAC would cause a crash.</change>
<change>Use AAC encoder from libavcodec.</change>
<change>Fixed an issue where automatic conversion of a multi-titles medias would produce only the first one.</change>
<change>Improved logging of the automatic video converter while processing multi-titles medias.</change>
</release>
<release>
<version>1.11.2</version>
<date>2018-02-03</date>
<change>Now using baseimage v3.3.2, which brings the following changes:</change>
<change level="2">Restored timezone support in Alpine Linux images with glibc.</change>
<change level="2">Fixed issue in `add-pkg` helper where a package could be incorrectly detected as installed.</change>
</release>
<release>
<version>1.11.1</version>
<date>2018-01-30</date>
<change>Now using baseimage v3.3.1, which brings the following changes:</change>
<change level="2">Adjusted the way some ressources are accessed to better support reverse proxy to the container.</change>
</release>
<release>
<version>1.11.0</version>
<date>2018-01-22</date>
<change>Now using baseimage v3.3.0, which brings the following changes (since last used version):</change>
<change level="2">For Alpine Linux images with glibc, automatically update dynamic linker's cache after new libraries are installed.</change>
<change level="2">Fixed the LANG environment variable not being set properly.</change>
<change level="2">Added the ability to automatically install a CJK (Chinese/Japanese/Korean) font.</change>
</release>
<release>
<version>1.10.0</version>
<date>2018-01-18</date>
<change>Added support for multiple watch folders.</change>
<change>Added environment variable to set the interval at which the automatic video converter checks for new files.</change>
<change>Source file and HandBrake preset name are now passed to the post hook script.</change>
</release>
<release>
<version>1.9.4</version>
<date>2018-01-11</date>
<change>Now using baseimage v3.2.2, which brings the following changes (since last used version):</change>
<change level="2">Upgraded S6 overlay to version 1.21.2.2.</change>
<change level="2">Upgraded glibc to version 2.26 (Alpine Linux glibc images).</change>
<change level="2">Adjusted the way ownership of /config is taken to better support cases where the folder is mapped to a network share.</change>
<change>Small adjustment to the way ownership of files are taken.</change>
</release>
<release>
<version>1.9.3</version>
<date>2017-12-12</date>
<change>Now using baseimage v3.1.4, which brings the following changes:</change>
<change level="2">Set 2 worker processes for nginx.</change>
</release>
<release>
<version>1.9.2</version>
<date>2017-11-20</date>
<change>Now using baseimage v3.1.3, which brings the following changes:</change>
<change level="2">Upgraded S6 overlay to version 1.21.2.1.</change>
<change>Better output of automated conversions: encoding progress now seen in container's log, while detailed output is redirected to a log file.</change>
</release>
<release>
<version>1.9.1</version>
<date>2017-11-07</date>
<change>Now using baseimage v3.1.2, which brings the following changes (from last used version):</change>
<change level="2">Fixed an issue where a self-disabled service could be restarted.</change>
<change level="2">Upgraded S6 overlay to version 1.21.2.0.</change>
<change level="2">Use a more efficient way to monitor status files.</change>
</release>
<release>
<version>1.9.0</version>
<date>2017-10-29</date>
<change>Now using baseimage v3.1.0, which brings the following changes:</change>
<change level="2">Upgraded S6 overlay to version 1.21.1.1.</change>
<change level="2">Enhanced integration of service dependencies functionality.</change>
<change level="2">Added a simple log monitor.</change>
<change level="2">Fixed race condition where container's exit code would not be the expected one.</change>
<change level="2">Fixed issue where application's GUI fails to displayed when accessing it through the web interface via standard ports 80/443.</change>
</release>
<release>
<version>1.8.0</version>
<date>2017-10-09</date>
<change>Now using baseimage v3.0.2, which brings the following changes:</change>
<change level="2">Better support for service dependencies.</change>
<change level="2">Added support for secure access to the application's GUI.</change>
</release>
<release>
<version>1.7.0</version>
<date>2017-09-18</date>
<change>Added support for optical drive(s) access.</change>
<change>Removed some useless shortcuts in the video source selection window.</change>
</release>
<release>
<version>1.6.1</version>
<date>2017-09-08</date>
<change>Now using baseimage v2.0.8, which brings the following changes (from last used version):</change>
<change level="2">Fixed timezone support on alpine-glibc images.</change>
<change level="2">Fixed duplicated entries in /etc/passwd and /etc/group that were created after a restart of the container.</change>
</release>
<release>
<version>1.6.0</version>
<date>2017-08-16</date>
<change>Added libdvdcss to allow reading of encrypted DVD video files.</change>
</release>
<release>
<version>1.5.9</version>
<date>2017-08-14</date>
<change>Now using baseimage v2.0.6, which brings the following changes:</change>
<change level="2">Upgraded S6 overlay to version 1.20.0.0.</change>
</release>
<release>
<version>1.5.8</version>
<date>2017-08-12</date>
<change>Fixed conversion of videos containing multiple titles.</change>
</release>
<release>
<version>1.5.7</version>
<date>2017-07-31</date>
<change>Now using baseimage v2.0.5, which brings the following changes (from last used version):</change>
<change level="2">Clear the environment of the container during startup.</change>
<change level="2">Clear the /tmp folder during startup.</change>
<change level="2">Cleanly terminate the X server when container is restarted/stopped.</change>
<change level="2">Improved robustness of X server starting process.</change>
<change level="2">Removed unneeded files from the image.</change>
</release>
<release>
<version>1.5.6</version>
<date>2017-07-27</date>
<change>Watch folder: recursively remove empty directories.</change>
</release>
<release>
<version>1.5.5</version>
<date>2017-07-27</date>
<change>Now using baseimage v2.0.3, which brings the following changes:</change>
<change level="2">Improved robustness of the X server starting process.</change>
</release>
<release>
<version>1.5.4</version>
<date>2017-07-26</date>
<change>Watch folder: properly support video discs (ISO files, DVD/Blu-ray folders).</change>
<change>Watch folder: when removing empty folders, ignore the watch folder itself.</change>
<change>Watch folder: make sure to abort if destination file already exists.</change>
</release>
<release>
<version>1.5.3</version>
<date>2017-07-25</date>
<change>Fixed HandBrake CLI crash that was occuring when working with ISO files or DVD folders.</change>
<change>Small adjustments to the default configuration file.</change>
</release>
<release>
<version>1.5.2</version>
<date>2017-07-23</date>
<change>Now using baseimage v2.0.2, which brings the following changes:</change>
<change level="2">Proper VNC port is exposed.</change>
</release>
<release>
<version>1.5.1</version>
<date>2017-07-18</date>
<change>Now using baseimage v2.0.1, which brings the following changes:</change>
<change level="2">Internal enhancements.</change>
<change level="2">Clean temporary files left by npm.</change>
</release>
<release>
<version>1.5.0</version>
<date>2017-07-17</date>
<change>Now using baseimage v2.0.0, which brings the following changes:</change>
<change level="2">Various internal enhancements.</change>
<change level="2">Fixed the way a service waits for another one.</change>
<change>Watch folder: ignore hidden files and folders.</change>
<change>Watch folder: adjusted the way empty folders are removed.</change>
</release>
<release>
<version>1.4.0</version>
<date>2017-07-04</date>
<change>Watch folder: Make sure to respect the configured umask.</change>
<change>Now using baseimage v1.5.0, which brings the following changes:</change>
<change level="2">Added the UMASK environment variable to control how file permissions are set for newly created files.</change>
<change level="2">Added the X11VNC_EXTRA_OPTS environment variable used to pass additional arguments to the x11vnc server.</change>
<change level="2">By default, activate auto-scaling of application's window.</change>
<change level="2">Applied latest Alpine Linux security updates.</change>
</release>
<release>
<version>1.3.3</version>
<date>2017-06-30</date>
<change>Watch folder: Added handling of environment variable AUTOMATED_CONVERSION_OUTPUT_SUBDIR, which allows customization of the output location of automatically converted videos..</change>
<change>The default source folder is now /storage.</change>
</release>
<release>
<version>1.3.2</version>
<date>2017-06-27</date>
<change>Watch folder: also process files in subfolders.</change>
</release>
<release>
<version>1.3.1</version>
<date>2017-06-22</date>
<change>Now using baseimage v1.4.3, which brings the following changes:</change>
<change level="2">Updated Alpine Linux to version 3.6.2.</change>
</release>
<release>
<version>1.3.0</version>
<date>2017-06-21</date>
<change>Now using baseimage v1.4.2, which brings the following changes (from last used version):</change>
<change level="2">Switched to Alpine Linux 3.6.</change>
<change level="2">Associate the application's icon to a unique version to avoid browser cache issues.</change>
<change level="2">Fixed prefix of some service related messages.</change>
<change level="2">Added support for supplying supplementary groups of the application.</change>
<change level="2">Improved process startup and shutdown.</change>
<change level="2">When container is stopped or restarted, processes are now terminated gracefully and in proper order. This allow the GUI application to execute its termination routine.</change>
<change level="2">No more error messages when container is stopped or restarted.</change>
</release>
<release>
<version>1.2.0</version>
<date>2017-05-31</date>
<change>Added support for post-conversion hook.</change>
</release>
<release>
<version>1.1.4</version>
<date>2017-05-30</date>
<change>Now using baseimage v1.3.2, which brings the following changes:</change>
<change level="2">Fixed password modal window not showing up when required.</change>
</release>
<release>
<version>1.1.3</version>
<date>2017-05-26</date>
<change>Watch folder: Fixed issue where, after a first successful conversion, conversion of next available video files would not start.</change>
<change>Renamed the 'Watch Folder' service to 'Automatic Video Converter'.</change>
</release>
<release>
<version>1.1.2</version>
<date>2017-05-24</date>
<change>Watch folder: Changed the way files being transferred are detected. Method used previously was not working properly in all cases.</change>
</release>
<release>
<version>1.1.1</version>
<date>2017-05-24</date>
<change>Watch folder: temporarily skip files being accessed/transferred.</change>
<change>Watch folder: improved robustness.</change>
</release>
<release>
<version>1.1.0</version>
<date>2017-05-23</date>
<change>Watch folder: properly support filenames containing spaces.</change>
<change>Watch folder: added support for symbolic links.</change>
<change>HandBrake debug can now be enabled via the HANDBRAKE_DEBUG environment variable.</change>
<change>Take ownership of the `/output` folder.</change>
<change>Added the ability to remove video source files from the watch folder after successfully conversion.</change>
</release>
<release>
<version>1.0.1</version>
<date>2017-05-18</date>
<change>The watch folder is now monitored without inotify for better compatibility.</change>
</release>
<release>
<version>1.0.0</version>
<date>2017-05-18</date>
<change>Initial release.</change>
</release>
</history>
</app>
<container>
<!-- Environment variables -->
<environment_variables>
<environment_variable>
<name>AUTOMATED_CONVERSION_PRESET</name>
<description>HandBrake preset used by the automatic video converter. Identification of a preset must follow the format `<CATEGORY>/<PRESET NAME>`. See the [Automatic Video Conversion](#automatic-video-conversion) section for more details.</description>
<default>General/Very Fast 1080p30</default>
<unraid_template>
<title>Automatic Video Converter: Preset</title>
<description>Preset used by the automatic video converter. Identification of the preset must follow the format 'CATEGORY/PRESET NAME'. Name of all available presets can be seen via the HandBrake GUI.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_FORMAT</name>
<description>Video container format used by the automatic video converter for output files. This is typically the video filename extension. See the [Automatic Video Conversion](#automatic-video-conversion) section for more details.</description>
<default>mp4</default>
<unraid_template>
<title>Automatic Video Converter: Format</title>
<description>Video container format used by the automatic video converter for output files. This is typically the video filename extension.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_KEEP_SOURCE</name>
<description>When set to `0`, a video that has been successfully converted is removed from the watch folder.</description>
<default>1</default>
<unraid_template>
<title>Automatic Video Converter: Keep Source Files</title>
<description>Set to 0 to remove successfully converted videos from the watch folder, 1 to keep them.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_VIDEO_FILE_EXTENSIONS</name>
<description>Space-separated list of file extensions to be considered as video files. By default, this list is empty, meaning that the automatic video converter will let HandBrake automatically detects if a file, no matter its extension, is a video or not (note that extensions defined by the `AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS` environment variable are always considered as non-video files). Normally, this variable doesn't need to be set. Usage of this variable is useful when only specific video files need to converted.</description>
<default/>
<unraid_template>
<title>Automatic Video Converter: Video File Extensions</title>
<description>Space-separated list of file extensions to be considered as video files. By default, this list is empty, meaning that the automatic video converter will let HandBrake automatically detects if a file, no matter its extension, is a video or not (note that extensions defined by the [i]Non-Video File Extensions[/i] list are always considered as non-video files). Normally, this variable doesn't need to be set. Usage of this variable is useful when only specific video files need to converted.</description>
<display>advanced</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION</name>
<description>When set to `ignore`, a non-video file found in the watch folder is ignored. If set to `copy`, a non-video file is copied as-is to the output folder.</description>
<default>ignore</default>
<unraid_template>
<title>Automatic Video Converter: Non-Video File Action</title>
<description>Set to [b][i]ignore[/i][/b] to ignore non-video files from the watch folder, or set to [b][i]copy[/i][/b] to copy them as-is to the output folder.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS</name>
<description>Space-separated list of file extensions to be considered as not being videos. Most non-video files are properly rejected by HandBrake. However, some files, like images, are convertible by HandBrake even if they are not video files.</description>
<default>jpg jpeg bmp png gif txt nfo</default>
<unraid_template>
<title>Automatic Video Converter: Non-Video File Extensions</title>
<display>advanced</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_OUTPUT_DIR</name>
<description>Root directory where converted videos should be written.</description>
<default>/output</default>
<unraid_template>
<title>Automatic Video Converter: Output directory</title>
<description>Root directory where converted videos should be written.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_OUTPUT_SUBDIR</name>
<description>Subdirectory of the output folder into which converted videos should be written. By default, this variable is not set, meaning that videos are saved directly into `/output/`. If `Home/Movies` is set, converted videos will be written to `/output/Home/Movies`. Use the special value `SAME_AS_SRC` to use the same subfolder as the source. For example, if the video source file is `/watch/Movies/mymovie.mkv`, the converted video will be written to `/output/Movies/`.</description>
<unraid_template>
<title>Automatic Video Converter: Output Subdirectory</title>
<description>Subdirectory of the output folder into which converted videos should be written.[ul][li]Leave value empty to save converted videos directly into [b][i]/output/[/i][/b].[/li][li]Use the special value [b][i]SAME_AS_SRC[/i][/b] to use the same subfolder as the source. For example, if the video source file is [b][i]/watch/Movies/mymovie.mkv[/i][/b], the converted video will be written to [b][i]/output/Movies/[/i][/b].[/li][li]Use any subfolder name. For example, setting the value [b][i]Home/Movies[/i][/b] will make converted videos written to [b][i]/output/Home/Movies[/i][/b]/[/li][/ul]</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_OVERWRITE_OUTPUT</name>
<description>Setting this to `1` allows the final destination file to be overwritten if it already exists.</description>
<default>0</default>
<unraid_template>