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)