From 29d6107cd29d15eb9a4b6065bdc5ecb16386d389 Mon Sep 17 00:00:00 2001 From: linyqh Date: Sat, 23 Nov 2024 22:25:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(video=5Fprocessor):=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E7=AB=96=E7=89=88=E8=A7=86=E9=A2=91=E8=A7=A3=E6=9E=90=E5=87=BA?= =?UTF-8?q?=E9=94=99=EF=BC=9B=E4=BC=98=E5=8C=96=E8=A7=86=E9=A2=91=E5=8E=8B?= =?UTF-8?q?=E7=BC=A9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加对横版和竖版视频的区分,使用不同的缩放比例 - 获取原始视频的宽度和高度,用于确定缩放比例 - 改进 FFmpeg 命令的执行,增加错误处理和日志记录 --- app/utils/video_processor_v2.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/app/utils/video_processor_v2.py b/app/utils/video_processor_v2.py index 0569b5a..03bbb84 100644 --- a/app/utils/video_processor_v2.py +++ b/app/utils/video_processor_v2.py @@ -212,7 +212,7 @@ class VideoProcessor: Args: output_dir: 输出目录 - skip_seconds: 跳过视频开头的秒数 + skip_seconds: 跳过视���开头的秒数 """ skip_frames = int(skip_seconds * self.fps) @@ -265,14 +265,30 @@ class VideoProcessor: video_name = os.path.splitext(os.path.basename(self.video_path))[0] compressed_video = os.path.join(compressed_dir, f"{video_name}_compressed.mp4") + # 获取原始视频的宽度和高度 + original_width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + original_height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + logger.info("步骤1: 压缩视频...") + if original_width > original_height: + # 横版视频 + scale_filter = f'scale={compressed_width}:-1' + else: + # 竖版视频 + scale_filter = f'scale=-1:{compressed_width}' + ffmpeg_cmd = [ 'ffmpeg', '-i', self.video_path, - '-vf', f'scale={compressed_width}:-1', + '-vf', scale_filter, '-y', compressed_video ] - subprocess.run(ffmpeg_cmd, check=True) + + try: + subprocess.run(ffmpeg_cmd, check=True, capture_output=True, text=True) + except subprocess.CalledProcessError as e: + logger.error(f"FFmpeg 错误输出: {e.stderr}") + raise # 2. 从压缩视频中提取关键帧 logger.info("\n步骤2: 从压缩视频提取关键帧...")