loveme 发表于 2023-4-27 03:34

使用Python批量剪辑视频

本帖最后由 loveme 于 2023-4-27 03:54 编辑

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


```
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")
```

郁闷啊 发表于 2023-4-27 11:31

高手{:1_921:},请教如果想切最后一秒怎么改

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 视频的第一秒,并将其保存到指定的输出文件夹中,同时 ...

{:1_893:}对的还是你考虑得比较周全
页: [1]
查看完整版本: 使用Python批量剪辑视频