From 29bb80f3b927315845af5d63240a63851b3b0d29 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 22 Jan 2025 14:31:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B2=E6=9F=93=E5=90=8E=E5=86=8Dto=20annexb?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=E6=96=B0=E9=80=BB=E8=BE=91=E6=8B=BC?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/ffmpeg.py | 1 - template/__init__.py | 4 ++-- util/ffmpeg.py | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/entity/ffmpeg.py b/entity/ffmpeg.py index ef9e19e..4d22331 100644 --- a/entity/ffmpeg.py +++ b/entity/ffmpeg.py @@ -202,7 +202,6 @@ class FfmpegTask(object): output_args.append("copy") output_args.append("-f") output_args.append("mp4") - output_args += ("-c:v", "h264_qsv", "-r", "25", "-global_quality", "28", "-look_ahead", "1") return args + input_args + output_args + [self.get_output_file()] output_args += ("-c:v", "h264_qsv", "-r", "25", "-global_quality", "28", "-look_ahead", "1") filter_args = [] diff --git a/template/__init__.py b/template/__init__.py index 381860a..1f9bbfa 100644 --- a/template/__init__.py +++ b/template/__init__.py @@ -88,8 +88,8 @@ def download_template(template_id): new_fp = os.path.join(template_info['local_path'], _fn) oss.download_from_oss(_template['source'], new_fp) if _fn.endswith(".mp4"): - from util.ffmpeg import to_annexb - new_fp = to_annexb(new_fp) + from util.ffmpeg import re_encode_and_annexb + new_fp = re_encode_and_annexb(new_fp) _template['source'] = os.path.relpath(new_fp, template_info['local_path']) if 'overlays' in _template: for i in range(len(_template['overlays'])): diff --git a/util/ffmpeg.py b/util/ffmpeg.py index c6765d4..48edfd7 100644 --- a/util/ffmpeg.py +++ b/util/ffmpeg.py @@ -21,6 +21,19 @@ def to_annexb(file): else: return file +def re_encode_and_annexb(file): + if not os.path.exists(file): + return file + logger.info("ReEncodeAndAnnexb: %s", file) + ffmpeg_process = subprocess.run(["ffmpeg", "-y", "-hide_banner", "-i", file, "-c:v", "h264_qsv", "-global_quality", "28", "-look_ahead", "1", "-bsf:v", "h264_mp4toannexb", + "-f", "mpegts", file+".ts"]) + logger.info("ReEncodeAndAnnexb: %s, returned: %s", file, ffmpeg_process.returncode) + if ffmpeg_process.returncode == 0: + os.remove(file) + return file+".ts" + else: + return file + def start_render(ffmpeg_task: FfmpegTask): logger.info(ffmpeg_task) if not ffmpeg_task.need_run(): @@ -64,7 +77,7 @@ def duration_str_to_float(duration_str: str) -> float: def probe_video_info(video_file): # 获取宽度和高度 result = subprocess.run( - ["ffprobe.exe", '-v', 'error', '-select_streams', 'v:0', '-show_entries', 'stream=width,height:format=duration', '-of', + ["ffprobe", '-v', 'error', '-select_streams', 'v:0', '-show_entries', 'stream=width,height:format=duration', '-of', 'csv=s=x:p=0', video_file], stderr=subprocess.STDOUT, **subprocess_args(True)