zhangyong hai 11 meses
pai
achega
1dad95f5c2
Modificáronse 1 ficheiros con 33 adicións e 4 borrados
  1. 33 4
      common/ffmpeg.py

+ 33 - 4
common/ffmpeg.py

@@ -101,6 +101,22 @@ class FFmpeg():
             ['ffmpeg', '-ss', str(time_offset), '-i', new_video_path, '-t', str(total_duration), '-vf', 'fps=1', "-y", jpg_url])
             ['ffmpeg', '-ss', str(time_offset), '-i', new_video_path, '-t', str(total_duration), '-vf', 'fps=1', "-y", jpg_url])
         return jpg_url
         return jpg_url
 
 
+    """
+    获取视频音频
+    """
+    @classmethod
+    def get_video_mp3(cls, video_file, video_path_url, pw_random_id):
+        pw_mp3_path = video_path_url + str(pw_random_id) +'pw_video.mp3'
+        command = [
+            'ffmpeg',
+            '-i', video_file,
+            '-q:a', '0',
+            '-map', 'a',
+            pw_mp3_path
+        ]
+        subprocess.run(command, check=True)
+        return pw_mp3_path
+
     """
     """
      生成片尾视频
      生成片尾视频
     """
     """
@@ -121,15 +137,28 @@ class FFmpeg():
         with open(pw_srt_path, 'w') as f:
         with open(pw_srt_path, 'w') as f:
             f.write(pw_srt)
             f.write(pw_srt)
         # 片尾位置
         # 片尾位置
-        pw_url_path = video_path_url + 'pw_video.mp4'
+        pw_url_path = video_path_url + str(pw_random_id) + 'pw_video.mp4'
         # 获取视频时长
         # 获取视频时长
         pw_duration = cls.get_video_duration(pw_url)
         pw_duration = cls.get_video_duration(pw_url)
+        # 获取音频
+        pw_mp3_path = cls.get_video_mp3(pw_url, video_path_url, pw_random_id)
         # 添加字幕 wqy-zenhei  Hiragino Sans GB
         # 添加字幕 wqy-zenhei  Hiragino Sans GB
         subtitle_cmd = f"subtitles={pw_srt_path}:force_style='Fontsize=14,Fontname=wqy-zenhei,Outline=0,PrimaryColour=&H000000,SecondaryColour=&H000000,Bold=1,MarginV=155'"
         subtitle_cmd = f"subtitles={pw_srt_path}:force_style='Fontsize=14,Fontname=wqy-zenhei,Outline=0,PrimaryColour=&H000000,SecondaryColour=&H000000,Bold=1,MarginV=155'"
         background_cmd = "drawbox=y=366/2:color=yellow@1.0:width=iw:height=50:t=fill"
         background_cmd = "drawbox=y=366/2:color=yellow@1.0:width=iw:height=50:t=fill"
-        ffmpeg_cmd = ['ffmpeg', '-loop', '1', '-i', jpg_url, '-i', pw_url, '-c:v', 'libx264', '-t',
-                      str(pw_duration), '-pix_fmt', 'yuv420p', '-c:a', 'aac', '-strict', 'experimental', '-shortest',
-                      '-vf', f"scale=320x480,{background_cmd},{subtitle_cmd}", pw_url_path]
+        ffmpeg_cmd = [
+            'ffmpeg',
+            '-loop', '1',
+            '-i', jpg_url,  # 输入的图片文件
+            '-i', pw_mp3_path,  # 输入的音频文件
+            '-c:v', 'libx264',  # 视频编码格式
+            '-t', str(pw_duration),  # 输出视频的持续时间,与音频持续时间相同
+            '-pix_fmt', 'yuv420p',  # 像素格式
+            '-c:a', 'aac',  # 音频编码格式
+            '-strict', 'experimental',  # 使用实验性编码器
+            '-shortest',  # 确保输出视频的长度与音频一致
+            '-vf', f"scale=320x480,{background_cmd},{subtitle_cmd}",  # 视频过滤器,设置分辨率和其他过滤器
+            pw_url_path  # 输出的视频文件路径
+        ]
         subprocess.run(ffmpeg_cmd)
         subprocess.run(ffmpeg_cmd)
         return pw_url_path
         return pw_url_path