|
|
@ -150,7 +150,8 @@ class TranscodeTools: |
|
|
|
statuses:dict[str, TranscodeStatus] = {} |
|
|
|
WIN32PYTHON = "python-win32" |
|
|
|
|
|
|
|
def __init__(self, tools_directory, transcode_directory, hide_checks = True) -> None: |
|
|
|
def __init__(self, tools_directory, transcode_directory, hide_checks = True, delete_temporary_files = False) -> None: |
|
|
|
self.delete_temporary_files = delete_temporary_files |
|
|
|
self.logger = create_logger(TranscodeTools.__name__) |
|
|
|
self.hide_checks = hide_checks |
|
|
|
self.tools_directory = tools_directory |
|
|
@ -258,7 +259,7 @@ class TranscodeTools: |
|
|
|
async def anytoimage(self, source_file, out_file, delete_source_file = False): |
|
|
|
exec_string = ["-y", "-i", source_file, "-ss", "1", "-vframes", "1", out_file] |
|
|
|
self.logger.debug(f"execute {exec_string}") |
|
|
|
proc = await asyncio.create_subprocess_exec("ffmpeg", *exec_string, stderr=DEVNULL) |
|
|
|
proc = await asyncio.create_subprocess_exec("ffmpeg", *exec_string) |
|
|
|
await proc.communicate() |
|
|
|
|
|
|
|
if delete_source_file: |
|
|
@ -274,23 +275,25 @@ class TranscodeTools: |
|
|
|
except: |
|
|
|
pass |
|
|
|
|
|
|
|
async def processing_preview(self, file:File, nvr: NVR, ext = "webp"): |
|
|
|
async def processing_preview(self, file:File, nvr: NVR, ext = "webp", preview_pre_bytes = 1024 * 512): |
|
|
|
raw_file = file.previewPath(self.transcode_directory) |
|
|
|
preview_file = f"{raw_file}.{ext}" |
|
|
|
if os.path.exists(preview_file) and os.path.getsize(preview_file) != 0: |
|
|
|
self.logger.info(f"{preview_file} is exists") |
|
|
|
return preview_file |
|
|
|
|
|
|
|
if nvr is None: |
|
|
|
raise NeedNVR |
|
|
|
|
|
|
|
if not os.path.exists(raw_file) or os.path.getsize(raw_file) != 0: |
|
|
|
if not os.path.exists(raw_file) or os.path.getsize(raw_file) == 0: |
|
|
|
self.logger.info(f"download new preview {preview_file}") |
|
|
|
async with aiofiles.open(raw_file, "wb") as raw: |
|
|
|
async for chunk in nvr.stream_file(file, 1024 * 512): |
|
|
|
async for chunk in nvr.stream_file(file, preview_pre_bytes): |
|
|
|
await raw.write(chunk) |
|
|
|
|
|
|
|
nvr.logout() |
|
|
|
|
|
|
|
return await self.anytoimage(raw_file, preview_file, True) |
|
|
|
raw_file = await self.h264toavi(raw_file) |
|
|
|
return await self.anytoimage(raw_file, preview_file, False) |
|
|
|
|
|
|
|
async def processing_safe(self, status: TranscodeStatus, file:File, nvr: NVR, reCreate:bool = False): |
|
|
|
try: |
|
|
@ -328,7 +331,7 @@ class TranscodeTools: |
|
|
|
self.statuses[status.b64].avi = 0 |
|
|
|
avi_file = raw_file + ".avi" |
|
|
|
if not os.path.exists(avi_file) or reCreate: |
|
|
|
avi_file = await self.h264toavi(raw_file) |
|
|
|
avi_file = await self.h264toavi(raw_file, self.delete_temporary_files) |
|
|
|
else: |
|
|
|
self.logger.debug("file avi format already exitst") |
|
|
|
self.statuses[status.b64].avi = 100 |
|
|
@ -337,7 +340,7 @@ class TranscodeTools: |
|
|
|
self.statuses[status.b64].mp4 = 0 |
|
|
|
mp4_file = avi_file + ".mp4" |
|
|
|
if not os.path.exists(mp4_file) or reCreate: |
|
|
|
mp4_file = await self.avitomp4(avi_file, True) |
|
|
|
mp4_file = await self.avitomp4(avi_file, self.delete_temporary_files) |
|
|
|
else: |
|
|
|
self.logger.debug("file mp4 format already exists") |
|
|
|
self.statuses[status.b64].mp4 = 100 |
|
|
@ -372,7 +375,7 @@ class Config: |
|
|
|
else: |
|
|
|
for recorder in self.recorders: |
|
|
|
self.logger.info(recorder) |
|
|
|
self.transcode_tools:TranscodeTools = self.check_transcode_tools(not args.no_hide_check if args != None else True) |
|
|
|
self.transcode_tools:TranscodeTools = self.check_transcode_tools(not args.no_hide_check if args != None else True, raw.get("delete_temporary_files", False)) |
|
|
|
|
|
|
|
def getRecorder(self, index = 0) -> Recorder: |
|
|
|
return self.recorders[index] |
|
|
@ -386,9 +389,9 @@ class Config: |
|
|
|
os.mkdir(t_dir) |
|
|
|
return t_dir |
|
|
|
|
|
|
|
def check_transcode_tools(self, hide_check): |
|
|
|
def check_transcode_tools(self, hide_check, delete_temporary_files): |
|
|
|
tools_dir = os.path.join(app_dir(), "MiskaRisa264") |
|
|
|
return TranscodeTools(tools_dir, self.check_transcode_directory(), hide_check) |
|
|
|
return TranscodeTools(tools_dir, self.check_transcode_directory(), hide_check, delete_temporary_files) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
import argparse |
|
|
|