DVR-Scan-Headless 1.8__tar.gz → 1.8.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/DVR_Scan_Headless.egg-info/PKG-INFO +3 -5
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/DVR_Scan_Headless.egg-info/requires.txt +1 -2
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/PKG-INFO +3 -5
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/README.md +2 -2
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/__init__.py +1 -1
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/__main__.py +11 -7
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/__main__.py +17 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/application.py +9 -8
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/cli.py +10 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/config.py +5 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/controller.py +5 -4
- dvr_scan_headless-1.8.2/dvr_scan/docs/changelog.html +1 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/index.html +1 -1
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/opencv_loader.py +2 -5
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/overlays.py +1 -1
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/platform.py +1 -1
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/region.py +3 -1
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/scanner.py +31 -24
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/shared/__init__.py +10 -10
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/shared/settings.py +2 -4
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/video_joiner.py +17 -13
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/setup.cfg +2 -4
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/tests/test_cli.py +1 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/tests/test_scan_context.py +15 -3
- dvr_scan_headless-1.8/dvr_scan/docs/changelog.html +0 -1
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/DVR_Scan_Headless.egg-info/SOURCES.txt +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/DVR_Scan_Headless.egg-info/dependency_links.txt +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/DVR_Scan_Headless.egg-info/entry_points.txt +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/DVR_Scan_Headless.egg-info/top_level.txt +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/LICENSE +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dist/package-info.rst +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr-scan.cfg +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/LICENSE +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/__init__.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/about_window.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/common.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/region_editor.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/scan_window.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/app/widgets.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/detector.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/404.html +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/assets/javascripts/bundle.88dd0f4e.min.js +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/assets/stylesheets/main.6f8fc17f.min.css +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/assets/stylesheets/palette.06af60db.min.css +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/docs.html +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/faq.html +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/guide.html +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/resources.html +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/docs/style.min.css +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/dvr-scan-logo.png +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/dvr-scan.ico +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/dvr-scan.png +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/shared/cli.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/dvr_scan/subtractor.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/pyproject.toml +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/tests/test_maxarea.py +0 -0
- {dvr_scan_headless-1.8 → dvr_scan_headless-1.8.2}/tests/test_video_joiner.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: DVR-Scan-Headless
|
|
3
|
-
Version: 1.8
|
|
3
|
+
Version: 1.8.2
|
|
4
4
|
Summary: Tool for finding and extracting motion events in video files (e.g. security camera footage).
|
|
5
5
|
Home-page: https://www.dvr-scan.com/
|
|
6
6
|
Author: Brandon Castellano
|
|
@@ -20,7 +20,6 @@ Classifier: Intended Audience :: System Administrators
|
|
|
20
20
|
Classifier: License :: OSI Approved :: MIT License
|
|
21
21
|
Classifier: Operating System :: OS Independent
|
|
22
22
|
Classifier: Programming Language :: Python :: 3
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.10
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.11
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -29,7 +28,7 @@ Classifier: Topic :: Multimedia :: Video
|
|
|
29
28
|
Classifier: Topic :: Multimedia :: Video :: Conversion
|
|
30
29
|
Classifier: Topic :: Multimedia :: Video :: Non-Linear Editor
|
|
31
30
|
Classifier: Topic :: Utilities
|
|
32
|
-
Requires-Python: >=3.
|
|
31
|
+
Requires-Python: >=3.10
|
|
33
32
|
Description-Content-Type: text/x-rst
|
|
34
33
|
License-File: LICENSE
|
|
35
34
|
Requires-Dist: numpy
|
|
@@ -37,8 +36,7 @@ Requires-Dist: platformdirs
|
|
|
37
36
|
Requires-Dist: scenedetect
|
|
38
37
|
Requires-Dist: screeninfo
|
|
39
38
|
Requires-Dist: tqdm
|
|
40
|
-
Requires-Dist: opencv-python
|
|
41
|
-
Requires-Dist: opencv-contrib-python
|
|
39
|
+
Requires-Dist: opencv-contrib-python<4.13
|
|
42
40
|
Requires-Dist: pillow
|
|
43
41
|
Dynamic: license-file
|
|
44
42
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: DVR-Scan-Headless
|
|
3
|
-
Version: 1.8
|
|
3
|
+
Version: 1.8.2
|
|
4
4
|
Summary: Tool for finding and extracting motion events in video files (e.g. security camera footage).
|
|
5
5
|
Home-page: https://www.dvr-scan.com/
|
|
6
6
|
Author: Brandon Castellano
|
|
@@ -20,7 +20,6 @@ Classifier: Intended Audience :: System Administrators
|
|
|
20
20
|
Classifier: License :: OSI Approved :: MIT License
|
|
21
21
|
Classifier: Operating System :: OS Independent
|
|
22
22
|
Classifier: Programming Language :: Python :: 3
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.10
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.11
|
|
26
25
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -29,7 +28,7 @@ Classifier: Topic :: Multimedia :: Video
|
|
|
29
28
|
Classifier: Topic :: Multimedia :: Video :: Conversion
|
|
30
29
|
Classifier: Topic :: Multimedia :: Video :: Non-Linear Editor
|
|
31
30
|
Classifier: Topic :: Utilities
|
|
32
|
-
Requires-Python: >=3.
|
|
31
|
+
Requires-Python: >=3.10
|
|
33
32
|
Description-Content-Type: text/x-rst
|
|
34
33
|
License-File: LICENSE
|
|
35
34
|
Requires-Dist: numpy
|
|
@@ -37,8 +36,7 @@ Requires-Dist: platformdirs
|
|
|
37
36
|
Requires-Dist: scenedetect
|
|
38
37
|
Requires-Dist: screeninfo
|
|
39
38
|
Requires-Dist: tqdm
|
|
40
|
-
Requires-Dist: opencv-python
|
|
41
|
-
Requires-Dist: opencv-contrib-python
|
|
39
|
+
Requires-Dist: opencv-contrib-python<4.13
|
|
42
40
|
Requires-Dist: pillow
|
|
43
41
|
Dynamic: license-file
|
|
44
42
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
------------------------------------------------
|
|
6
6
|
|
|
7
|
-
### Latest Release: v1.8 (
|
|
7
|
+
### Latest Release: v1.8.2 (January 18, 2026)
|
|
8
8
|
|
|
9
9
|
**Website**: [dvr-scan.com](https://www.dvr-scan.com)
|
|
10
10
|
|
|
@@ -62,5 +62,5 @@ See [the documentation](https://www.dvr-scan.com/docs) for a complete list of al
|
|
|
62
62
|
|
|
63
63
|
------------------------------------------------
|
|
64
64
|
|
|
65
|
-
Copyright © 2016-
|
|
65
|
+
Copyright © 2016-2026 Brandon Castellano. All rights reserved.
|
|
66
66
|
Licensed under BSD 2-Clause (see the LICENSE file for details).
|
|
@@ -35,7 +35,7 @@ import pkgutil
|
|
|
35
35
|
import sys
|
|
36
36
|
|
|
37
37
|
# Used for module/distribution identification.
|
|
38
|
-
__version__ = "1.8"
|
|
38
|
+
__version__ = "1.8.2"
|
|
39
39
|
|
|
40
40
|
# Handle loading OpenCV. This **MUST** be first before any other DVR-Scan or third-party
|
|
41
41
|
# packages are imported which might attempt to import the `cv2` module.
|
|
@@ -32,13 +32,11 @@ def main():
|
|
|
32
32
|
if settings is None:
|
|
33
33
|
sys.exit(EXIT_ERROR)
|
|
34
34
|
logger = logging.getLogger("dvr_scan")
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
show_traceback = getattr(logging, settings.get("verbosity").upper()) == logging.DEBUG
|
|
41
|
-
with logging_redirect_tqdm(loggers=[logger]):
|
|
35
|
+
|
|
36
|
+
def main_impl():
|
|
37
|
+
# TODO: Use Python __debug__ mode instead of hard-coding as config option?
|
|
38
|
+
debug_mode = settings.get("debug")
|
|
39
|
+
show_traceback = getattr(logging, settings.get("verbosity").upper()) == logging.DEBUG
|
|
42
40
|
try:
|
|
43
41
|
run_dvr_scan(settings)
|
|
44
42
|
except ValueError as ex:
|
|
@@ -75,6 +73,12 @@ def main():
|
|
|
75
73
|
sys.exit(EXIT_SUCCESS)
|
|
76
74
|
sys.exit(EXIT_ERROR)
|
|
77
75
|
|
|
76
|
+
if settings.get("quiet-mode"):
|
|
77
|
+
main_impl()
|
|
78
|
+
else:
|
|
79
|
+
with logging_redirect_tqdm(loggers=[logger]):
|
|
80
|
+
main_impl()
|
|
81
|
+
|
|
78
82
|
|
|
79
83
|
if __name__ == "__main__":
|
|
80
84
|
main()
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
import argparse
|
|
13
13
|
import logging
|
|
14
14
|
import sys
|
|
15
|
+
import tkinter
|
|
16
|
+
import tkinter.messagebox
|
|
15
17
|
from subprocess import CalledProcessError
|
|
16
18
|
|
|
17
19
|
from scenedetect import VideoOpenFailure
|
|
@@ -92,6 +94,13 @@ def get_cli_parser():
|
|
|
92
94
|
version=get_license_info(),
|
|
93
95
|
)
|
|
94
96
|
|
|
97
|
+
parser.add_argument(
|
|
98
|
+
"--ignore-user-config",
|
|
99
|
+
action="store_true",
|
|
100
|
+
default=False,
|
|
101
|
+
help=("Ignore loading the user config file if present."),
|
|
102
|
+
)
|
|
103
|
+
|
|
95
104
|
parser.add_argument(
|
|
96
105
|
"--debug",
|
|
97
106
|
action="store_true",
|
|
@@ -130,6 +139,9 @@ def main():
|
|
|
130
139
|
# Parse CLI args, override config if an override was specified on the command line.
|
|
131
140
|
try:
|
|
132
141
|
args = get_cli_parser().parse_args()
|
|
142
|
+
if args.ignore_user_config:
|
|
143
|
+
config_load_error = None
|
|
144
|
+
config = ConfigRegistry()
|
|
133
145
|
init_logging(args, config)
|
|
134
146
|
init_log += [(logging.INFO, "DVR-Scan Application %s" % dvr_scan.__version__)]
|
|
135
147
|
if config_load_error and not hasattr(args, "config"):
|
|
@@ -166,6 +178,11 @@ def main():
|
|
|
166
178
|
logger.debug("Error loading config file:", exc_info=config_load_error)
|
|
167
179
|
# Intentionally suppress the exception in release mode since we've already logged the
|
|
168
180
|
# failure reason to the user above. We can now exit with an error code.
|
|
181
|
+
errors = [message for (severity, message) in init_log if severity >= logging.ERROR]
|
|
182
|
+
tkinter.messagebox.showerror(
|
|
183
|
+
title="DVR-Scan Startup Error",
|
|
184
|
+
message=f"Error loading config file. Reason:\n\n{'\n'.join(errors)}",
|
|
185
|
+
)
|
|
169
186
|
raise SystemExit(1)
|
|
170
187
|
|
|
171
188
|
show_traceback = getattr(logging, settings.get("verbosity").upper()) == logging.DEBUG
|
|
@@ -839,7 +839,7 @@ class OutputArea:
|
|
|
839
839
|
"ffmpeg",
|
|
840
840
|
"ffmpeg (copy)",
|
|
841
841
|
)
|
|
842
|
-
self._output_mode_combo.current(
|
|
842
|
+
self._output_mode_combo.current(0)
|
|
843
843
|
|
|
844
844
|
self._output_dir_str = ""
|
|
845
845
|
self._output_dir_label = tk.StringVar(root, value="Ask Me")
|
|
@@ -1364,7 +1364,8 @@ class ScanArea:
|
|
|
1364
1364
|
return settings
|
|
1365
1365
|
|
|
1366
1366
|
def load(self, settings: ScanSettings):
|
|
1367
|
-
|
|
1367
|
+
output_mode = OutputMode[settings.get("output-mode").upper()]
|
|
1368
|
+
if settings.get("scan-only") or output_mode == OutputMode.SCAN_ONLY:
|
|
1368
1369
|
self.scan_only = True
|
|
1369
1370
|
self.open_on_completion = settings.get("open-output-dir")
|
|
1370
1371
|
|
|
@@ -1669,13 +1670,13 @@ class Application:
|
|
|
1669
1670
|
settings = self._output_area.save(settings)
|
|
1670
1671
|
settings = self._scan_area.save(settings)
|
|
1671
1672
|
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1673
|
+
output_mode = (
|
|
1674
|
+
OutputMode.SCAN_ONLY if settings.get("scan-only") else settings.get("output-mode")
|
|
1675
|
+
)
|
|
1676
|
+
# Check if we are going to create any output files. We will create files as long as we're
|
|
1677
|
+
# not in scan-only mode, or if we
|
|
1675
1678
|
if not settings.get("output-dir") and (
|
|
1676
|
-
|
|
1677
|
-
or settings.get("mask-output")
|
|
1678
|
-
or self._output_area.combine
|
|
1679
|
+
output_mode != OutputMode.SCAN_ONLY or settings.get("mask-output")
|
|
1679
1680
|
):
|
|
1680
1681
|
# We will create files but an output directory wasn't set ahead of time - prompt the
|
|
1681
1682
|
# user to select one.
|
|
@@ -439,6 +439,9 @@ def get_cli_parser(user_config: ConfigRegistry):
|
|
|
439
439
|
% (user_config.get_help_string("frame-skip"))
|
|
440
440
|
),
|
|
441
441
|
)
|
|
442
|
+
|
|
443
|
+
# TODO: Is this a good name for this flag? If we do decide to rename it, we could keep this as
|
|
444
|
+
# a hidden flag for backwards compatibility.
|
|
442
445
|
parser.add_argument(
|
|
443
446
|
"-q",
|
|
444
447
|
"--quiet",
|
|
@@ -492,6 +495,13 @@ def get_cli_parser(user_config: ConfigRegistry):
|
|
|
492
495
|
help=("Use OpenCV provided presentation timestamp instead of calculated version."),
|
|
493
496
|
)
|
|
494
497
|
|
|
498
|
+
parser.add_argument(
|
|
499
|
+
"--ignore-user-config",
|
|
500
|
+
action="store_true",
|
|
501
|
+
default=False,
|
|
502
|
+
help=("Ignore loading the user config file if present."),
|
|
503
|
+
)
|
|
504
|
+
|
|
495
505
|
parser.add_argument(
|
|
496
506
|
"--debug",
|
|
497
507
|
action="store_true",
|
|
@@ -329,6 +329,7 @@ CONFIG_MAP: ConfigDict = {
|
|
|
329
329
|
"open-output-dir": True,
|
|
330
330
|
"output-mode": "opencv",
|
|
331
331
|
"region-editor": False,
|
|
332
|
+
"scan-only": False,
|
|
332
333
|
# Motion Events
|
|
333
334
|
"min-event-length": TimecodeValue("0.1s"),
|
|
334
335
|
"time-before-event": TimecodeValue("1.5s"),
|
|
@@ -433,6 +434,10 @@ class ConfigRegistry:
|
|
|
433
434
|
ConfigLoadFailure: The config file being loaded is corrupt or invalid,
|
|
434
435
|
or `path` was specified but does not exist.
|
|
435
436
|
"""
|
|
437
|
+
# Allow passing in str paths for convenience.
|
|
438
|
+
if path and not isinstance(path, Path):
|
|
439
|
+
path = Path(path)
|
|
440
|
+
|
|
436
441
|
# Validate `path`, or if not provided, use USER_CONFIG_FILE_PATH if it exists.
|
|
437
442
|
if path:
|
|
438
443
|
self._log(logging.INFO, "Loading config from file: %s" % path)
|
|
@@ -86,6 +86,9 @@ def parse_settings() -> ty.Optional[ScanSettings]:
|
|
|
86
86
|
# Parse CLI args, override config if an override was specified on the command line.
|
|
87
87
|
try:
|
|
88
88
|
args = get_cli_parser(config).parse_args()
|
|
89
|
+
if args.ignore_user_config:
|
|
90
|
+
config_load_error = None
|
|
91
|
+
config = ConfigRegistry()
|
|
89
92
|
debug_mode = args.debug
|
|
90
93
|
init_logging(args=args, config=config)
|
|
91
94
|
init_log += [(logging.INFO, "DVR-Scan %s" % dvr_scan.__version__)]
|
|
@@ -95,7 +98,7 @@ def parse_settings() -> ty.Optional[ScanSettings]:
|
|
|
95
98
|
init_log += config.consume_init_log()
|
|
96
99
|
if hasattr(args, "config"):
|
|
97
100
|
config_setting = ConfigRegistry()
|
|
98
|
-
config_setting.load(
|
|
101
|
+
config_setting.load(args.config)
|
|
99
102
|
init_logging(args, config_setting)
|
|
100
103
|
config = config_setting
|
|
101
104
|
init_log += config.consume_init_log()
|
|
@@ -205,11 +208,9 @@ def run_dvr_scan(
|
|
|
205
208
|
timecode_list.append(event.end.get_timecode())
|
|
206
209
|
logger.info("Comma-separated timecode values:")
|
|
207
210
|
# Print values regardless of quiet mode or not.
|
|
208
|
-
# TODO: This should not print in quiet mode, it should go through the logger.
|
|
209
211
|
# TODO(#78): Fix this output format to be more usable, in the form:
|
|
210
212
|
# start1-end1[,[+]start2-end2[,[+]start3-end3...]]
|
|
211
213
|
print(",".join(timecode_list))
|
|
212
214
|
|
|
213
|
-
|
|
214
|
-
if scanner._output_mode != OutputMode.SCAN_ONLY:
|
|
215
|
+
if scanner.output_mode != OutputMode.SCAN_ONLY:
|
|
215
216
|
logger.info("Motion events written to disk.")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Brandon Castellano"><link rel=prev href=faq.html><link rel=next href=resources.html><link rel=icon href=https://www.dvr-scan.com/assets/dvr-scan.ico><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Changelog - DVR-Scan</title><link rel=stylesheet href=assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=assets/stylesheets/palette.06af60db.min.css><style>:root{--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Rubik:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Rubik";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=style.min.css><script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=custom data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#changelog class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=. title=DVR-Scan class="md-header__button md-logo" aria-label=DVR-Scan data-md-component=logo> <img src=https://www.dvr-scan.com/assets/dvr-scan.png alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DVR-Scan </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Changelog </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=custom data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <div class=md-header__source> <a href=https://github.com/Breakthrough/DVR-Scan title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> DVR-Scan on Github </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=guide.html class=md-tabs__link> User Guide </a> </li> <li class=md-tabs__item> <a href=docs.html class=md-tabs__link> Documentation </a> </li> <li class=md-tabs__item> <a href=faq.html class=md-tabs__link> FAQ </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=changelog.html class=md-tabs__link> Changelog </a> </li> <li class=md-tabs__item> <a href=resources.html class=md-tabs__link> Resources </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=. title=DVR-Scan class="md-nav__button md-logo" aria-label=DVR-Scan data-md-component=logo> <img src=https://www.dvr-scan.com/assets/dvr-scan.png alt=logo> </a> DVR-Scan </label> <div class=md-nav__source> <a href=https://github.com/Breakthrough/DVR-Scan title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> DVR-Scan on Github </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=guide.html class=md-nav__link> <span class=md-ellipsis> User Guide </span> </a> </li> <li class=md-nav__item> <a href=docs.html class=md-nav__link> <span class=md-ellipsis> Documentation </span> </a> </li> <li class=md-nav__item> <a href=faq.html class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Changelog </span> <span class="md-nav__icon md-icon"></span> </label> <a href=changelog.html class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Changelog </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#changelog_1 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#182-2026-01-18 class=md-nav__link> <span class=md-ellipsis> 1.8.2 (2026-01-18) </span> </a> <nav class=md-nav aria-label="1.8.2 (2026-01-18)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_2 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#181-2025-08-27 class=md-nav__link> <span class=md-ellipsis> 1.8.1 (2025-08-27) </span> </a> <nav class=md-nav aria-label="1.8.1 (2025-08-27)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_1 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_3 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#18-2025-08-23 class=md-nav__link> <span class=md-ellipsis> 1.8 (2025-08-23) </span> </a> <nav class=md-nav aria-label="1.8 (2025-08-23)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_2 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_4 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#1701-2025-03-11 class=md-nav__link> <span class=md-ellipsis> 1.7.0.1 (2025-03-11) </span> </a> </li> <li class=md-nav__item> <a href=#17-2025-02-28 class=md-nav__link> <span class=md-ellipsis> 1.7 (2025-02-28) </span> </a> <nav class=md-nav aria-label="1.7 (2025-02-28)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_3 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_5 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#dvr-scan-16 class=md-nav__link> <span class=md-ellipsis> DVR-Scan 1.6 </span> </a> <nav class=md-nav aria-label="DVR-Scan 1.6"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#162-2024-12-17 class=md-nav__link> <span class=md-ellipsis> 1.6.2 (2024-12-17) </span> </a> </li> <li class=md-nav__item> <a href=#161-2024-06-18 class=md-nav__link> <span class=md-ellipsis> 1.6.1 (2024-06-18) </span> </a> <nav class=md-nav aria-label="1.6.1 (2024-06-18)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_4 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_6 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#16-2023-11-15 class=md-nav__link> <span class=md-ellipsis> 1.6 (2023-11-15) </span> </a> <nav class=md-nav aria-label="1.6 (2023-11-15)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_5 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_7 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#known-issues class=md-nav__link> <span class=md-ellipsis> Known Issues </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#dvr-scan-15 class=md-nav__link> <span class=md-ellipsis> DVR-Scan 1.5 </span> </a> <nav class=md-nav aria-label="DVR-Scan 1.5"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#151-2022-08-15 class=md-nav__link> <span class=md-ellipsis> 1.5.1 (2022-08-15) </span> </a> <nav class=md-nav aria-label="1.5.1 (2022-08-15)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#changelog_8 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#15-2022-07-30 class=md-nav__link> <span class=md-ellipsis> 1.5 (2022-07-30) </span> </a> <nav class=md-nav aria-label="1.5 (2022-07-30)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_6 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#command-line-changes class=md-nav__link> <span class=md-ellipsis> Command-Line Changes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_9 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#known-issues_1 class=md-nav__link> <span class=md-ellipsis> Known Issues </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#dvr-scan-14 class=md-nav__link> <span class=md-ellipsis> DVR-Scan 1.4 </span> </a> <nav class=md-nav aria-label="DVR-Scan 1.4"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#141-2022-02-20 class=md-nav__link> <span class=md-ellipsis> 1.4.1 (2022-02-20) </span> </a> <nav class=md-nav aria-label="1.4.1 (2022-02-20)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_7 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_10 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#known-issues_2 class=md-nav__link> <span class=md-ellipsis> Known Issues </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#14-2022-02-08 class=md-nav__link> <span class=md-ellipsis> 1.4 (2022-02-08) </span> </a> <nav class=md-nav aria-label="1.4 (2022-02-08)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_8 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_11 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#known-issues_3 class=md-nav__link> <span class=md-ellipsis> Known Issues </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#dvr-scan-13 class=md-nav__link> <span class=md-ellipsis> DVR-Scan 1.3 </span> </a> <nav class=md-nav aria-label="DVR-Scan 1.3"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#13-2021-06-23 class=md-nav__link> <span class=md-ellipsis> 1.3 (2021-06-23) </span> </a> <nav class=md-nav aria-label="1.3 (2021-06-23)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#release-notes_9 class=md-nav__link> <span class=md-ellipsis> Release Notes </span> </a> </li> <li class=md-nav__item> <a href=#changelog_12 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#known-issues_4 class=md-nav__link> <span class=md-ellipsis> Known Issues </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#dvr-scan-12 class=md-nav__link> <span class=md-ellipsis> DVR-Scan 1.2 </span> </a> <nav class=md-nav aria-label="DVR-Scan 1.2"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#12-2021-03-10 class=md-nav__link> <span class=md-ellipsis> 1.2 (2021-03-10) </span> </a> <nav class=md-nav aria-label="1.2 (2021-03-10)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#changelog_13 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#known-issues_5 class=md-nav__link> <span class=md-ellipsis> Known Issues </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#dvr-scan-11 class=md-nav__link> <span class=md-ellipsis> DVR-Scan 1.1 </span> </a> <nav class=md-nav aria-label="DVR-Scan 1.1"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#11-2020-07-12 class=md-nav__link> <span class=md-ellipsis> 1.1 (2020-07-12) </span> </a> <nav class=md-nav aria-label="1.1 (2020-07-12)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#changelog_14 class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=#known-issues_6 class=md-nav__link> <span class=md-ellipsis> Known Issues </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#dvr-scan-10 class=md-nav__link> <span class=md-ellipsis> DVR-Scan 1.0 </span> </a> <nav class=md-nav aria-label="DVR-Scan 1.0"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#101-2017-01-12 class=md-nav__link> <span class=md-ellipsis> 1.0.1 (2017-01-12) </span> </a> </li> <li class=md-nav__item> <a href=#10-2017-01-11 class=md-nav__link> <span class=md-ellipsis> 1.0 (2017-01-11) </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=resources.html class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1 id=changelog><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 96c0-17.7 14.3-32 32-32h384c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32m0 160c0-17.7 14.3-32 32-32h384c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32m448 160c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h384c17.7 0 32 14.3 32 32"/></svg></span>Changelog<a class=headerlink href=#changelog title="Permanent link">¶</a></h1> <hr> <h4 id=changelog_1>Changelog<a class=headerlink href=#changelog_1 title="Permanent link">¶</a></h4> <h3 id=182-2026-01-18>1.8.2 (2026-01-18)<a class=headerlink href=#182-2026-01-18 title="Permanent link">¶</a></h3> <h4 id=release-notes>Release Notes<a class=headerlink href=#release-notes title="Permanent link">¶</a></h4> <p>Includes several critical bugfixes and improvements when processing multiple input videos.</p> <h4 id=changelog_2>Changelog<a class=headerlink href=#changelog_2 title="Permanent link">¶</a></h4> <ul> <li>[general] Minimum supported Python version is now 3.10 (Python 3.9 is <a href=https://devguide.python.org/versions/ >EOL</a>)</li> <li>[general] An error is now displayed when launching the app fails due to an invalid config file <a href=https://github.com/Breakthrough/DVR-Scan/issues/241>#241</a></li> <li>[general] Python package now only depends on <code>opencv-contrib-python</code> or <code>opencv-contrib-python-headless</code> <a href=https://github.com/Breakthrough/DVR-Scan/issues/251>#251</a></li> <li>[bugfix] Fix <code>quiet-mode</code> setting (<code>-q</code>/<code>--quiet</code> flag) still allowing extraneous output <a href=https://github.com/Breakthrough/DVR-Scan/issues/243>#243</a></li> <li>[bugfix] Fix loading config from file in UI <a href=https://github.com/Breakthrough/DVR-Scan/issues/253>#253</a></li> <li>[bugfix] Fix scan error when enabling "Use PTS" input option with multiple videos <a href=https://github.com/Breakthrough/DVR-Scan/issues/254>#254</a></li> <li>[bugfix] Fix unchecked UI options being turned on in config files <a href=https://github.com/Breakthrough/DVR-Scan/issues/256>#256</a></li> </ul> <h3 id=181-2025-08-27>1.8.1 (2025-08-27)<a class=headerlink href=#181-2025-08-27 title="Permanent link">¶</a></h3> <h4 id=release-notes_1>Release Notes<a class=headerlink href=#release-notes_1 title="Permanent link">¶</a></h4> <p>Fixes issue with application not loading config files saved with v1.8.</p> <h4 id=changelog_3>Changelog<a class=headerlink href=#changelog_3 title="Permanent link">¶</a></h4> <ul> <li>[general] Add <code>--ignore-user-config</code> flag to both <code>dvr-scan</code> and <code>dvr-scan-app</code> commands to allow the application to run even if the user config file is corrupted</li> <li>[general] Add new <code>scan-only</code> config option to match the UI checkbox and the <code>--scan-only</code> CLI flag</li> <li>[bugfix] Fix crash on startup when trying to load user config saved with v1.8 <a href=https://github.com/Breakthrough/DVR-Scan/issues/240>#240</a><ul> <li>This was caused by the <code>scan-only</code> UI option being emitted but the config file did not support it in v1.8</li> <li>Users who are running into this issue should be able to run DVR-Scan after updating to v1.8.1</li> <li>As a workaround for previous versions, you can manually remove the <code>scan-only</code> line in the saved config file</li> </ul> </li> </ul> <h3 id=18-2025-08-23>1.8 (2025-08-23)<a class=headerlink href=#18-2025-08-23 title="Permanent link">¶</a></h3> <h4 id=release-notes_2>Release Notes<a class=headerlink href=#release-notes_2 title="Permanent link">¶</a></h4> <p>DVR-Scan 1.8 includes several UI additions and enhancements, and fixes a long-standing issue with Python packaging dependencies.</p> <h4 id=changelog_4>Changelog<a class=headerlink href=#changelog_4 title="Permanent link">¶</a></h4> <ul> <li>[general] The Python distribution now correctly requires <code>opencv-python</code> <a href=https://github.com/Breakthrough/DVR-Scan/issues/204>#204</a><ul> <li>There is a separate <code>dvr-scan-headless</code> package available for servers which requires <code>opencv-python-headless</code> and only includes CLI functionality</li> </ul> </li> <li>[bugfix] Fix bounding box overlay stuck on when using the OpenCV output mode <a href=https://github.com/Breakthrough/DVR-Scan/issues/218>#218</a></li> <li>[feature] UI additions and enhancements:<ul> <li>add option for enabling output concatenation <a href=https://github.com/Breakthrough/DVR-Scan/issues/223>#223</a></li> <li>output folder now opens on completion by default <a href=https://github.com/Breakthrough/DVR-Scan/issues/226>#226</a></li> <li>input videos can now be sorted by each column</li> <li>add menu button to open DVR-Scan log folder</li> </ul> </li> <li>[feature] Add <code>max-area</code>, <code>max-width</code>, and <code>max-height</code> options to help suppress improbable motion events, such as those caused by rain or fog <a href=https://github.com/Breakthrough/DVR-Scan/issues/224>#224</a> (thanks @elvis-epx)</li> <li>[bugfix] Log files no longer append to the same file, and now have randomized suffixes to support multiple instances <a href=https://github.com/Breakthrough/DVR-Scan/issues/227>#227</a><ul> <li>Config option changes: logs are no longer appended to the same file, so <code>max-log-size</code> is no longer required, and <code>max-log-files</code> has been raised from 4 to 15</li> </ul> </li> <li>[bugfix] Use <code>pathlib.Path</code> everywhere for path handling to mitigate issues with ffmpeg output mode on Windows <a href=https://github.com/Breakthrough/DVR-Scan/issues/220>#220</a></li> <li>[bugfix] Fix inaccurate progress bar when using <code>-st</code>/<code>--start-time</code> <a href=https://github.com/Breakthrough/DVR-Scan/issues/191>#191</a></li> <li>[bugfix] Fix missing log message when processing next video <a href=https://github.com/Breakthrough/DVR-Scan/issues/213>#213</a></li> <li>[improvement] Update default ffmpeg stream mapping to more gracefully handle audio/subtitles <a href=https://github.com/Breakthrough/DVR-Scan/issues/219>#219</a></li> <li>[dist] Update ffmpeg from 7.1 -> 8.0 in binary distributions</li> </ul> <h3 id=1701-2025-03-11>1.7.0.1 (2025-03-11)<a class=headerlink href=#1701-2025-03-11 title="Permanent link">¶</a></h3> <p>Re-release of Windows distribution that fixes program hanging when starting scan (<a href=https://github.com/Breakthrough/DVR-Scan/issues/209>#209</a>). This was caused due to the way the program was built. There are no code changes, so the Python distribution has not been re-released.</p> <h3 id=17-2025-02-28>1.7 (2025-02-28)<a class=headerlink href=#17-2025-02-28 title="Permanent link">¶</a></h3> <h4 id=release-notes_3>Release Notes<a class=headerlink href=#release-notes_3 title="Permanent link">¶</a></h4> <p>DVR-Scan 1.7 ships with a completely new UI, and supports faster video decoders (up to 50% better scanning performance):</p> <p><img alt="example of region editor" src=https://raw.githubusercontent.com/Breakthrough/DVR-Scan/releases/1.7/docs/https://www.dvr-scan.com/assets/app-main-window.jpg width=480></p> <p>The UI can be started by running <code>dvr-scan-app</code>, and is installed alongside the existing command line interface <code>dvr-scan</code>. Config settings and region files can be shared seamlessly between both. Feedback on the new UI is welcome.</p> <h4 id=changelog_5>Changelog<a class=headerlink href=#changelog_5 title="Permanent link">¶</a></h4> <ul> <li>[feature] New GUI now available across all platforms, can be launched via <code>dvr-scan-app</code><ul> <li>Has UI elements for all settings, supports editing motion regions</li> <li>Shows scan progress in real-time</li> </ul> </li> <li>[feature] Add ability to control video decoder via <code>input-mode</code> config option (<code>opencv</code>, <code>pyav</code>, <code>moviepy</code>)<ul> <li>Allows switching between <code>OpenCV</code> (default), <code>PyAV</code>, and <code>MoviePy</code> for video decoding</li> <li>Certain backends provide substantial performance benefits, up to 50% in some cases (let us know which one works best!)</li> </ul> </li> <li>[bugfix] Fix crash on headless systems that don't have <code>pillow</code> installed</li> <li>[general] The region editor no longer prompts for a save path if one was already specified via the <code>-s</code>/<code>--save-regions</code> option</li> <li>[general] A size-limited logfile is now kept locally, useful for filing bug reports<ul> <li>Can be controlled with config file options <code>save-log</code> (default: yes), <code>max-log-size</code> (default: 20 kB), <code>max-log-files</code> (default: 4)</li> <li>Path can be found under help entry for <code>--logfile</code> by running <code>dvr-scan --help</code> or <code>dvr-scan-app --help</code></li> </ul> </li> <li>[general] Minimum supported Python version is now 3.9</li> </ul> <hr> <h2 id=dvr-scan-16>DVR-Scan 1.6<a class=headerlink href=#dvr-scan-16 title="Permanent link">¶</a></h2> <h3 id=162-2024-12-17>1.6.2 (2024-12-17)<a class=headerlink href=#162-2024-12-17 title="Permanent link">¶</a></h3> <ul> <li>[feature] Vastly improved region editor UI:<ul> <li>Reimplemented entire UI with Tcl/Tk to provide much more consistent experience across platforms</li> <li>All options now have dedicated UI controls in addition to keyboard shortcuts</li> <li>System-specific shortcuts like undo/redo now work as expected</li> <li>Various performance and usability improvements including zoom/pan and shape selection</li> </ul> </li> <li>[feature] Add new <code>variance-threshold</code> <a href=https://www.dvr-scan.com/docs/#config-file>config option</a> to control how MOG2 controls which pixels are described by the current background model <a href=https://github.com/Breakthrough/DVR-Scan/issues/163>#163</a></li> <li>[feature] Add new <code>--thumbnails</code> option to extract images from each event, use <code>--thumbnails highscore</code> to save frame with highest motion score <a href=https://github.com/Breakthrough/DVR-Scan/issues/159>#159</a></li> <li>[feature] Add <code>--use-pts</code> option to allow using presentation time instead of frame number for timestamps <a href=https://github.com/Breakthrough/DVR-Scan/pull/170>#170</a></li> <li>[bugfix] Fix incorrect framerate detection in Windows builds <a href=https://github.com/Breakthrough/DVR-Scan/issues/174>#174</a></li> <li>[general] Updates to Windows distributions:<ul> <li>Python 3.9 -> Python 3.12</li> <li>OpenCV 4.10.0.82 -> 4.10.0.84</li> <li>Ffmpeg 6.0 -> 7.1</li> </ul> </li> </ul> <h3 id=161-2024-06-18>1.6.1 (2024-06-18)<a class=headerlink href=#161-2024-06-18 title="Permanent link">¶</a></h3> <h4 id=release-notes_4>Release Notes<a class=headerlink href=#release-notes_4 title="Permanent link">¶</a></h4> <p>DVR-Scan 1.6.1 includes some important fixes and improvements for the region editor. Minimum supported Python version is now 3.8.</p> <h4 id=changelog_6>Changelog<a class=headerlink href=#changelog_6 title="Permanent link">¶</a></h4> <ul> <li>[bugfix] Corrupt frames are no longer encoded and are skipped when encoding <a href=https://github.com/Breakthrough/DVR-Scan/issues/151>#151</a></li> <li>[bugfix] Fix <code>region-editor</code> config file option having no effect <a href=https://github.com/Breakthrough/DVR-Scan/issues/154>#154</a></li> <li>[bugfix] The region editor now always prompts on any unsaved changes <a href=https://github.com/Breakthrough/DVR-Scan/issues/161>#161</a></li> <li>[general] The region editor no longer prompts for a save path if <code>-s</code>/<code>--save-region</code> was specified</li> <li>[general] Regions added via command line are now be merged with those loaded from the <code>load-region</code> config option</li> <li>[general] Add new <code>learning-rate</code> <a href=https://www.dvr-scan.com/docs/#config-file>config option</a> to control how fast the background model is updated<ul> <li>Value between <code>0.0</code> and <code>1.0</code> controls how much weight is placed on next frame, or <code>-1</code> for auto</li> <li><code>0.0</code> implies no update to the model, <code>1.0</code> will re-initialize it completely on each frame</li> <li>Default value of <code>-1</code> is for automatic, which is unchanged from previous releases</li> </ul> </li> </ul> <h3 id=16-2023-11-15>1.6 (2023-11-15)<a class=headerlink href=#16-2023-11-15 title="Permanent link">¶</a></h3> <h4 id=release-notes_5>Release Notes<a class=headerlink href=#release-notes_5 title="Permanent link">¶</a></h4> <p>DVR-Scan greatly improves masking capabilities with the new region editor (<a href=https://www.dvr-scan.com/guide/#region-editor>user guide</a>):</p> <p><img alt="example of region editor" src=https://raw.githubusercontent.com/Breakthrough/DVR-Scan/releases/1.6/docs/https://www.dvr-scan.com/assets/region-editor-multiple.jpg width=480> <img alt="example of region editor" src=https://raw.githubusercontent.com/Breakthrough/DVR-Scan/releases/1.6/docs/https://www.dvr-scan.com/assets/region-editor-mask.jpg width=480></p> <p>Multiple regions can now be defined with any shape, size, and complexity. Region data can be saved to a file and loaded again. Regions can also be specified by command line.</p> <p>There are also several other bugfixes and improvements, such as improved seeking performance.</p> <h4 id=changelog_7>Changelog<a class=headerlink href=#changelog_7 title="Permanent link">¶</a></h4> <ul> <li>[feature] <a href=https://www.dvr-scan.com/guide/#region-editor>New region editor</a> <code>-r</code>/<code>--region-editor</code> allows creation of multiple regions without shape restrictions, replaces <code>-roi</code>/<code>--region-of-interest</code></li> <li>[feature] Multiple regions of interest (rectangular or polygonal) can now be created:<ul> <li>Using the new region editor by adding the <code>-r</code>/<code>--region-editor</code> flag: <code>dvr-scan -i video.mp4 -r</code></li> <li>New <code>-a</code>/<code>--add-region</code> replaces <code>-roi</code>/<code>--region-of-interest</code> option: <code>dvr-scan -i video.mp4 -a 5 5 20 5 20 20 5 20</code></li> <li>Regions can now be saved to a file: press S in the region editor or use <code>-s</code>/<code>--save-region</code></li> <li>Regions can now be loaded from a file: press O in the region editor or use <code>-R</code>/<code>--load-region</code></li> <li>Config files can specify a region file to use by default with the <code>load-region</code> option, replaces the <code>region-of-interest</code> setting</li> </ul> </li> <li>[feature] New <code>-fm</code> / <code>--frame-metrics</code> option draws motion score on each frame to help tune detection parameters</li> <li>[cli] Short flag <code>-v</code> is now used for <code>--verbosity</code>, replaced by <code>-V</code> for <code>--version</code></li> <li>[cli] <code>-roi</code>/<code>--region-of-interest</code> is now deprecated, replaced by region editor and add/save/load region flags<ul> <li>Specifying this option will display the ROI in the new region format allowing you to update usages more easily</li> </ul> </li> <li>[general] Improved seeking performance, using <code>-st</code>/<code>--start-time</code> is now much faster (<a href=https://github.com/Breakthrough/DVR-Scan/issues/92>#92</a>) -detection-parameters)</li> <li>[general] Noise reduction kernel can now be disabled by setting <code>-k</code>/<code>--kernel-size</code> to <code>0</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/123>#123</a>)</li> <li>[general] Include stack traces in logfiles when setting <code>--verbosity debug</code></li> <li>[bugfix] Add <code>max-score</code> option to config file to fix CNT mode always treating first few frame as motion, default is 255.0 <a href=https://github.com/Breakthrough/DVR-Scan/issues/119>#119</a></li> <li>[bugfix] Fix timecode format <code>HH:MM:SS[.nnn]</code> being rejected for start/end time (<a href=https://github.com/Breakthrough/DVR-Scan/issues/141>#141</a>)</li> <li>[bugfix] Fix incorrect RGB mapping for config file (values were treated as BGR instead)</li> <li>[other] Config option <code>timecode</code> has been renamed to <code>time-code</code> to match the command-line option</li> <li>[other] Config options that started with <code>timecode-</code> have been renamed to start with <code>text-</code>, and are now shared between the <code>time-code</code> and <code>frame-metrics</code> overlays:<ul> <li><code>time-code-margin</code> is now <code>text-margin</code></li> <li><code>time-code-font-scale</code> is now <code>text-font-scale</code></li> <li><code>time-code-font-thickness</code> is now <code>text-font-thickness</code></li> <li><code>time-code-font-color</code> is now <code>text-font-color</code></li> <li><code>time-code-bg-color</code> is now <code>text-bg-color</code></li> </ul> </li> </ul> <h4 id=known-issues>Known Issues<a class=headerlink href=#known-issues title="Permanent link">¶</a></h4> <ul> <li>Some prebuilt archives include documentation which references the <code>load-region</code> config option with the incorrect name (<code>region-file</code>) <a href=https://github.com/Breakthrough/DVR-Scan/issues/153>#153</a></li> </ul> <hr> <h2 id=dvr-scan-15>DVR-Scan 1.5<a class=headerlink href=#dvr-scan-15 title="Permanent link">¶</a></h2> <h3 id=151-2022-08-15><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m345 39.1 127.8 129.3c52.4 53 52.4 138.2 0 191.2l-112 113.3c-9.3 9.4-24.5 9.5-33.9.2s-9.5-24.5-.2-33.9l111.9-113.3c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6.2-33.9s24.6-9.2 33.9.2zM0 229.5V80c0-26.5 21.5-48 48-48h149.5c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5M144 144a32 32 0 1 0-64 0 32 32 0 1 0 64 0"/></svg></span> 1.5.1 (2022-08-15)<a class=headerlink href=#151-2022-08-15 title="Permanent link">¶</a></h3> <h4 id=changelog_8>Changelog<a class=headerlink href=#changelog_8 title="Permanent link">¶</a></h4> <ul> <li>[bugfix] Fix crash when opening multiple input videos (<a href=https://github.com/Breakthrough/DVR-Scan/issues/95>#95</a>)</li> <li>[bugfix] Fix incorrect warning regarding frame decode failures at end of video</li> </ul> <h3 id=15-2022-07-30>1.5 (2022-07-30)<a class=headerlink href=#15-2022-07-30 title="Permanent link">¶</a></h3> <h4 id=release-notes_6>Release Notes<a class=headerlink href=#release-notes_6 title="Permanent link">¶</a></h4> <ul> <li>Significant performance improvements on multicore systems</li> <li>Support wildcards/globs as inputs for scanning entire folders (<code>-i folder/*.mp4</code>)</li> <li>Allow use of ffmpeg for better output quality (<code>-m ffmpeg</code>) or codec-copying mode (<code>-m copy</code>)</li> <li>Configuration files are now supported, <a href=https://www.dvr-scan.com/docs/#config-file>see documentation for details</a><ul> <li>Can specify config file path with <code>-c</code>/<code>--config</code>, or create a <code>dvr-scan.cfg</code> file in your user config folder</li> </ul> </li> <li>Windows binaries are now signed, thanks <a href=https://signpath.io/ >SignPath.io</a> (certificate by <a href=https://signpath.org/ >SignPath Foundation</a>)</li> <li>Experimental Nvidia CUDA® support has been added (set <code>-b MOG2_CUDA</code>)<ul> <li>If installing via <code>pip</code>, requires manual installation of OpenCV compiled with CUDA support</li> <li>If downloading Windows version, make sure to download the GPU-enabled build (<code>dvr-scan-1.5-win64-cuda.zip</code>)</li> <li>CUDA-enabled builds are not code signed, and do not include the <code>CNT</code> method</li> </ul> </li> <li>Minimum supported Python version is now 3.7</li> <li>Minimum supported OpenCV version is now 3.x</li> </ul> <h4 id=command-line-changes>Command-Line Changes<a class=headerlink href=#command-line-changes title="Permanent link">¶</a></h4> <ul> <li>New options:<ul> <li><code>-c</code>/<code>--config</code> - set path to config file</li> <li><code>-d</code>/<code>--output-dir</code> - set directory to write output files (default is working directory)</li> <li><code>-m</code>/<code>--output-mode</code> - set output mode (one of: <code>opencv</code>, <code>ffmpeg</code>, <code>copy</code>)</li> <li><code>-mo</code>/<code>--mask-output</code> - path to write motion mask for analysis</li> <li><code>--verbosity</code> and <code>--logfile</code> - control output verbosity and path to save output</li> </ul> </li> <li><code>-i</code>/<code>--input</code> now supports globs/wildcards to scan entire folders, e.g. <code>-i folder/*.mp4</code></li> <li>Change default value for <code>-l</code>/<code>--min-event-length</code> to 0.1 seconds, previously was 2 frames</li> <li>Long form of <code>-roi</code> has been renamed to <code>--region-of-interest</code> (previously was <code>--rectangle-of-interest</code>)</li> <li><code>-c</code> is now used for <code>--config</code>, previously was for <code>--codec</code></li> <li>Add experimental <code>MOG2_CUDA</code> option for <code>-b</code>/<code>--bg-subtractor</code></li> <li>Rename existing <code>MOG</code> option to <code>MOG2</code></li> <li><code>--codec</code> has been removed, the value should now be set using a <a href=https://www.dvr-scan.com/docs/#config-file>config file</a></li> </ul> <h4 id=changelog_9>Changelog<a class=headerlink href=#changelog_9 title="Permanent link">¶</a></h4> <ul> <li>[feature] Configuration file support and new <code>-c</code>/<code>--config</code> argument to specify path to config files (<a href=https://github.com/Breakthrough/DVR-Scan/issues/77>#77</a>)<ul> <li>Breaks existing behavior of <code>-c</code> (was previously the shortform of <code>--codec</code>)</li> </ul> </li> <li>[feature] Add support for multiple output modes via <code>-m</code>/<code>--output-mode</code> argument (<a href=https://github.com/Breakthrough/DVR-Scan/issues/27>#27</a>, <a href=https://github.com/Breakthrough/DVR-Scan/issues/42>#42</a>)</li> <li>[feature] Experimental support for GPU-based CUDA MOG2 filter (<a href=https://github.com/Breakthrough/DVR-Scan/issues/12>#12</a>)</li> <li>[feature] Video encoding and decoding are now done in parallel with the scanning logic leading to improved performance on most systems (<a href=https://github.com/Breakthrough/DVR-Scan/issues/52>#52</a>)</li> <li>[feature] Add support for exporting motion masks via <code>-mo</code>/<code>--mask-output</code> argument<ul> <li>Useful for detailed analysis or tuning of detection parameters</li> <li>ffmpeg can be used to generate output videos by specifying <code>-m ffmpeg</code></li> <li>Codec-copy mode, using ffmpeg, can be used by specifying <code>-m copy</code></li> </ul> </li> <li>[feature] Add <code>--verbosity</code> and <code>--logfile</code> arguments to provide more control over program output</li> <li>[feature] Allow scanning entire folders using wildcards with <code>-i</code>/<code>--input</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/5>#5</a>)<ul> <li>Glob expansion is also performed on each input path directly, so quoted globs also function correctly</li> </ul> </li> <li>[bugfix] Fix incorrect results when <code>-st</code>/<code>--start-time</code> is set</li> <li>[bugfix] Event start times are now correctly calculated when using <code>-fs</code>/<code>--frame-skip</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/68>#68</a>, <a href=https://github.com/Breakthrough/DVR-Scan/issues/70>#70</a>)<ul> <li>Note that all skipped frames within the event window are included in motion event, thus the calculated start time may be slightly earlier</li> </ul> </li> <li>[bugfix] Only get screen resolution when required (was causing issues on headless machines)</li> <li>[bugfix] Fix output messages conflicting with progress bar shown during scanning</li> <li>[bugfix] Output events now start from 1 to align with the event list</li> <li>[bugfix] Event end times now include the presentation duration of the last frame</li> <li>[bugfix] Small values for <code>-l</code>/<code>--min-event-length</code> are now handled correctly, previously would cause an error</li> <li>[enhancement] Progress bar now indicates how many events have been detected so far</li> <li>[enhancement] Change default value for <code>min_event_len</code> to 0.1 seconds, previously was 2 frames (<a href=https://github.com/Breakthrough/DVR-Scan/issues/91>#91</a>)</li> </ul> <h4 id=known-issues_1>Known Issues<a class=headerlink href=#known-issues_1 title="Permanent link">¶</a></h4> <ul> <li>Attempting to open multiple input videos will cause DVR-Scan to crash, fixed in v1.5.1 (<a href=https://github.com/Breakthrough/DVR-Scan/issues/95>#95</a>)</li> <li>Variable framerate videos (VFR) are not fully supported, and will yield incorrect timestamps (<a href=https://github.com/Breakthrough/DVR-Scan/issues/20>#20</a>)</li> <li>Video output when using frame skip and <code>-m opencv</code> (default output mode) will result in frames missing from the exported videos (<a href=https://github.com/Breakthrough/DVR-Scan/issues/81>#81</a>)<ul> <li>Use <code>-m ffmpeg</code> or <code>-m copy</code> as a workaround</li> </ul> </li> <li>Multiple input videos are not supported with <code>-m ffmpeg</code> or <code>-m copy</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/86>#86</a>)<ul> <li>Use ffmpeg to <a href=https://trac.ffmpeg.org/wiki/Concatenate>concatenate/merge input videos</a> before processing as a workaround</li> </ul> </li> <li>CUDA builds do not include the <code>CNT</code> option for <code>-b</code>/<code>--bg-subtractor</code></li> </ul> <hr> <h2 id=dvr-scan-14>DVR-Scan 1.4<a class=headerlink href=#dvr-scan-14 title="Permanent link">¶</a></h2> <h3 id=141-2022-02-20>1.4.1 (2022-02-20)<a class=headerlink href=#141-2022-02-20 title="Permanent link">¶</a></h3> <h4 id=release-notes_7>Release Notes<a class=headerlink href=#release-notes_7 title="Permanent link">¶</a></h4> <p>This release includes fixes for incorrect event start/end times when using frame skipping, and improvements to the bounding box overlays.</p> <p><strong>Important:</strong> Aside from critical bugfixes, DVR-Scan 1.4.x is the last minor version supporting Python 2.7. Starting from v1.5, the new minimum supported Python version will be 3.6 (see <a href=https://github.com/Breakthrough/DVR-Scan/issues/83>#83</a> for details).</p> <h4 id=changelog_10>Changelog<a class=headerlink href=#changelog_10 title="Permanent link">¶</a></h4> <ul> <li>[bugfix] Event start times are now correctly calculated when using <code>-fs</code>/<code>--frame-skip</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/68>#68</a>, <a href=https://github.com/Breakthrough/DVR-Scan/issues/70>#70</a>)<ul> <li>Note that event start/end times may still be off by how many frames are skipped due to loss of context with respect to frame-accurate motion detection</li> </ul> </li> <li>[bugfix] Event end times now take into account the number of skipped frames if <code>-fs</code>/<code>--frame-skip</code> if specified (e.g. it is assumed all skipped frames contained motion)</li> <li>[bugfix] Bounding box smoothing now takes into account <code>-fs</code>/<code>--frame-skip</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/31>#31</a>)</li> <li>[bugfix] Bounding boxes now cover all frames with motion (<a href=https://github.com/Breakthrough/DVR-Scan/issues/31>#31</a>)<ul> <li>In v1.4 only the frames after <code>-l</code>/<code>--min-event-length</code> frames had passed were covered</li> </ul> </li> </ul> <h4 id=known-issues_2>Known Issues<a class=headerlink href=#known-issues_2 title="Permanent link">¶</a></h4> <ul> <li>Variable framerate videos (VFR) are not fully supported, and will yield incorrect timestamps (<a href=https://github.com/Breakthrough/DVR-Scan/issues/20>#20</a>)</li> <li>Using <code>-st</code>/<code>--start-time</code> will yield incorrect results</li> <li>If a motion event happens to be <em>exactly</em> the number of frames specified by <code>-l</code>/<code>--min-event-length</code>, the end timecode will be displayed incorrectly (<a href=https://github.com/Breakthrough/DVR-Scan/issues/90>#90</a>)</li> </ul> <hr> <h3 id=14-2022-02-08>1.4 (2022-02-08)<a class=headerlink href=#14-2022-02-08 title="Permanent link">¶</a></h3> <h4 id=release-notes_8>Release Notes<a class=headerlink href=#release-notes_8 title="Permanent link">¶</a></h4> <p>In addition to several bugfixes, this release of DVR-Scan adds the ability to draw a bounding box around the area in the frame where motion was detected. There are also several improves when using <code>-fs</code>/<code>--frame-skip</code> and/or <code>-df</code>/<code>--downscale-factor</code> by ensuring all other option are relative to the original video framerate/resolution.</p> <p><strong>Important:</strong> Aside from critical bugfixes, DVR-Scan 1.4.x is the last minor version supporting Python 2.7. Starting from v1.5, the new minimum supported Python version will be 3.6 (see <a href=https://github.com/Breakthrough/DVR-Scan/issues/83>#83</a> for details).</p> <h4 id=changelog_11>Changelog<a class=headerlink href=#changelog_11 title="Permanent link">¶</a></h4> <ul> <li>[feature] Add new <code>--bb</code>/<code>--bounding-box</code> option to draw rectangle around the area in the video where motion was detected<ul> <li>An amount to temporally smooth the box in time can also be specified after <code>-bb</code> (e.g. <code>-bb 0.5s</code>), where the default is 0.1s</li> </ul> </li> <li>[bugfix] Processing errors should now return a non-zero exit code</li> <li>[bugfix] Allow a maximum window size to be set when using <code>-roi</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/59>#59</a>):<ul> <li>The <code>-roi</code> flag now accepts a maximum window size for the ROI selection window (e.g. <code>-roi 1920 1080</code>)</li> <li>If the <code>screeninfo</code> package is installed, or you are using a Windows build, videos will automatically be resized to the maximum screen size</li> </ul> </li> <li>[bugfix] Fix frozen timestamp at beginning of video (<a href=https://github.com/Breakthrough/DVR-Scan/issues/68>#68</a>)</li> <li>[bugfix] Fix output videos not including all of the duration specified by <code>-tb</code>/<code>--time-before</code> in certain cases (<a href=https://github.com/Breakthrough/DVR-Scan/issues/68>#68</a></li> <li>[bugfix] Fix event start times not reflecting <code>-l</code>/<code>--min-event-length</code> and <code>-tb</code>/<code>--time-before</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/68>#68</a></li> <li>[bugfix] Scanning no longer stops suddenly after a frame fails to decode (<a href=https://github.com/Breakthrough/DVR-Scan/issues/62>#62</a>)<ul> <li>If more than 1 corrupt frame is found, a warning will be displayed with the number of frame decode failures</li> <li>If more than 5 frames in a row fail to be decoded, processing will stop and display an error</li> </ul> </li> <li>[bugfix] When no events have been found, an empty file is no longer created if <code>-o/--output</code> is specified</li> <li>[enhancement] <code>-k</code>/<code>--kernel-size</code> is now relative to the original video resolution, and will be reduced to adjust for <code>-df</code>/<code>--downscale-factor</code> if set (<a href=https://github.com/Breakthrough/DVR-Scan/issues/46>#46</a>)</li> <li>[bugfix] Output videos now have the correct playback speed when using <code>-fs</code>/<code>--frame-skip</code> by reducing the framerate (<a href=https://github.com/Breakthrough/DVR-Scan/issues/70>#70</a>)</li> <li>[bugfix] The <code>-l</code>/<code>--min-event-length</code> and <code>-tp</code>/<code>--time-post-event</code> parameters are now adjusted to compensate for <code>-fs</code>/<code>--frame-skip</code> if set (<a href=https://github.com/Breakthrough/DVR-Scan/issues/70>#70</a>)</li> <li>[bugfix] An erroneus event (false positive) is no longer generated at the beginning of a video when <code>-l</code>/<code>--min-event-length</code> is equal to 1 frame</li> </ul> <h4 id=known-issues_3>Known Issues<a class=headerlink href=#known-issues_3 title="Permanent link">¶</a></h4> <ul> <li>Variable framerate videos (VFR) are not fully supported, and will yield incorrect timestamps (<a href=https://github.com/Breakthrough/DVR-Scan/issues/20>#20</a>)</li> <li>When using <code>-fs</code>/<code>--frame-skip</code>, event start times do not include all of <code>-tb</code>/<code>--time-before-event</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/68>#68</a>, <a href=https://github.com/Breakthrough/DVR-Scan/issues/70>#70</a>)</li> <li>When using <code>-bb</code>/<code>--bounding-box</code>, the amount of time covered by <code>-l</code>/<code>--min-event-length</code> will be missing bounding box overlays (<a href=https://github.com/Breakthrough/DVR-Scan/issues/31>#31</a>)</li> <li>Using <code>-st</code>/<code>--start-time</code> will yield incorrect results</li> <li>If a motion event happens to be <em>exactly</em> the number of frames specified by <code>-l</code>/<code>--min-event-length</code>, the end timecode will be displayed incorrectly (<a href=https://github.com/Breakthrough/DVR-Scan/issues/90>#90</a>)</li> </ul> <hr> <h2 id=dvr-scan-13>DVR-Scan 1.3<a class=headerlink href=#dvr-scan-13 title="Permanent link">¶</a></h2> <h3 id=13-2021-06-23>1.3 (2021-06-23)<a class=headerlink href=#13-2021-06-23 title="Permanent link">¶</a></h3> <h4 id=release-notes_9>Release Notes<a class=headerlink href=#release-notes_9 title="Permanent link">¶</a></h4> <p>This version of DVR-Scan includes a new, faster background subtraction algorithm (<code>-b CNT</code>). Results may be slightly different when using this method, so any feedback is most welcome.</p> <h4 id=changelog_12>Changelog<a class=headerlink href=#changelog_12 title="Permanent link">¶</a></h4> <ul> <li>[feature] Add new <code>-b</code>/<code>--bg-subtractor</code> argument to allow selecting between the MOG and CNT background subtractor types (e.g. <code>dvr-scan -b CNT</code>). Resolves <a href=https://github.com/Breakthrough/DVR-Scan/issues/48>#48</a>. The following background subtractor types are available:<ul> <li><code>MOG</code> is the default</li> <li><code>CNT</code> is a newer, faster algorithm (feedback is welcome)</li> </ul> </li> <li>[bugfix] When using the <code>-o</code>/<code>--output</code> argument, a file is no longer written to disk if no motion events are found in the input file (<a href=https://github.com/Breakthrough/DVR-Scan/issues/50>#50</a>)</li> </ul> <h4 id=known-issues_4>Known Issues<a class=headerlink href=#known-issues_4 title="Permanent link">¶</a></h4> <ul> <li>Variable framerate videos (VFR) are not fully supported, and will yield incorrect timestamps (<a href=https://github.com/Breakthrough/DVR-Scan/issues/20>#20</a>)</li> <li>Using the <code>-roi</code> flag with high resolution videos can result in the window exceeding the size of the monitor (<a href=https://github.com/Breakthrough/DVR-Scan/issues/59>#59</a>)</li> <li>When using <code>-tc</code>/<code>--time-code</code> the start of the video may have a frozen timestamp (<a href=https://github.com/Breakthrough/DVR-Scan/issues/68>#68</a>)</li> <li>The kernel size must be manually adjusted when using <code>-df</code>/<code>--downscale-factor</code> (<a href=https://github.com/Breakthrough/DVR-Scan/issues/46>#46</a>)</li> <li>When using <code>--frame-skip</code>, the <code>--min-event-length</code> parameter must be manually adjusted, and exported clips will have the wrong playback speed</li> </ul> <hr> <h2 id=dvr-scan-12>DVR-Scan 1.2<a class=headerlink href=#dvr-scan-12 title="Permanent link">¶</a></h2> <h3 id=12-2021-03-10>1.2 (2021-03-10)<a class=headerlink href=#12-2021-03-10 title="Permanent link">¶</a></h3> <h4 id=changelog_13>Changelog<a class=headerlink href=#changelog_13 title="Permanent link">¶</a></h4> <ul> <li>[bugfix] Fix quiet mode (<code>-q/--quiet</code>) not working correctly (<a href=https://github.com/Breakthrough/DVR-Scan/issues/19>#19</a>, <a href=https://github.com/Breakthrough/DVR-Scan/issues/35>#35</a>)</li> <li>[bugfix] Fix downscale factor (<code>-df</code>/<code>--downscale-factor</code>) having no effect (<a href=https://github.com/Breakthrough/DVR-Scan/issues/46>#46</a>)</li> <li>[api] Swap order of <code>fps</code> and <code>timecode</code> arguments in <code>FrameTimecode</code> constructor to match that of PySceneDetect (<a href=https://github.com/Breakthrough/DVR-Scan/issues/33>#33</a>)</li> <li>[api] Refactor ScanContext class for better usage from Python (<a href=https://github.com/Breakthrough/DVR-Scan/issues/33>#33</a>)</li> <li>[api] Use named logger rather than print statements (<a href=https://github.com/Breakthrough/DVR-Scan/issues/35>#35</a>)</li> </ul> <h4 id=known-issues_5>Known Issues<a class=headerlink href=#known-issues_5 title="Permanent link">¶</a></h4> <ul> <li>When using the <code>-o</code>/<code>--output</code> argument, a file is still written to disk even if no motion events are discovered in the input file (<a href=https://github.com/Breakthrough/DVR-Scan/issues/50>#50</a>)</li> <li>Variable framerate videos (VFR) are not fully supported, and will yield incorrect timestamps (<a href=https://github.com/Breakthrough/DVR-Scan/issues/20>#20</a>)</li> </ul> <hr> <h2 id=dvr-scan-11>DVR-Scan 1.1<a class=headerlink href=#dvr-scan-11 title="Permanent link">¶</a></h2> <h3 id=11-2020-07-12>1.1 (2020-07-12)<a class=headerlink href=#11-2020-07-12 title="Permanent link">¶</a></h3> <h4 id=changelog_14>Changelog<a class=headerlink href=#changelog_14 title="Permanent link">¶</a></h4> <ul> <li>[feature] Add new <code>-roi</code> argument to allow specifying a rectangular detection window, can select graphically or specify x/y/w/h via command line (thanks <a href=https://github.com/klucsik>@klucsik</a>)</li> <li>[bugfix] Fixed broken OpenCV compatibility layer causing issues with OpenCV 3.0+</li> <li>[general] Released project on pip, pinned OpenCV version requirement</li> </ul> <h4 id=known-issues_6>Known Issues<a class=headerlink href=#known-issues_6 title="Permanent link">¶</a></h4> <ul> <li>Quiet mode (<code>-q/--quiet</code>) does not work correctly</li> <li>Variable framerate videos (VFR) are not fully supported, and will yield incorrect timestamps (<a href=https://github.com/Breakthrough/DVR-Scan/issues/20>#20</a>)</li> </ul> <hr> <h2 id=dvr-scan-10>DVR-Scan 1.0<a class=headerlink href=#dvr-scan-10 title="Permanent link">¶</a></h2> <h3 id=101-2017-01-12>1.0.1 (2017-01-12)<a class=headerlink href=#101-2017-01-12 title="Permanent link">¶</a></h3> <ul> <li>[bugfix] unhandled exception affecting users running source distributions under Python 2.7 environments</li> </ul> <h3 id=10-2017-01-11>1.0 (2017-01-11)<a class=headerlink href=#10-2017-01-11 title="Permanent link">¶</a></h3> <ul> <li>[feature] detects motion events with configurable sensitivity and noise removal thresholds</li> <li>[feature] output events to individual video files, or as a single-file compilation</li> <li>[feature] allows input seeking, frame skipping, and output suppression mode</li> <li>[feature] configurable detection windows and pre/post-event inclusion length</li> </ul> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright © 2016 Brandon Castellano. All rights reserved.<br><a href=https://github.com/Breakthrough/DVR-Scan/blob/main/LICENSE alt="link to LICENSE on Github">Licensed under BSD 2-Clause license. </div> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": ".", "features": ["navigation.tabs", "navigation.sections", "navigation.tabs.sticky", "toc.follow", "toc.integrate", "content.code.copy"], "search": "assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src=assets/javascripts/bundle.88dd0f4e.min.js></script> </body> </html>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Brandon Castellano"><link rel=icon href=https://www.dvr-scan.com/assets/dvr-scan.ico><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>DVR-Scan</title><link rel=stylesheet href=assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=assets/stylesheets/palette.06af60db.min.css><style>:root{--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Rubik:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Rubik";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=style.min.css><script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=custom data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#quickstart class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=. title=DVR-Scan class="md-header__button md-logo" aria-label=DVR-Scan data-md-component=logo> <img src=https://www.dvr-scan.com/assets/dvr-scan.png alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DVR-Scan </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Home </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=custom data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <div class=md-header__source> <a href=https://github.com/Breakthrough/DVR-Scan title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> DVR-Scan on Github </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=guide.html class=md-tabs__link> User Guide </a> </li> <li class=md-tabs__item> <a href=docs.html class=md-tabs__link> Documentation </a> </li> <li class=md-tabs__item> <a href=faq.html class=md-tabs__link> FAQ </a> </li> <li class=md-tabs__item> <a href=changelog.html class=md-tabs__link> Changelog </a> </li> <li class=md-tabs__item> <a href=resources.html class=md-tabs__link> Resources </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation hidden> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=. title=DVR-Scan class="md-nav__button md-logo" aria-label=DVR-Scan data-md-component=logo> <img src=https://www.dvr-scan.com/assets/dvr-scan.png alt=logo> </a> DVR-Scan </label> <div class=md-nav__source> <a href=https://github.com/Breakthrough/DVR-Scan title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> DVR-Scan on Github </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=guide.html class=md-nav__link> <span class=md-ellipsis> User Guide </span> </a> </li> <li class=md-nav__item> <a href=docs.html class=md-nav__link> <span class=md-ellipsis> Documentation </span> </a> </li> <li class=md-nav__item> <a href=faq.html class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=changelog.html class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=resources.html class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <p><img alt="DVR-Scan Logo" src=https://www.dvr-scan.com/assets/dvr-scan.png width=200rem></p> <h1 id=dvr-scan-title>DVR-Scan</h1> <h3 id=dvr-scan-subtitle>Find and extract motion events in videos.</h3> <hr> <div class="admonition success"> <p class=admonition-title>Latest Version: 1.8 (August 23, 2025)</p> <p><div class=buttongrid><a class=md-button href=guide.html id=changelog-button><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M96 0C43 0 0 43 0 96v320c0 53 43 96 96 96h320c17.7 0 32-14.3 32-32s-14.3-32-32-32v-64c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H96m0 384h256v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32m32-240c0-8.8 7.2-16 16-16h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16m16 48h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16"/></svg></span> User Guide</a><a class=md-button href=docs.html id=documentation-button><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 96c0-17.7 14.3-32 32-32h384c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32m0 160c0-17.7 14.3-32 32-32h384c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32m448 160c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h384c17.7 0 32 14.3 32 32"/></svg></span> Documentation</a><a class=md-button href=changelog.html id=download-button><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M495.9 166.6c3.2 8.7.5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4l-55.6 17.8c-8.8 2.8-18.6.3-24.5-6.8-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4c-1.1-8.4-1.7-16.9-1.7-25.5s.6-17.1 1.7-25.4l-43.3-39.4c-6.9-6.2-9.6-15.9-6.4-24.6 4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2 5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8 8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160"/></svg></span> Resources</a></div></p> </div> <hr> <p>DVR-Scan is a command-line application that <strong>automatically detects motion events in video files</strong> (e.g. security camera footage). DVR-Scan looks for areas in footage containing motion, and saves each event to a separate video clip. DVR-Scan is free and open-source software, and works on Windows, Linux, and Mac.</p> <h2 id=quickstart>Quickstart <span class=dvr-scan-download-icons><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m0 93.7 183.6-25.3v177.4H0zm0 324.6 183.6 25.3V268.4H0zm203.8 28L448 480V268.4H203.8zm0-380.6v180.1H448V32z"/></svg></span><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 384 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9m-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3"/></svg></span><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7m-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4M420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7M223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8M183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1m-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3q-2.1-7.35 4.2-12.3m3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9m-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2m257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6M173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5"/></svg></span></span><a class=headerlink href=#quickstart title="Permanent link">¶</a></h2> <h3 id=ui>UI<a class=headerlink href=#ui title="Permanent link">¶</a></h3> <p>Launch DVR-Scan from the shortcut or run the <code>dvr-scan-app</code> command. Press <strong>Add</strong> to add your input videos, and press <strong>Start</strong> to find and extract segments with motion:</p> <p><img alt="ui example" src=https://www.dvr-scan.com/assets/app-main-window.jpg width=480></p> <p>To limit detection to certain areas, press <strong>Set Regions</strong> and use <a href=guide.html#region-editor>the <strong>Region Editor</strong></a>. Motion sensitivity can be adjusted under <strong>Settings -> Motion</strong>. See the <a href=guide.html>User Guide</a> for more information.</p> <h3 id=cli>CLI<a class=headerlink href=#cli title="Permanent link">¶</a></h3> <p>Scan <code>video.mp4</code> (separate clips for each event):</p> <pre><code>dvr-scan -i video.mp4
|
|
1
|
+
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Brandon Castellano"><link rel=icon href=https://www.dvr-scan.com/assets/dvr-scan.ico><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>DVR-Scan</title><link rel=stylesheet href=assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=assets/stylesheets/palette.06af60db.min.css><style>:root{--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 7 9 19l-5.5-5.5 1.41-1.41L9 16.17 19.59 5.59z"/></svg>');}</style><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Rubik:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Rubik";--md-code-font:"JetBrains Mono"}</style><link rel=stylesheet href=style.min.css><script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=custom data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#quickstart class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=. title=DVR-Scan class="md-header__button md-logo" aria-label=DVR-Scan data-md-component=logo> <img src=https://www.dvr-scan.com/assets/dvr-scan.png alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DVR-Scan </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Home </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media data-md-color-scheme=default data-md-color-primary=custom data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <div class=md-header__source> <a href=https://github.com/Breakthrough/DVR-Scan title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> DVR-Scan on Github </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=guide.html class=md-tabs__link> User Guide </a> </li> <li class=md-tabs__item> <a href=docs.html class=md-tabs__link> Documentation </a> </li> <li class=md-tabs__item> <a href=faq.html class=md-tabs__link> FAQ </a> </li> <li class=md-tabs__item> <a href=changelog.html class=md-tabs__link> Changelog </a> </li> <li class=md-tabs__item> <a href=resources.html class=md-tabs__link> Resources </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation hidden> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted md-nav--integrated" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=. title=DVR-Scan class="md-nav__button md-logo" aria-label=DVR-Scan data-md-component=logo> <img src=https://www.dvr-scan.com/assets/dvr-scan.png alt=logo> </a> DVR-Scan </label> <div class=md-nav__source> <a href=https://github.com/Breakthrough/DVR-Scan title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> DVR-Scan on Github </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=guide.html class=md-nav__link> <span class=md-ellipsis> User Guide </span> </a> </li> <li class=md-nav__item> <a href=docs.html class=md-nav__link> <span class=md-ellipsis> Documentation </span> </a> </li> <li class=md-nav__item> <a href=faq.html class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=changelog.html class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=resources.html class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <p><img alt="DVR-Scan Logo" src=https://www.dvr-scan.com/assets/dvr-scan.png width=200rem></p> <h1 id=dvr-scan-title>DVR-Scan</h1> <h3 id=dvr-scan-subtitle>Find and extract motion events in videos.</h3> <hr> <div class="admonition success"> <p class=admonition-title>Latest Version: 1.8.2 (January 18, 2026)</p> <p><div class=buttongrid><a class=md-button href=guide.html id=changelog-button><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M96 0C43 0 0 43 0 96v320c0 53 43 96 96 96h320c17.7 0 32-14.3 32-32s-14.3-32-32-32v-64c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H96m0 384h256v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32m32-240c0-8.8 7.2-16 16-16h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16m16 48h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16"/></svg></span> User Guide</a><a class=md-button href=docs.html id=documentation-button><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 96c0-17.7 14.3-32 32-32h384c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32m0 160c0-17.7 14.3-32 32-32h384c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32m448 160c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h384c17.7 0 32 14.3 32 32"/></svg></span> Documentation</a><a class=md-button href=changelog.html id=download-button><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M495.9 166.6c3.2 8.7.5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4l-55.6 17.8c-8.8 2.8-18.6.3-24.5-6.8-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4c-1.1-8.4-1.7-16.9-1.7-25.5s.6-17.1 1.7-25.4l-43.3-39.4c-6.9-6.2-9.6-15.9-6.4-24.6 4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2 5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8 8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160"/></svg></span> Resources</a></div></p> </div> <hr> <p>DVR-Scan is a command-line application that <strong>automatically detects motion events in video files</strong> (e.g. security camera footage). DVR-Scan looks for areas in footage containing motion, and saves each event to a separate video clip. DVR-Scan is free and open-source software, and works on Windows, Linux, and Mac.</p> <h2 id=quickstart>Quickstart <span class=dvr-scan-download-icons><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="m0 93.7 183.6-25.3v177.4H0zm0 324.6 183.6 25.3V268.4H0zm203.8 28L448 480V268.4H203.8zm0-380.6v180.1H448V32z"/></svg></span><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 384 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9m-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3"/></svg></span><span class=twemoji><svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M220.8 123.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7m-21.9 1.7c1.2 0 2-1.2 3-1.7 1.1-.6 3.1-.4 3.5-1.6.2-.4-.2-.9-.6-1.1-1.6-.9-3.8-.6-5.5.1-1.3.6-3.4 1.5-3.2 2.9.1 1 1.8 1.5 2.8 1.4M420 403.8c-3.6-4-5.3-11.6-7.2-19.7-1.8-8.1-3.9-16.8-10.5-22.4-1.3-1.1-2.6-2.1-4-2.9-1.3-.8-2.7-1.5-4.1-2 9.2-27.3 5.6-54.5-3.7-79.1-11.4-30.1-31.3-56.4-46.5-74.4-17.1-21.5-33.7-41.9-33.4-72C311.1 85.4 315.7.1 234.8 0 132.4-.2 158 103.4 156.9 135.2c-1.7 23.4-6.4 41.8-22.5 64.7-18.9 22.5-45.5 58.8-58.1 96.7-6 17.9-8.8 36.1-6.2 53.3-6.5 5.8-11.4 14.7-16.6 20.2-4.2 4.3-10.3 5.9-17 8.3s-14 6-18.5 14.5c-2.1 3.9-2.8 8.1-2.8 12.4 0 3.9.6 7.9 1.2 11.8 1.2 8.1 2.5 15.7.8 20.8-5.2 14.4-5.9 24.4-2.2 31.7 3.8 7.3 11.4 10.5 20.1 12.3 17.3 3.6 40.8 2.7 59.3 12.5 19.8 10.4 39.9 14.1 55.9 10.4 11.6-2.6 21.1-9.6 25.9-20.2 12.5-.1 26.3-5.4 48.3-6.6 14.9-1.2 33.6 5.3 55.1 4.1.6 2.3 1.4 4.6 2.5 6.7v.1c8.3 16.7 23.8 24.3 40.3 23 16.6-1.3 34.1-11 48.3-27.9 13.6-16.4 36-23.2 50.9-32.2 7.4-4.5 13.4-10.1 13.9-18.3.4-8.2-4.4-17.3-15.5-29.7M223.7 87.3c9.8-22.2 34.2-21.8 44-.4 6.5 14.2 3.6 30.9-4.3 40.4-1.6-.8-5.9-2.6-12.6-4.9 1.1-1.2 3.1-2.7 3.9-4.6 4.8-11.8-.2-27-9.1-27.3-7.3-.5-13.9 10.8-11.8 23-4.1-2-9.4-3.5-13-4.4-1-6.9-.3-14.6 2.9-21.8M183 75.8c10.1 0 20.8 14.2 19.1 33.5-3.5 1-7.1 2.5-10.2 4.6 1.2-8.9-3.3-20.1-9.6-19.6-8.4.7-9.8 21.2-1.8 28.1 1 .8 1.9-.2-5.9 5.5-15.6-14.6-10.5-52.1 8.4-52.1m-13.6 60.7c6.2-4.6 13.6-10 14.1-10.5 4.7-4.4 13.5-14.2 27.9-14.2 7.1 0 15.6 2.3 25.9 8.9 6.3 4.1 11.3 4.4 22.6 9.3 8.4 3.5 13.7 9.7 10.5 18.2-2.6 7.1-11 14.4-22.7 18.1-11.1 3.6-19.8 16-38.2 14.9-3.9-.2-7-1-9.6-2.1-8-3.5-12.2-10.4-20-15-8.6-4.8-13.2-10.4-14.7-15.3q-2.1-7.35 4.2-12.3m3.3 334c-2.7 35.1-43.9 34.4-75.3 18-29.9-15.8-68.6-6.5-76.5-21.9-2.4-4.7-2.4-12.7 2.6-26.4v-.2c2.4-7.6.6-16-.6-23.9-1.2-7.8-1.8-15 .9-20 3.5-6.7 8.5-9.1 14.8-11.3 10.3-3.7 11.8-3.4 19.6-9.9 5.5-5.7 9.5-12.9 14.3-18 5.1-5.5 10-8.1 17.7-6.9 8.1 1.2 15.1 6.8 21.9 16l19.6 35.6c9.5 19.9 43.1 48.4 41 68.9m-1.4-25.9c-4.1-6.6-9.6-13.6-14.4-19.6 7.1 0 14.2-2.2 16.7-8.9 2.3-6.2 0-14.9-7.4-24.9-13.5-18.2-38.3-32.5-38.3-32.5-13.5-8.4-21.1-18.7-24.6-29.9s-3-23.3-.3-35.2c5.2-22.9 18.6-45.2 27.2-59.2 2.3-1.7.8 3.2-8.7 20.8-8.5 16.1-24.4 53.3-2.6 82.4.6-20.7 5.5-41.8 13.8-61.5 12-27.4 37.3-74.9 39.3-112.7 1.1.8 4.6 3.2 6.2 4.1 4.6 2.7 8.1 6.7 12.6 10.3 12.4 10 28.5 9.2 42.4 1.2 6.2-3.5 11.2-7.5 15.9-9 9.9-3.1 17.8-8.6 22.3-15 7.7 30.4 25.7 74.3 37.2 95.7 6.1 11.4 18.3 35.5 23.6 64.6 3.3-.1 7 .4 10.9 1.4 13.8-35.7-11.7-74.2-23.3-84.9-4.7-4.6-4.9-6.6-2.6-6.5 12.6 11.2 29.2 33.7 35.2 59 2.8 11.6 3.3 23.7.4 35.7 16.4 6.8 35.9 17.9 30.7 34.8-2.2-.1-3.2 0-4.2 0 3.2-10.1-3.9-17.6-22.8-26.1-19.6-8.6-36-8.6-38.3 12.5-12.1 4.2-18.3 14.7-21.4 27.3-2.8 11.2-3.6 24.7-4.4 39.9-.5 7.7-3.6 18-6.8 29-32.1 22.9-76.7 32.9-114.3 7.2m257.4-11.5c-.9 16.8-41.2 19.9-63.2 46.5-13.2 15.7-29.4 24.4-43.6 25.5s-26.5-4.8-33.7-19.3c-4.7-11.1-2.4-23.1 1.1-36.3 3.7-14.2 9.2-28.8 9.9-40.6.8-15.2 1.7-28.5 4.2-38.7 2.6-10.3 6.6-17.2 13.7-21.1.3-.2.7-.3 1-.5.8 13.2 7.3 26.6 18.8 29.5 12.6 3.3 30.7-7.5 38.4-16.3 9-.3 15.7-.9 22.6 5.1 9.9 8.5 7.1 30.3 17.1 41.6 10.6 11.6 14 19.5 13.7 24.6M173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4s5.9-6.3 3.1-6.6-2.6 2.6-6 5.1c-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2s-18.7-4.8-24.9-9.7c-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5"/></svg></span></span><a class=headerlink href=#quickstart title="Permanent link">¶</a></h2> <h3 id=ui>UI<a class=headerlink href=#ui title="Permanent link">¶</a></h3> <p>Launch DVR-Scan from the shortcut or run the <code>dvr-scan-app</code> command. Press <strong>Add</strong> to add your input videos, and press <strong>Start</strong> to find and extract segments with motion:</p> <p><img alt="ui example" src=https://www.dvr-scan.com/assets/app-main-window.jpg width=480></p> <p>To limit detection to certain areas, press <strong>Set Regions</strong> and use <a href=guide.html#region-editor>the <strong>Region Editor</strong></a>. Motion sensitivity can be adjusted under <strong>Settings -> Motion</strong>. See the <a href=guide.html>User Guide</a> for more information.</p> <h3 id=cli>CLI<a class=headerlink href=#cli title="Permanent link">¶</a></h3> <p>Scan <code>video.mp4</code> (separate clips for each event):</p> <pre><code>dvr-scan -i video.mp4
|
|
2
2
|
</code></pre> <p>Only scan a region of interest (<a href=guide.html#region-editor>see user guide</a> or hit <code>Ctrl + H</code> for controls):</p> <pre><code>dvr-scan -i video.mp4 -r
|
|
3
3
|
</code></pre> <p><img alt="overlay example" src=https://www.dvr-scan.com/assets/region-editor-multiple.jpg width=480></p> <p>Draw boxes around motion:</p> <pre><code>dvr-scan -i video.mp4 -bb
|
|
4
4
|
</code></pre> <p><img alt="overlay example" src=https://www.dvr-scan.com/assets/bounding-box.gif width=480></p> <p>Use <code>ffmpeg</code> to extract events:</p> <pre><code>dvr-scan -i video.mp4 -m ffmpeg
|
|
@@ -26,12 +26,9 @@ if os.name == "nt":
|
|
|
26
26
|
CUDA_BIN_PATH = os.path.abspath(os.path.join(CUDA_PATH, "bin"))
|
|
27
27
|
os.add_dll_directory(CUDA_BIN_PATH)
|
|
28
28
|
|
|
29
|
-
# OpenCV is a required package, but we don't have it as an explicit dependency since we
|
|
30
|
-
# need to support both opencv-python and opencv-python-headless. Include some additional
|
|
31
|
-
# context with the exception if this is the case.
|
|
32
|
-
|
|
33
29
|
if not importlib.util.find_spec("cv2"):
|
|
34
30
|
raise ModuleNotFoundError(
|
|
35
|
-
"OpenCV could not be found, try installing opencv-
|
|
31
|
+
"OpenCV could not be found, try installing opencv-contrib-python:"
|
|
32
|
+
"\n\npip install opencv-contrib-python",
|
|
36
33
|
name="cv2",
|
|
37
34
|
)
|