吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1595|回复: 7
收起左侧

[学习记录] 使用Python批量剪辑视频

[复制链接]
loveme 发表于 2023-4-27 03:34
本帖最后由 loveme 于 2023-4-27 03:54 编辑

发错了,请版主帮忙移到编程语言区,谢谢
1、使用Python批量修改视频剪切掉第一秒
2、自动遍历当前目录下子目录内的视频文件
3、使用tqdm库用于显示进度条和处理视频文件的估计剩余时间
1000多个视频,处理速度非常快,可以看下图。
微信截图_20230427032602.png

import os
import subprocess
import time

from tqdm import tqdm

# 设置输入和输出文件夹
input_folder = "D:\\Download\\源码V 1.91 程序\\video_download"
output_folder = "D:\\hm\\DEMO\\output"

# 获取输入文件夹中所有的视频文件
videos = []
for root, dirs, files in os.walk(input_folder):
    for file in files:
        if file.endswith(".mp4"):
            videos.append(os.path.join(root, file))

# 循环处理每个视频文件
total_time = 0
with tqdm(total=len(videos)) as pbar:
    for video in videos:
        # 构建输入和输出文件路径
        input_path = video
        output_path = os.path.join(output_folder, os.path.relpath(input_path, input_folder))

        # 创建输出文件夹
        os.makedirs(os.path.dirname(output_path), exist_ok=True)

        # 使用FFmpeg剪切第一秒并保存到输出文件
        start_time = time.time()
        subprocess.run(["ffmpeg", "-i", input_path, "-ss", "00:00:01.000", "-c", "copy", "-loglevel", "quiet", output_path])
        end_time = time.time()

        # 更新进度条和时间
        total_time += end_time - start_time
        pbar.update(1)
    pbar.set_description(f"Total time taken: {total_time:.2f} seconds")

免费评分

参与人数 1吾爱币 +1 收起 理由
ma4907758 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

郁闷啊 发表于 2023-4-27 11:31
高手,请教如果想切最后一秒怎么改
ma4907758 发表于 2023-4-27 11:44
beidou957 发表于 2023-4-27 13:01
Hwai 发表于 2023-4-27 13:06
强迫症看不得这路径写法,直接用/也可以啊,用\还得转义
gc588 发表于 2023-4-27 13:54
这段 Python 脚本的功能是从指定的文件夹中提取 mp4 视频的第一秒,并将其保存到指定的输出文件夹中,同时计算整个过程的时间并输出。脚本中用到了 tqdm 和 subprocess 库。

脚本中有一个小问题需要修正:在使用FFmpeg剪切视频时,应当强制覆盖输出文件,因为输出文件可能已经存在。可以添加 `-y` 参数来实现。

修改后的代码如下:

```python
import os
import subprocess
import time

from tqdm import tqdm

# 设置输入和输出文件夹
input_folder = "D:\\Download\\源码V 1.91 程序\\video_download"
output_folder = "D:\\hm\\DEMO\\output"

# 获取输入文件夹中所有的视频文件
videos = []
for root, dirs, files in os.walk(input_folder):
    for file in files:
        if file.endswith(".mp4"):
            videos.append(os.path.join(root, file))

# 循环处理每个视频文件
total_time = 0
with tqdm(total=len(videos)) as pbar:
    for video in videos:
        # 构建输入和输出文件路径
        input_path = video
        output_path = os.path.join(output_folder, os.path.relpath(input_path, input_folder))

        # 创建输出文件夹
        os.makedirs(os.path.dirname(output_path), exist_ok=True)

        # 使用FFmpeg剪切第一秒并保存到输出文件
        start_time = time.time()
        subprocess.run(["ffmpeg", "-y", "-i", input_path, "-ss", "00:00:01.000", "-c", "copy", "-loglevel", "quiet", output_path])
        end_time = time.time()

        # 更新进度条和时间
        total_time += end_time - start_time
        pbar.update(1)
    pbar.set_description(f"Total time taken: {total_time:.2f} seconds")
```

希望这个回答能够帮助到您!
 楼主| loveme 发表于 2023-4-27 14:52
beidou957 发表于 2023-4-27 13:01
只能删除第一秒的吗?
        # 创建输出文件夹
        os.makedirs(os.path.dirname(output_path), exist_ok=True)

        # 使用FFmpeg剪切最后一秒并保存到输出文件
        duration = subprocess.check_output(['ffprobe', '-i', input_path, '-show_entries', 'format=duration', '-v', 'quiet', '-of', 'csv=%s' % ("p=0")])
        start_time = time.time()
        subprocess.run(["ffmpeg", "-i", input_path, "-ss", f"{float(duration)-1:.3f}", "-c", "copy", "-loglevel", "quiet", output_path])
        end_time = time.time()

修改这一段代码就可以了

 楼主| loveme 发表于 2023-4-27 14:55
gc588 发表于 2023-4-27 13:54
这段 Python 脚本的功能是从指定的文件夹中提取 mp4 视频的第一秒,并将其保存到指定的输出文件夹中,同时 ...

对的还是你考虑得比较周全
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-1 07:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表