拷贝和下载的视频偶尔会有损坏的情况,发现之后往往已经来不及了
有没有办法批量检测视频,寻找可能在播放中发生严重错误的情况?
拷贝和下载的视频偶尔会有损坏的情况,发现之后往往已经来不及了
有没有办法批量检测视频,寻找可能在播放中发生严重错误的情况?
配置好 ffmpeg 之后可以试试用以下 PowerShell 命令依次检查
# cd <path-to-videos> # <path-to-videos> 替换成视频所在的文件夹
Get-ChildItem . -File | ForEach-Object { Write-Host "Checking $_"; ffmpeg -hide_banner -loglevel error -i $_.Name -f null -codec copy - }
PS. 可以在存放视频的文件夹用 Shift + 右键打开 PowerShell
md5验证一下?
简单写了个批处理,暂时是通过把你要检测的文件放文件夹里拖到批处理文件上。但这种检测比较简单,速度快但是有一些错误无法被发现。被中途截断的文件检测应该没问题。
*会使用winget下载ffmpeg,如果不再使用可以winget uninstall ffmpeg卸载。
@echo off
setlocal enabledelayedexpansion
title 视频完整性检测
set "target_folder=!cmdcmdline:~0,-1!"
set "target_folder=!target_folder:*" =!"
echo 正在检测 FFmpeg 是否已安装...
ffprobe -version > nul 2>&1
if errorlevel 1 (
echo FFmpeg 未安装,正在尝试使用 winget 安装...
winget install ffmpeg
if errorlevel 1 (
echo winget 安装 FFmpeg 失败!
echo 请手动安装 FFmpeg 或检查网络连接。
pause
exit /b 1
)
)
echo FFmpeg 已安装,开始检测 "%target_folder%" 目录下的视频文件完整性...
cls
set count=0
set fail_count=0
set fail_list=
for %%a in ("%target_folder%\*.mp4" "%target_folder%\*.avi" "%target_folder%\*.mkv" "%target_folder%\*.mov" "%target_folder%\*.wmv") do (
set /a count+=1
ffprobe -v error -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "%%a" > nul 2>&1
if errorlevel 1 (
set /a fail_count+=1
set fail_list=!fail_list!%%a
echo 失败 ········ %%a
) else (
echo 成功 ········ %%a
)
)
echo.
if %count% == 0 (
echo 请将需要检测的文件夹拖入到本批处理文件上。
) else (
echo 共检测 %count% 个文件,其中 %fail_count% 个失败。
)
echo.
pause
这个确实是可以的,
只是不是太好操作,有些视频可能原版就是有问题的
一般需求只是需要播放起来没大问题就可以了,坏几帧可以忍受,丢一大段可能受不了
谢谢,原来ffmpeg还可以这么用,学习了
这样的话应该必须实际decode才能知道有没有问题了。