From fff20610a5200342ba0bc22126541fe996ed770d Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 27 Feb 2025 15:36:53 +0800 Subject: [PATCH] =?UTF-8?q?profile=20level=E6=8C=87=E5=AE=9A=E5=8F=8A?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/ffmpeg.py | 10 +++++++--- util/ffmpeg.py | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/entity/ffmpeg.py b/entity/ffmpeg.py index 61a7879..1328348 100644 --- a/entity/ffmpeg.py +++ b/entity/ffmpeg.py @@ -1,6 +1,9 @@ import time import uuid +ENCODER_ARGS = ("-c:v", "h264_qsv", "-global_quality", "28", "-look_ahead", "1",) +PROFILE_LEVEL_ARGS = ("-profile:v", "high", "-level:v", "4") + class FfmpegTask(object): @@ -136,13 +139,14 @@ class FfmpegTask(object): def get_ffmpeg_args(self): args = ['-y', '-hide_banner'] if self.task_type == 'encode': - # args += ('-hwaccel', 'qsv', '-hwaccel_output_format', 'qsv') input_args = [] filter_args = [] - output_args = ["-shortest", "-c:v", "h264_qsv", "-global_quality", "28", "-look_ahead", "1"] + output_args = ["-profile", "high", "-level", "4","-shortest", *ENCODER_ARGS] if self.annexb: output_args.append("-bsf:v") output_args.append("h264_mp4toannexb") + output_args.append("-reset_timestamps") + output_args.append("1") video_output_str = "[0:v]" audio_output_str = "[0:v]" audio_input_count = 0 @@ -219,7 +223,7 @@ class FfmpegTask(object): output_args.append("-f") output_args.append("mp4") return args + input_args + output_args + [self.get_output_file()] - output_args += ("-c:v", "h264_qsv", "-r", "25", "-global_quality", "28", "-look_ahead", "1") + output_args += ["-r", f"{self.frame_rate}", *PROFILE_LEVEL_ARGS, *ENCODER_ARGS] filter_args = [] video_output_str = "[0:v]" audio_output_str = "[0:a]" diff --git a/util/ffmpeg.py b/util/ffmpeg.py index ff68a8b..f572f78 100644 --- a/util/ffmpeg.py +++ b/util/ffmpeg.py @@ -4,7 +4,7 @@ import subprocess from datetime import datetime from typing import Optional, IO -from entity.ffmpeg import FfmpegTask +from entity.ffmpeg import FfmpegTask, ENCODER_ARGS, PROFILE_LEVEL_ARGS logger = logging.getLogger(__name__) @@ -25,8 +25,8 @@ 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"]) + ffmpeg_process = subprocess.run(["ffmpeg", "-y", "-hide_banner", "-i", file, *PROFILE_LEVEL_ARGS, *ENCODER_ARGS, "-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)