视频时间统计:一站式解决方案

内容纲要

视频时间统计:一站式解决方案

简要介绍

在日常生活中,我们经常需要统计一堆视频的总时长,例如策划一个电影马拉松,或者计算一系列教程视频的总时间以便合理安排学习计划。手动计算这些视频的总时长既繁琐又容易出错。今天,我们将介绍一个用 Python 编写的小工具,它可以自动统计指定目录下所有视频文件的总时长。无论你是普通用户、效率达人,还是程序员,这个工具都能为你带来极大的便利。

功能和应用场景

视频时间统计的核心功能是遍历指定目录及其子目录中的所有视频文件,自动计算并汇总它们的总时长。它支持多种常见的视频文件格式,并提供中文和英文两种语言选项,适合不同用户的需求。

应用场景

  1. 电影爱好者:快速统计电影收藏的总时长,方便安排观影计划。
  2. 学习者:计算一系列学习视频的总时间,合理规划学习时间。
  3. 内容创作者:了解素材视频的总时长,便于剪辑和发布。
  4. 效率达人:快速统计工作中需要观看或处理的视频总时长,优化工作时间。

程序、代码资源下载

关注公众号,发送 “视频时长统计”,会发送百度云链接,保存下载即可。

详细代码示例

下面是完整的代码示例,我们将逐步解释每一部分的实现。

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

代码解析

  1. 导入必要的库

    import os
    import ffmpeg

    我们需要 os 库来遍历目录,ffmpeg 库来获取视频文件的时长。

  2. 获取视频时长的函数

    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 获取视频文件的时长,并处理可能出现的错误。

  3. 获取目录下所有视频总时长的函数

    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

    这个函数遍历指定目录及其子目录中的所有视频文件,并累加它们的时长。

  4. 时长格式化函数

    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}秒"

    这个函数将总时长从秒格式化为小时、分钟和秒的形式,并根据语言选项返回相应的字符串。

  5. 主程序部分

    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 脚本打包成可执行文件。

  1. 将脚本保存为文件
    将上述代码保存到一个文件中,例如 video_duration_calculator.py

  2. 使用 PyInstaller 打包
    打开命令提示符(CMD)并导航到脚本所在的目录,然后运行以下命令:

    pyinstaller --onefile video_duration_calculator.py

    这个命令会生成一个 dist 目录,里面包含 video_duration_calculator.exe

使用该程序的优势和注意事项

优势

  • 自动化:无需手动计算视频总时长,节省时间和精力。
  • 多语言支持:提供中文和英文两种语言选项,适合不同用户。
  • 兼容性:支持多种常见的视频文件格式。

注意事项

  • 准确性:确保视频文件格式支持 ffmpeg,以保证时长计算的准确性。
  • 目录结构:程序会遍历指定目录及其子目录,请确保目录结构清晰,避免不必要的文件混淆。

总结与扩展阅读

通过这篇文章,我们详细介绍了如何编写一个 Python 工具来统计指定目录下所有视频文件的总时长,并将其打包成可执行文件,方便用户在 Windows 上使用。这个工具不仅适合普通用户和效率达人,也为程序员提供了一个很好的练习项目。

扩展阅读

希望这篇文章能对你有所帮助,欢迎大家在评论区分享使用体验或提出问题!

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward