mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-02-09 00:17:00 +01:00
switch to mpegts format for cache and create mp4 with faststart
This commit is contained in:
parent
ef82c5c691
commit
c809494c98
@ -298,7 +298,7 @@ RECORD_FFMPEG_OUTPUT_ARGS_DEFAULT = [
|
|||||||
"-segment_time",
|
"-segment_time",
|
||||||
"10",
|
"10",
|
||||||
"-segment_format",
|
"-segment_format",
|
||||||
"mp4",
|
"ts",
|
||||||
"-reset_timestamps",
|
"-reset_timestamps",
|
||||||
"1",
|
"1",
|
||||||
"-strftime",
|
"-strftime",
|
||||||
@ -562,7 +562,7 @@ class CameraConfig(FrigateBaseModel):
|
|||||||
)
|
)
|
||||||
ffmpeg_output_args = (
|
ffmpeg_output_args = (
|
||||||
record_args
|
record_args
|
||||||
+ [f"{os.path.join(CACHE_DIR, self.name)}-%Y%m%d%H%M%S.mp4"]
|
+ [f"{os.path.join(CACHE_DIR, self.name)}-%Y%m%d%H%M%S.ts"]
|
||||||
+ ffmpeg_output_args
|
+ ffmpeg_output_args
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,9 +48,7 @@ class RecordingMaintainer(threading.Thread):
|
|||||||
recordings = [
|
recordings = [
|
||||||
d
|
d
|
||||||
for d in os.listdir(CACHE_DIR)
|
for d in os.listdir(CACHE_DIR)
|
||||||
if os.path.isfile(os.path.join(CACHE_DIR, d))
|
if os.path.isfile(os.path.join(CACHE_DIR, d)) and d.endswith(".ts")
|
||||||
and d.endswith(".mp4")
|
|
||||||
and not d.startswith("clip_")
|
|
||||||
]
|
]
|
||||||
|
|
||||||
files_in_use = []
|
files_in_use = []
|
||||||
@ -113,9 +111,30 @@ class RecordingMaintainer(threading.Thread):
|
|||||||
file_name = f"{start_time.strftime('%M.%S.mp4')}"
|
file_name = f"{start_time.strftime('%M.%S.mp4')}"
|
||||||
file_path = os.path.join(directory, file_name)
|
file_path = os.path.join(directory, file_name)
|
||||||
|
|
||||||
# copy then delete is required when recordings are stored on some network drives
|
ffmpeg_cmd = [
|
||||||
shutil.copyfile(cache_path, file_path)
|
"ffmpeg",
|
||||||
os.remove(cache_path)
|
"-y",
|
||||||
|
"-i",
|
||||||
|
cache_path,
|
||||||
|
"-c",
|
||||||
|
"copy",
|
||||||
|
"-movflags",
|
||||||
|
"+faststart",
|
||||||
|
file_path,
|
||||||
|
]
|
||||||
|
|
||||||
|
p = sp.run(
|
||||||
|
ffmpeg_cmd,
|
||||||
|
encoding="ascii",
|
||||||
|
capture_output=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
Path(cache_path).unlink(missing_ok=True)
|
||||||
|
|
||||||
|
if p.returncode != 0:
|
||||||
|
logger.error(f"Unable to convert {cache_path} to {file_path}")
|
||||||
|
logger.error(p.stderr)
|
||||||
|
continue
|
||||||
|
|
||||||
rand_id = "".join(
|
rand_id = "".join(
|
||||||
random.choices(string.ascii_lowercase + string.digits, k=6)
|
random.choices(string.ascii_lowercase + string.digits, k=6)
|
||||||
|
Loading…
Reference in New Issue
Block a user