在工作中有时需要统计大量视频的时长,如果视频量少的话,我们可以手工进行统计;超过上百个视频的话,我们就得使用代码实现。
将要统计的视频放在一个文件夹内,同时设置输出文件位置和文件名。
注意事项:该代码需要安装ffmpeg文件,解压后将文件bin目录添加到系统环境变量。
import os
import subprocess
import pandas as pd
from datetime import timedelta
# 定义函数获取视频时长
def get_duration(video_path):
cmd = f"ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {video_path}"
duration_str = subprocess.check_output(cmd, shell=True).decode("utf-8").strip()
duration = float(duration_str)
hours, remainder = divmod(duration, 3600)
minutes, seconds = divmod(remainder, 60)
return f"{int(hours)}小时{int(minutes)}分{int(seconds)}秒"
# 定义函数获取文件夹下所有视频文件路径
def get_all_video_paths(folder_path):
video_paths = []
for root, dirs, files in os.walk(folder_path):
for file in files:
if file.endswith(".mp4") or file.endswith(".avi") or file.endswith(".mkv"):
video_paths.append(os.path.join(root, file))
return video_paths
# 定义函数获取视频大小
def get_video_size(video_path):
size_str = subprocess.check_output(f"ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1:nokey=1 {video_path}", shell=True).decode("utf-8").strip()
size = int(size_str)
if size < 1024 * 1024 * 1024:
return "{:.2f}MB".format(size / (1024 * 1024))
else:
return "{:.2f}GB".format(size / (1024 * 1024 * 1024))
# 定义函数将结果输出到excel文件中
def output_to_excel(video_paths, output_file):
data = []
for path in video_paths:
duration = get_duration(path)
size = get_video_size(path)
data.append({"视频名称": os.path.basename(path), "时长": duration, "大小": size})
df = pd.DataFrame(data)
df.to_excel(output_file, index=False)
if __name__ == '__main__':
folder_path = r'C:\Users\Administrator\Desktop\视频文件' # 视频文件夹路径
output_file = r'C:\Users\Administrator\Desktop\视频文件\视频统计002.xlsx' # 输出的excel文件路径
video_paths = get_all_video_paths(folder_path)
output_to_excel(video_paths, output_file)
以下为示例视频统计结果,供大家参考。
视频名称 | 时长 | 大小 |
001.mp4 | 0小时0分7秒 | 2.35MB |
002.mp4 | 0小时0分15秒 | 3.84MB |
003.mp4 | 0小时0分23秒 | 5.73MB |
006.mp4 | 0小时0分23秒 | 5.82MB |
007.mp4 | 0小时0分16秒 | 4.00MB |