You've already forked FrameTour-RenderWorker
收集ffmpeg异常,流式上传
This commit is contained in:
@ -208,9 +208,9 @@ class FfmpegTask(object):
|
|||||||
_mid_out_str = "[eff_m]"
|
_mid_out_str = "[eff_m]"
|
||||||
_end_out_str = "[eff_e]"
|
_end_out_str = "[eff_e]"
|
||||||
filter_args.append(f"{video_output_str}split=3{_start_out_str}{_mid_out_str}{_end_out_str}")
|
filter_args.append(f"{video_output_str}split=3{_start_out_str}{_mid_out_str}{_end_out_str}")
|
||||||
filter_args.append(f"{_start_out_str}select=lt(n\,{int(start*self.frame_rate)}){_start_out_str}")
|
filter_args.append(f"{_start_out_str}select=lt(n\\,{int(start*self.frame_rate)}){_start_out_str}")
|
||||||
filter_args.append(f"{_end_out_str}select=gt(n\,{int(start*self.frame_rate)}){_end_out_str}")
|
filter_args.append(f"{_end_out_str}select=gt(n\\,{int(start*self.frame_rate)}){_end_out_str}")
|
||||||
filter_args.append(f"{_mid_out_str}select=eq(n\,{int(start*self.frame_rate)}){_mid_out_str}")
|
filter_args.append(f"{_mid_out_str}select=eq(n\\,{int(start*self.frame_rate)}){_mid_out_str}")
|
||||||
filter_args.append(f"{_mid_out_str}tpad=start_mode=clone:start_duration={duration:.4f}{_mid_out_str}")
|
filter_args.append(f"{_mid_out_str}tpad=start_mode=clone:start_duration={duration:.4f}{_mid_out_str}")
|
||||||
if rotate_deg != 0:
|
if rotate_deg != 0:
|
||||||
filter_args.append(f"{_mid_out_str}rotate=PI*{rotate_deg}/360{_mid_out_str}")
|
filter_args.append(f"{_mid_out_str}rotate=PI*{rotate_deg}/360{_mid_out_str}")
|
||||||
@ -339,6 +339,7 @@ class FfmpegTask(object):
|
|||||||
if self.input_file[0] == self.get_output_file():
|
if self.input_file[0] == self.get_output_file():
|
||||||
return []
|
return []
|
||||||
return args + ["-i", self.input_file[0]] + ["-c", "copy", self.get_output_file()]
|
return args + ["-i", self.input_file[0]] + ["-c", "copy", self.get_output_file()]
|
||||||
|
return []
|
||||||
|
|
||||||
def set_output_file(self, file=None):
|
def set_output_file(self, file=None):
|
||||||
if file is None:
|
if file is None:
|
||||||
|
@ -53,7 +53,7 @@ def start_render(ffmpeg_task: FfmpegTask):
|
|||||||
ffmpeg_task.set_output_file(ffmpeg_task.input_file[0])
|
ffmpeg_task.set_output_file(ffmpeg_task.input_file[0])
|
||||||
span.set_status(Status(StatusCode.OK))
|
span.set_status(Status(StatusCode.OK))
|
||||||
return True
|
return True
|
||||||
ffmpeg_process = subprocess.run(["ffmpeg", "-progress", "-", "-loglevel", "error", *ffmpeg_args], **subprocess_args(True))
|
ffmpeg_process = subprocess.run(["ffmpeg", "-progress", "-", "-loglevel", "error", *ffmpeg_args], stderr=subprocess.PIPE, **subprocess_args(True))
|
||||||
span.set_attribute("ffmpeg.args", json.dumps(ffmpeg_process.args))
|
span.set_attribute("ffmpeg.args", json.dumps(ffmpeg_process.args))
|
||||||
logger.info(" ".join(ffmpeg_process.args))
|
logger.info(" ".join(ffmpeg_process.args))
|
||||||
ffmpeg_final_out = handle_ffmpeg_output(ffmpeg_process.stdout)
|
ffmpeg_final_out = handle_ffmpeg_output(ffmpeg_process.stdout)
|
||||||
@ -62,7 +62,8 @@ def start_render(ffmpeg_task: FfmpegTask):
|
|||||||
code = ffmpeg_process.returncode
|
code = ffmpeg_process.returncode
|
||||||
span.set_attribute("ffmpeg.code", code)
|
span.set_attribute("ffmpeg.code", code)
|
||||||
if code != 0:
|
if code != 0:
|
||||||
span.set_status(Status(StatusCode.ERROR))
|
span.set_attribute("ffmpeg.err", str(ffmpeg_process.stderr))
|
||||||
|
span.set_status(Status(StatusCode.ERROR, "FFMPEG异常退出"))
|
||||||
logger.error("FFMPEG ERROR: %s", ffmpeg_process.stderr)
|
logger.error("FFMPEG ERROR: %s", ffmpeg_process.stderr)
|
||||||
return False
|
return False
|
||||||
span.set_attribute("ffmpeg.out_file", ffmpeg_task.output_file)
|
span.set_attribute("ffmpeg.out_file", ffmpeg_task.output_file)
|
||||||
@ -70,12 +71,13 @@ def start_render(ffmpeg_task: FfmpegTask):
|
|||||||
file_size = os.path.getsize(ffmpeg_task.output_file)
|
file_size = os.path.getsize(ffmpeg_task.output_file)
|
||||||
span.set_attribute("file.size", file_size)
|
span.set_attribute("file.size", file_size)
|
||||||
if file_size < 4096:
|
if file_size < 4096:
|
||||||
span.set_status(Status(StatusCode.ERROR))
|
span.set_status(Status(StatusCode.ERROR, "输出文件过小"))
|
||||||
logger.error("FFMPEG ERROR: OUTPUT FILE IS TOO SMALL")
|
logger.error("FFMPEG ERROR: OUTPUT FILE IS TOO SMALL")
|
||||||
return False
|
return False
|
||||||
except OSError:
|
except OSError as e:
|
||||||
span.set_attribute("file.size", 0)
|
span.set_attribute("file.size", 0)
|
||||||
span.set_status(Status(StatusCode.ERROR))
|
span.set_attribute("file.error", e.strerror)
|
||||||
|
span.set_status(Status(StatusCode.ERROR, "输出文件不存在"))
|
||||||
logger.error("FFMPEG ERROR: OUTPUT FILE NOT FOUND")
|
logger.error("FFMPEG ERROR: OUTPUT FILE NOT FOUND")
|
||||||
return False
|
return False
|
||||||
span.set_status(Status(StatusCode.OK))
|
span.set_status(Status(StatusCode.OK))
|
||||||
|
@ -30,7 +30,7 @@ def upload_to_oss(url, file_path):
|
|||||||
req_span.set_attribute("http.method", "PUT")
|
req_span.set_attribute("http.method", "PUT")
|
||||||
req_span.set_attribute("http.url", url)
|
req_span.set_attribute("http.url", url)
|
||||||
with open(file_path, 'rb') as f:
|
with open(file_path, 'rb') as f:
|
||||||
response = requests.put(url, data=f, timeout=60, headers={"Content-Type": "video/mp4"})
|
response = requests.put(url, data=f, stream=True, timeout=60, headers={"Content-Type": "video/mp4"})
|
||||||
req_span.set_attribute("http.status_code", response.status_code)
|
req_span.set_attribute("http.status_code", response.status_code)
|
||||||
req_span.set_attribute("http.response", response.text)
|
req_span.set_attribute("http.response", response.text)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
|
Reference in New Issue
Block a user