基于Python实现MP4文件格式验证工具

Written by

in

文章目录
  • 本工具用于检查MP4文件格式的正确性,通过解析文件结构、编码信息等关键要素,判断文件是否符合MP4格式规范,是否存在损坏或不兼容问题。适用于视频处理、文件校验等场景,帮助快速识别异常MP4文件。
  • 工具通过以下维度验证MP4文件有效性: 基础检查:验证文件是否存在、是否为有效文件、是否为空文件 格式校验:确认文件是否为MP4/MPEG-4容器格式 轨道检查:检测是否包含视频轨道(MP4文件必需) 编码兼容性:验证视频/音频编码是否为MP4支持的主流编码 信息提取:获取文件的格式、编码、分辨率、时长等详细信息
  • Python版本:Python 3.6及以上 依赖库:pymediainfo(用于解析媒体文件信息) 安装命令:pip install pymediainfo
  • import os from pymediainfo import MediaInfo def is_valid_mp4(file_path): “”” 使用pymediainfo检查MP4文件格式是否正确 参数: file_path: MP4文件路径 返回: tuple: (是否有效, 错误信息/详细信息) “”” # 基础检查 if not os.path.exists(file_path): return False, “文件不存在” if not os.path.isfile(file_path): return False, “路径不是一个文件” file_size = os.path.getsize(file_path) if file_size == 0: return False, “文件大小为0字节,可能为空文件” try: # 分析媒体信息 media_info = MediaInfo.parse(file_path) # 获取文件格式信息 general_track = next(t for t in media_info.tracks if t.track_type == “General”) format_name = general_track.format if format_name not in [“MPEG-4”, “MP4″]: return False, f”不是MP4格式,实际格式为: {format_name}” # 检查是否包含视频轨道 video_tracks = [t for t in media_info.tracks if t.track_type == “Video”] if not video_tracks: return False, “文件不包含视频轨道” video_track = video_tracks[0] video_codec = video_track.codec_id or video_track.codec # 检查视频编码兼容性 supported_video_codecs = [“avc1”, “hev1”, “hvc1”, “mp4v”, “vp09″] # MP4常见视频编码 if not any(codec in video_codec.lower() for codec in supported_video_codecs): return False, f”不支持的视频编码: {video_codec} (支持: {‘, ‘.join(supported_video_codecs)})” # 检查音频轨道(如果存在) audio_tracks = [t for t in media_info.tracks if t.track_type == “Audio”] if audio_tracks: audio_codec = audio_tracks[0].codec_id or audio_tracks[0].codec supported_audio_codecs = [“mp4a”, “mp3”, “ac-3”, “opus”] # MP4常见音频编码 if not any(codec in audio_codec.lower() for codec in supported_audio_codecs): return False, f”不支持的音频编码: {audio_codec} (支持: {‘, ‘.join(supported_audio_codecs)})” # 收集详细信息 details = { “格式”: format_name, “视频编码”: video_codec, “分辨率”: f”{video_track.width}x{video_track.height}”, “时长”: f”{video_track.duration / 1000:.2f}秒”, “文件大小”: f”{file_size / (1024 * 1024):.2f}MB” } return True, f”MP4格式正确。详细信息: {details}” except StopIteration: return False, “无法解析文件结构,可能不是媒体文件” except Exception as e: return False, f”格式错误或文件损坏: {str(e)}” if __name__ == “__main__”: # 替换为你的MP4文件路径 mp4_file = “D:\VID_1931_040_ouput1.mp4″ valid, message = is_valid_mp4(mp4_file) print(f”检查结果: {‘有效’ if valid else ‘无效’}”) print(f”详情: {message}”) 效果如下
  • 工具默认支持的MP4兼容编码: 视频编码: avc1(H.264) hev1/hvc1(H.265/HEVC) mp4v(MPEG-4视频) vp09(VP9) 音频编码: mp4a(AAC) mp3(MP3) ac-3(AC-3) opus(Opus) 如需扩展支持的编码,可修改代码中supported_video_codecs和supported_audio_codecs列表。
  • 工具仅验证文件格式规范性,不保证文件一定能正常播放(部分编码兼容但播放器不支持的情况需额外测试) 对于超大文件(GB级),解析时间可能较长,建议耐心等待 网络路径或共享文件可能因权限问题导致解析失败,建议先复制到本地再检查 若出现pymediainfo相关错误,可尝试重新安装依赖:pip uninstall pymediainfo && pip install pymediainfo 通过本工具,可快速判断MP4文件是否符合格式规范,为视频处理、存储管理等场景提供可靠的格式校验支持。 到此这篇关于基于Python实现MP4文件格式验证工具的文章就介绍到这了,更多相关Python MP4文件格式验证内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: 使用Python将TS文件转换为MP4的操作方法 Python将MP4视频转换为GIF图像的三种方法 Python实现统计mp4/avi视频的时长 Python实现将MP4视频转化为GIF图像 基于Python实现合并多张图片转成mp4视频 python如何将图片生成视频MP4 通过Python将MP4视频转换为GIF动画
  • 目录
    • 工具概述
    • 功能说明
    • 环境依赖
    • 完整代码
    • 使用方法
      • 1. 代码结构
      • 2. 运行步骤
    • 返回结果说明
      • 1. 正常结果
      • 2. 异常结果
    • 支持的编码格式
      • 注意事项

        本工具用于检查MP4文件格式的正确性,通过解析文件结构、编码信息等关键要素,判断文件是否符合MP4格式规范,是否存在损坏或不兼容问题。适用于视频处理、文件校验等场景,帮助快速识别异常MP4文件。

        工具通过以下维度验证MP4文件有效性:

        • 基础检查:验证文件是否存在、是否为有效文件、是否为空文件
        • 格式校验:确认文件是否为MP4/MPEG-4容器格式
        • 轨道检查:检测是否包含视频轨道(MP4文件必需)
        • 编码兼容性:验证视频/音频编码是否为MP4支持的主流编码
        • 信息提取:获取文件的格式、编码、分辨率、时长等详细信息

        Python版本:Python 3.6及以上

        依赖库:pymediainfo(用于解析媒体文件信息)

        安装命令:pip install pymediainfo

        import os
        from pymediainfo import MediaInfo
        
        
        def is_valid_mp4(file_path):
            """
            使用pymediainfo检查MP4文件格式是否正确
        
            参数:
                file_path: MP4文件路径
        
            返回:
                tuple: (是否有效, 错误信息/详细信息)
            """
            # 基础检查
            if not os.path.exists(file_path):
                return False, "文件不存在"
        
            if not os.path.isfile(file_path):
                return False, "路径不是一个文件"
        
            file_size = os.path.getsize(file_path)
            if file_size == 0:
                return False, "文件大小为0字节,可能为空文件"
        
            try:
                # 分析媒体信息
                media_info = MediaInfo.parse(file_path)
        
                # 获取文件格式信息
                general_track = next(t for t in media_info.tracks if t.track_type == "General")
                format_name = general_track.format
        
                if format_name not in ["MPEG-4", "MP4"]:
                    return False, f"不是MP4格式,实际格式为: {format_name}"
        
                # 检查是否包含视频轨道
                video_tracks = [t for t in media_info.tracks if t.track_type == "Video"]
                if not video_tracks:
                    return False, "文件不包含视频轨道"
        
                video_track = video_tracks[0]
                video_codec = video_track.codec_id or video_track.codec
        
                # 检查视频编码兼容性
                supported_video_codecs = ["avc1", "hev1", "hvc1", "mp4v", "vp09"]  # MP4常见视频编码
                if not any(codec in video_codec.lower() for codec in supported_video_codecs):
                    return False, f"不支持的视频编码: {video_codec} (支持: {', '.join(supported_video_codecs)})"
        
                # 检查音频轨道(如果存在)
                audio_tracks = [t for t in media_info.tracks if t.track_type == "Audio"]
                if audio_tracks:
                    audio_codec = audio_tracks[0].codec_id or audio_tracks[0].codec
                    supported_audio_codecs = ["mp4a", "mp3", "ac-3", "opus"]  # MP4常见音频编码
                    if not any(codec in audio_codec.lower() for codec in supported_audio_codecs):
                        return False, f"不支持的音频编码: {audio_codec} (支持: {', '.join(supported_audio_codecs)})"
        
                # 收集详细信息
                details = {
                    "格式": format_name,
                    "视频编码": video_codec,
                    "分辨率": f"{video_track.width}x{video_track.height}",
                    "时长": f"{video_track.duration / 1000:.2f}秒",
                    "文件大小": f"{file_size / (1024 * 1024):.2f}MB"
                }
        
                return True, f"MP4格式正确。详细信息: {details}"
        
            except StopIteration:
                return False, "无法解析文件结构,可能不是媒体文件"
            except Exception as e:
                return False, f"格式错误或文件损坏: {str(e)}"
        
        
        if __name__ == "__main__":
            # 替换为你的MP4文件路径
            mp4_file = "D:\VID_1931_040_ouput1.mp4"
        
            valid, message = is_valid_mp4(mp4_file)
            print(f"检查结果: {'有效' if valid else '无效'}")
            print(f"详情: {message}")
        
        

        效果如下

        工具核心函数为is_valid_mp4(file_path),接收MP4文件路径作为参数,返回元组(是否有效, 信息描述)

        • 第一个返回值:布尔值(True表示格式正确,False表示异常)
        • 第二个返回值:字符串(错误原因或格式详情)

        (1)将工具代码保存为check_mp4.py

        (2)修改代码中if __name__ == "__main__":部分的mp4_file变量,设置待检查的MP4文件路径:

        mp4_file = "你的MP4文件路径"  # 例如:"D:\test.mp4" 或 "/home/user/video.mp4"
        

        (3)运行脚本:python check_mp4.py

        (4)查看输出结果,判断文件格式是否正确

        当文件格式正确时,输出示例:

        检查结果: 有效
        详情: MP4格式正确。详细信息: {'格式': 'MPEG-4', '视频编码': 'avc1', '分辨率': '1920×1080', '时长': '30.50秒', '文件大小': '25.60MB'}

        包含的关键信息:

        • 格式:文件容器格式(如MPEG-4)
        • 视频编码:视频流使用的编码(如avc1对应H.264)
        • 分辨率:视频宽×高(如1920×1080)
        • 时长:视频总时长(单位:秒)
        • 文件大小:文件占用存储空间(单位:MB)

        常见异常情况及输出示例:

        • 文件不存在:检查结果: 无效 详情: 文件不存在
        • 非MP4格式:检查结果: 无效 详情: 不是MP4格式,实际格式为: AVI
        • 无视频轨道:检查结果: 无效 详情: 文件不包含视频轨道
        • 编码不兼容:检查结果: 无效 详情: 不支持的视频编码: vp8 (支持: avc1, hev1, hvc1, mp4v, vp09)
        • 文件损坏:检查结果: 无效 详情: 格式错误或文件损坏: 无法解析媒体信息

        工具默认支持的MP4兼容编码:

        视频编码

        • avc1(H.264)
        • hev1/hvc1(H.265/HEVC)
        • mp4v(MPEG-4视频)
        • vp09(VP9)

        音频编码

        • mp4a(AAC)
        • mp3(MP3)
        • ac-3(AC-3)
        • opus(Opus)

        如需扩展支持的编码,可修改代码中supported_video_codecssupported_audio_codecs列表。

        • 工具仅验证文件格式规范性,不保证文件一定能正常播放(部分编码兼容但播放器不支持的情况需额外测试)
        • 对于超大文件(GB级),解析时间可能较长,建议耐心等待
        • 网络路径或共享文件可能因权限问题导致解析失败,建议先复制到本地再检查
        • 若出现pymediainfo相关错误,可尝试重新安装依赖:pip uninstall pymediainfo && pip install pymediainfo

        通过本工具,可快速判断MP4文件是否符合格式规范,为视频处理、存储管理等场景提供可靠的格式校验支持。

        到此这篇关于基于Python实现MP4文件格式验证工具的文章就介绍到这了,更多相关Python MP4文件格式验证内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

        您可能感兴趣的文章:

        • 使用Python将TS文件转换为MP4的操作方法
        • Python将MP4视频转换为GIF图像的三种方法
        • Python实现统计mp4/avi视频的时长
        • Python实现将MP4视频转化为GIF图像
        • 基于Python实现合并多张图片转成mp4视频
        • python如何将图片生成视频MP4
        • 通过Python将MP4视频转换为GIF动画

        站内搜索