2 Star 1 Fork 0

creatorliao/自动整理剪辑视频

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
tool_remove_video_clip_by_point.py 3.14 KB
一键复制 编辑 原始数据 按行查看 历史
creatorliao 提交于 2024-07-10 07:02 . 更新避免视频拉伸的操作
from pathlib import Path
from moviepy.editor import VideoFileClip
from library.storage import write_dict_to_json, read_json_to_dict
from videos_tools.create_clip_list_file import create_split_clip_list_by_points_list
from videos_tools.split_videos_by_list_file import split_videos_by_list_file
def get_mp4_duration(mp4_path):
"""
获取单个 MP4 文件的时长。
:param mp4_path: str,MP4 文件的路径。
:return: float,视频时长(秒)。
"""
with VideoFileClip(str(mp4_path)) as video:
return video.duration
def remove_video_by_point(
file_path_input_mp4: Path, point: str, folder_path_output: Path, remove_end: bool = True
):
"""
根据给定的时间点,删除后半部分视频。
参数:
- file_path_input_mp4: 输入视频的路径。
- point: 时间点,包含待分割视频的结束时间点。
- folder_path_output: 输出文件夹的路径。
- remove_end: 是否删除后半部分视频,默认为 True,否则删除前半部分视频。
- return: 分割后保留的文件路径
"""
# 1) 创建分割时间点文件
file_path_list: list = create_split_clip_list_by_points_list(file_path_input_mp4, [point])
file_path_list_file = folder_path_output / f"clip_list_{file_path_input_mp4.stem}.json"
# 2) 基于选项构建文件列表
if remove_end:
# 2.1) 删除 file_path_list 最后一个元素
file_path_list = [file_path_list[0]]
else:
# 2.2) 删除 file_path_list 第一个元素
file_path_list = [file_path_list[1]]
# 3) 创建文件
write_dict_to_json(file_path_list, file_path_list_file)
# 4) 基于文件列表分割视频
split_videos_by_list_file(file_path_input_mp4, file_path_list_file, folder_path_output)
# 5) 删除原始视频
file_name_input_mp4 = file_path_input_mp4.name
file_path_input_mp4.unlink()
# 6) 将结果文件重命名为 file_path_input_mp4
video_clip_list = read_json_to_dict(file_path_list_file)
file_name_output_mp4 = video_clip_list[0]["clip_name"]
file_path_output_mp4 = folder_path_output / file_name_output_mp4
file_path_output_mp4.rename(folder_path_output / file_name_input_mp4)
# 7) 删除 file_path_list_file
file_path_list_file.unlink()
def remove_one_second_from_end(
file_path_input_mp4: Path, folder_path_output: Path
):
"""
从视频末尾删除一秒。
"""
# 1) 使用获取视频时长
duration = get_mp4_duration(file_path_input_mp4) - 1
# 2) 转换成 hh:mm:ss
duration = f"{int(duration // 3600):02d}:{int((duration % 3600) // 60):02d}:{int(duration % 60):02d}"
# 3) 删除视频
remove_video_by_point(file_path_input_mp4, f"{duration}", folder_path_output)
if __name__ == "__main__":
file_path_input_mp4 = Path(
r"E:\55-从产品到爆品_高雄勇\55_从产品到爆品_高雄勇.mp4")
remove_video_by_point(file_path_input_mp4, "05:47:12", file_path_input_mp4.parent)
# file_path_input_mp4 = Path(
# r"D:\云盘下载\20240615_递归算法与Python实现_ev.mp4")
# remove_one_second_from_end(file_path_input_mp4, file_path_input_mp4.parent)
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/creatorliao/auto_split_videos.git
[email protected]:creatorliao/auto_split_videos.git
creatorliao
auto_split_videos
自动整理剪辑视频
master

搜索帮助