基于FFMPEG工具箱实现视频时长的统计任务,具体代码如下所示:
import subprocess
import os
#--------------------------------------------#
# 定义一个函数来获取MP4文件的时长,并保留两位小数
#--------------------------------------------#
def get_duration(file_path):
try:
result = subprocess.run(['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1', file_path],
stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
if result.returncode == 0:
duration = float(result.stdout.strip())
return round(duration, 2)
else:
return None
except Exception as e:
print(f"Error getting duration for {file_path}: {e}")
return None
#-------------------------#
# 定义文件夹路径
#-------------------------#
folder_path = 'your_folder_path'
#---------------------------------#
# 获取文件夹下的所有MP4文件
#---------------------------------#
mp4_files = [f for f in os.listdir(folder_path) if f.endswith('.mp4')]
if not mp4_files:
print("No MP4 files found in the folder.")
else:
#--------------------------#
# 此处最短时长的赋值为正无穷大
#--------------------------#
total_duration = 0
min_duration = float('inf')
max_duration = 0
#-----------------------------------------------#
# 遍历所有MP4文件并通过上述定义的使用FFmpeg统计时长信息
#-----------------------------------------------#
for file_name in mp4_files:
file_path = os.path.join(folder_path, file_name)
duration = get_duration(file_path)
if duration is not None:
total_duration += duration
if duration < min_duration and duration > 0:
min_duration = duration
if duration > max_duration:
max_duration = duration
#-------------------#
# 计算平均时长
#-------------------#
num_files = len(mp4_files)
if num_files > 0:
average_duration = total_duration / num_files
else:
average_duration = 0
#----------------------------#
# 打印统计信息,并保留两位小数
#----------------------------#
print(folder_path)
print(f"Number of MP4 Files: {num_files}")
print(f"Total Duration: {total_duration:.2f} seconds")
print(f"Shortest Duration: {min_duration:.2f} seconds")
print(f"Longest Duration: {max_duration:.2f} seconds")
print(f"Average Duration: {average_duration:.2f} seconds")