视频时间统计:一站式解决方案
简要介绍
在日常生活中,我们经常需要统计一堆视频的总时长,例如策划一个电影马拉松,或者计算一系列教程视频的总时间以便合理安排学习计划。手动计算这些视频的总时长既繁琐又容易出错。今天,我们将介绍一个用 Python 编写的小工具,它可以自动统计指定目录下所有视频文件的总时长。无论你是普通用户、效率达人,还是程序员,这个工具都能为你带来极大的便利。
功能和应用场景
视频时间统计的核心功能是遍历指定目录及其子目录中的所有视频文件,自动计算并汇总它们的总时长。它支持多种常见的视频文件格式,并提供中文和英文两种语言选项,适合不同用户的需求。
应用场景
- 电影爱好者:快速统计电影收藏的总时长,方便安排观影计划。
- 学习者:计算一系列学习视频的总时间,合理规划学习时间。
- 内容创作者:了解素材视频的总时长,便于剪辑和发布。
- 效率达人:快速统计工作中需要观看或处理的视频总时长,优化工作时间。
程序、代码资源下载
关注公众号,发送 “视频时长统计”,会发送百度云链接,保存下载即可。
详细代码示例
下面是完整的代码示例,我们将逐步解释每一部分的实现。
import os
import ffmpeg
def get_video_duration(file_path):
try:
probe = ffmpeg.probe(file_path)
duration = float(probe['format']['duration'])
return duration
except Exception as e:
print(f"Error processing file {file_path}: {e}")
return 0
def get_total_duration(directory):
total_duration = 0
video_extensions = ('.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv', '.mpeg', '.mpg', '.webm') # Add more extensions as needed
for root, _, files in os.walk(directory):
for file in files:
if file.lower().endswith(video_extensions):
file_path = os.path.join(root, file)
total_duration += get_video_duration(file_path)
return total_duration
def format_duration(seconds, language):
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
seconds = int(seconds % 60)
if language == 'en':
return f"{hours} hours, {minutes} minutes, {seconds} seconds"
else:
return f"{hours}小时, {minutes}分钟, {seconds}秒"
if __name__ == "__main__":
language = 'zh' # Default to Chinese
lang_choice = input("选择语言/Choose Language: 1-中文 2-English (Default: 中文): ")
if lang_choice == '2':
language = 'en'
while True:
if language == 'en':
directory = input("Enter the directory path (or 'exit' to quit): ")
else:
directory = input("请输入目录路径(输入 'exit' 退出): ")
if directory.lower() == 'exit':
break
if not os.path.isdir(directory):
if language == 'en':
print("Invalid directory. Please try again.")
else:
print("无效的目录。请重试。")
continue
total_duration = get_total_duration(directory)
formatted_duration = format_duration(total_duration, language)
if language == 'en':
print(f"Total duration of all videos: {formatted_duration}")
else:
print(f"所有视频的总时长: {formatted_duration}")
代码解析
-
导入必要的库:
import os import ffmpeg
我们需要
os
库来遍历目录,ffmpeg
库来获取视频文件的时长。 -
获取视频时长的函数:
def get_video_duration(file_path): try: probe = ffmpeg.probe(file_path) duration = float(probe['format']['duration']) return duration except Exception as e: print(f"Error processing file {file_path}: {e}") return 0
这个函数使用 ffmpeg 获取视频文件的时长,并处理可能出现的错误。
-
获取目录下所有视频总时长的函数:
def get_total_duration(directory): total_duration = 0 video_extensions = ('.mp4', '.avi', '.mkv', '.mov', '.wmv', '.flv', '.mpeg', '.mpg', '.webm') # Add more extensions as needed for root, _, files in os.walk(directory): for file in files: if file.lower().endswith(video_extensions): file_path = os.path.join(root, file) total_duration += get_video_duration(file_path) return total_duration
这个函数遍历指定目录及其子目录中的所有视频文件,并累加它们的时长。
-
时长格式化函数:
def format_duration(seconds, language): hours = int(seconds // 3600) minutes = int((seconds % 3600) // 60) seconds = int(seconds % 60) if language == 'en': return f"{hours} hours, {minutes} minutes, {seconds} seconds" else: return f"{hours}小时, {minutes}分钟, {seconds}秒"
这个函数将总时长从秒格式化为小时、分钟和秒的形式,并根据语言选项返回相应的字符串。
-
主程序部分:
if __name__ == "__main__": language = 'zh' # Default to Chinese lang_choice = input("选择语言/Choose Language: 1-中文 2-English (Default: 中文): ") if lang_choice == '2': language = 'en' while True: if language == 'en': directory = input("Enter the directory path (or 'exit' to quit): ") else: directory = input("请输入目录路径(输入 'exit' 退出): ") if directory.lower() == 'exit': break if not os.path.isdir(directory): if language == 'en': print("Invalid directory. Please try again.") else: print("无效的目录。请重试。") continue total_duration = get_total_duration(directory) formatted_duration = format_duration(total_duration, language) if language == 'en': print(f"Total duration of all videos: {formatted_duration}") else: print(f"所有视频的总时长: {formatted_duration}")
主程序部分首先让用户选择语言,然后进入循环,等待用户输入目录路径,计算并显示该目录中所有视频文件的总时长。
将 Python 脚本打包成可执行文件
为了方便在 Windows 上运行,我们可以使用 PyInstaller 将 Python 脚本打包成可执行文件。
-
将脚本保存为文件:
将上述代码保存到一个文件中,例如video_duration_calculator.py
。 -
使用 PyInstaller 打包:
打开命令提示符(CMD)并导航到脚本所在的目录,然后运行以下命令:pyinstaller --onefile video_duration_calculator.py
这个命令会生成一个
dist
目录,里面包含video_duration_calculator.exe
。
使用该程序的优势和注意事项
优势
- 自动化:无需手动计算视频总时长,节省时间和精力。
- 多语言支持:提供中文和英文两种语言选项,适合不同用户。
- 兼容性:支持多种常见的视频文件格式。
注意事项
- 准确性:确保视频文件格式支持 ffmpeg,以保证时长计算的准确性。
- 目录结构:程序会遍历指定目录及其子目录,请确保目录结构清晰,避免不必要的文件混淆。
总结与扩展阅读
通过这篇文章,我们详细介绍了如何编写一个 Python 工具来统计指定目录下所有视频文件的总时长,并将其打包成可执行文件,方便用户在 Windows 上使用。这个工具不仅适合普通用户和效率达人,也为程序员提供了一个很好的练习项目。
扩展阅读
- ffmpeg 官方文档:了解 ffmpeg 的更多功能和用法。
- PyInstaller 官方文档:学习如何将 Python 脚本打包成可执行文件。
- Python 官网:深入学习 Python 编程语言。
希望这篇文章能对你有所帮助,欢迎大家在评论区分享使用体验或提出问题!