|
@@ -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])
|
|
|
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:
|
|
|
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_mp3_path = cls.get_video_mp3(pw_url, video_path_url, pw_random_id)
|
|
|
# 添加字幕 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'"
|
|
|
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)
|
|
|
return pw_url_path
|
|
|
|