剩余最后一步,合成所有素材

This commit is contained in:
linyqh 2024-09-27 01:01:49 +08:00
parent e75157a7ac
commit 67d6f353eb
4 changed files with 51 additions and 37 deletions

View File

@ -7,6 +7,7 @@ from typing import List
from loguru import logger
from openai import OpenAI
from openai import AzureOpenAI
from moviepy.editor import VideoFileClip
from openai.types.chat import ChatCompletion
import google.generativeai as gemini
from googleapiclient.errors import ResumableUploadError
@ -406,17 +407,19 @@ def compress_video(input_path: str, output_path: str):
return
try:
command = [
ffmpeg_path,
"-i", input_path,
"-c:v", "h264",
"-b:v", "500k",
"-c:a", "aac",
"-b:a", "128k",
output_path
]
logger.info(f"执行命令: {' '.join(command)}")
subprocess.run(command, check=True)
clip = VideoFileClip(input_path)
clip.write_videofile(output_path, codec='libx264', audio_codec='aac', bitrate="500k", audio_bitrate="128k")
# command = [
# ffmpeg_path,
# "-i", input_path,
# "-c:v", "h264",
# "-b:v", "500k",
# "-c:a", "aac",
# "-b:a", "128k",
# output_path
# ]
# logger.info(f"执行命令: {' '.join(command)}")
# subprocess.run(command, check=True)
except subprocess.CalledProcessError as e:
logger.error(f"视频压缩失败: {e}")
raise
@ -814,7 +817,8 @@ if __name__ == "__main__":
# gemini_video_transcription(video_subject, video_path, language)
# 2. 解说文案
video_path = "/Users/apple/Desktop/home/NarratoAI/resource/videos/1.mp4"
# video_path = "/Users/apple/Desktop/home/NarratoAI/resource/videos/1.mp4"
video_path = "E:\\projects\\NarratoAI\\resource\\videos\\1.mp4"
video_plot = """
李自忠拿着儿子李牧名下的存折去银行取钱给儿子救命却被要求证明"你儿子是你儿子"
走投无路时碰到银行被抢劫劫匪给了他两沓钱救命李自忠却因此被银行以抢劫罪起诉并顶格判处20年有期徒刑

View File

@ -476,24 +476,17 @@ def start_subclip(task_id: str, params: VideoClipParams, subclip_path_videos):
if __name__ == "__main__":
task_id = "test123456"
subclip_path_videos = {'01:17-01:37': './storage/cache_videos/vid-01_17-01_37.mp4',
'00:00-00:06': './storage/cache_videos/vid-00_00-00_06.mp4',
'00:06-00:09': './storage/cache_videos/vid-00_06-00_09.mp4',
'01:03-01:10': './storage/cache_videos/vid-01_03-01_10.mp4',
'01:10-01:17': './storage/cache_videos/vid-01_10-01_17.mp4',
'00:24-00:27': './storage/cache_videos/vid-00_24-00_27.mp4',
'01:28-01:36': './storage/cache_videos/vid-01_28-01_36.mp4',
'00:32-00:41': './storage/cache_videos/vid-00_32-00_41.mp4',
'01:36-01:58': './storage/cache_videos/vid-01_36-01_58.mp4',
'00:12-00:15': './storage/cache_videos/vid-00_12-00_15.mp4',
'00:09-00:12': './storage/cache_videos/vid-00_09-00_12.mp4',
'02:12-02:25': './storage/cache_videos/vid-02_12-02_25.mp4',
'02:03-02:12': './storage/cache_videos/vid-02_03-02_12.mp4',
'01:58-02:03': './storage/cache_videos/vid-01_58-02_03.mp4',
'03:14-03:18': './storage/cache_videos/vid-03_14-03_18.mp4',
'03:18-03:20': './storage/cache_videos/vid-03_18-03_20.mp4'}
subclip_path_videos = {'00:41-01:58': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-00_41-01_58.mp4',
'00:06-00:15': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-00_06-00_15.mp4',
'01:10-01:17': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-01_10-01_17.mp4',
'00:47-01:03': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-00_47-01_03.mp4',
'01:03-01:10': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-01_03-01_10.mp4',
'02:40-03:08': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-02_40-03_08.mp4',
'03:02-03:20': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-03_02-03_20.mp4',
'03:18-03:20': 'E:\\projects\\NarratoAI\\storage\\cache_videos/vid-03_18-03_20.mp4'}
params = VideoClipParams(
video_clip_json_path="/Users/apple/Desktop/home/NarratoAI/resource/scripts/test003.json",
video_origin_path="/Users/apple/Desktop/home/NarratoAI/resource/videos/1.mp4",
video_clip_json_path="E:\\projects\\NarratoAI\\resource/scripts/test003.json",
video_origin_path="E:\\projects\\NarratoAI\\resource/videos/1.mp4",
)
start_subclip(task_id, params, subclip_path_videos=subclip_path_videos)

View File

@ -300,7 +300,8 @@ def generate_video(
)
video_clip.close()
del video_clip
logger.success("completed")
logger.success(""
"completed")
def generate_video_v2(
@ -310,6 +311,18 @@ def generate_video_v2(
output_file: str,
params: Union[VideoParams, VideoClipParams],
):
"""
合并所有素材
Args:
video_path:
audio_paths:
subtitle_path:
output_file:
params:
Returns:
"""
aspect = VideoAspect(params.video_aspect)
video_width, video_height = aspect.to_resolution()
@ -546,13 +559,11 @@ def combine_clip_videos(combined_video_path: str,
# 一遍又一遍地添加下载的剪辑,直到达到音频的持续时间 max_duration
# while video_duration < audio_duration:
for video_path, video_ost in zip(video_paths, video_ost_list):
print(video_path)
print(video_ost)
cache_video_path = utils.root_dir()
clip = VideoFileClip(os.path.join(cache_video_path, video_path))
# # 通过 ost 字段判断是否播放原声
# if not video_ost:
# clip = clip.without_audio()
# 通过 ost 字段判断是否播放原声
if not video_ost:
clip = clip.without_audio()
# # 检查剪辑是否比剩余音频长
# if (audio_duration - video_duration) < clip.duration:
# clip = clip.subclip(0, (audio_duration - video_duration))

View File

@ -3,6 +3,12 @@ set CURRENT_DIR=%CD%
echo ***** Current directory: %CURRENT_DIR% *****
set PYTHONPATH=%CURRENT_DIR%
set "vpn_proxy_url=%http://127.0.0.1:7890%"
:: 使用VPN代理进行一些操作例如通过代理下载文件
set "http_proxy=%vpn_proxy_url%"
set "https_proxy=%vpn_proxy_url%"
@echo off
setlocal enabledelayedexpansion
@ -40,4 +46,4 @@ pause
rem set HF_ENDPOINT=https://hf-mirror.com
streamlit run webui.py --browser.gatherUsageStats=False --server.enableCORS=True
streamlit run webui.py --browser.serverAddress="127.0.0.1" --server.enableCORS=True --server.maxUploadSize=2048 --browser.gatherUsageStats=False