You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Win10技术专家协助:自动化按分辨率变化分割视频

实现基于分辨率变化的视频分割自动化方案(Win10环境)

核心思路:用FFmpeg检测分辨率断点 + 批处理/拖放执行

Lord Neckbeard的方案核心是检测视频流中分辨率突变的时间点,然后用这些时间点分割视频。我们可以用FFmpeg完成分辨率检测+分割的全流程,不管是单文件拖放还是批量处理目录都能轻松实现。


第一步:准备工具

  • 下载并解压FFmpeg到本地(比如C:\ffmpeg\bin),把这个路径添加到系统环境变量PATH中,这样命令行能直接调用ffmpeg和ffprobe工具。

方案1:单文件拖放批处理(直接拖视频到bat文件)

创建一个名为SplitByResolution.bat的文件,复制以下内容进去:

@echo off
setlocal enabledelayedexpansion

:: 检查是否有拖入的文件
if "%~1"=="" (
    echo 请将视频文件拖放到本批处理文件上!
    pause
    exit /b 1
)

set "INPUT_FILE=%~f1"
set "OUTPUT_PREFIX=%~dpn1"

:: 用ffprobe提取每帧的时间戳和分辨率,保存到临时文件
ffprobe -v error -select_streams v:0 -show_entries frame=pkt_pts_time,width,height -of csv=p=0 "%INPUT_FILE%" > temp_resolution.csv

:: 初始化变量
set "prev_width="
set "prev_height="
set "start_time=0"
set "segment_count=1"

:: 遍历提取到的数据,检测分辨率变化
for /f "tokens=1,2,3 delims=," %%a in (temp_resolution.csv) do (
    set "current_time=%%a"
    set "current_width=%%b"
    set "current_height=%%c"

    :: 第一帧仅用于初始化基准分辨率
    if not defined prev_width (
        set "prev_width=!current_width!"
        set "prev_height=!current_height!"
        continue
    )

    :: 检测到分辨率变化时执行分割
    if not "!current_width!!current_height!"=="!prev_width!!prev_height!" (
        echo 正在分割片段 !segment_count!:从 !start_time! 到 !current_time!
        ffmpeg -ss !start_time! -to !current_time! -i "%INPUT_FILE%" -c copy "%OUTPUT_PREFIX%_seg!segment_count!.mp4"
        set "start_time=!current_time!"
        set /a segment_count+=1
        set "prev_width=!current_width!"
        set "prev_height=!current_height!"
    )
)

:: 分割最后一段视频
echo 正在分割最后一段:从 !start_time! 到视频结束
ffmpeg -ss !start_time! -i "%INPUT_FILE%" -c copy "%OUTPUT_PREFIX%_seg!segment_count!.mp4"

:: 清理临时文件
del temp_resolution.csv

echo 分割完成!所有片段保存在原文件目录下。
pause

使用方法:直接把你的Example.flv或其他视频文件拖到这个bat文件上,等待执行完成即可。


方案2:批量处理整个目录的视频

创建BatchSplitByResolution.bat文件,内容如下:

@echo off
setlocal enabledelayedexpansion

:: 设置要处理的目录(默认当前目录,可改成你需要的路径,比如"D:\Videos")
set "TARGET_DIR=%cd%"

:: 遍历目录下的常见视频格式(可自行添加.flv/.mov等格式)
for %%f in ("%TARGET_DIR%\*.mp4" "%TARGET_DIR%\*.flv" "%TARGET_DIR%\*.mkv") do (
    echo 开始处理:%%f
    call :ProcessSingleFile "%%f"
    echo %%f 处理完成
    echo.
)

echo 所有文件处理完毕!
pause
exit /b 0

:: 定义处理单个文件的子过程
:ProcessSingleFile
set "INPUT_FILE=%~1"
set "OUTPUT_PREFIX=%~dpn1"

ffprobe -v error -select_streams v:0 -show_entries frame=pkt_pts_time,width,height -of csv=p=0 "%INPUT_FILE%" > temp_resolution.csv

set "prev_width="
set "prev_height="
set "start_time=0"
set "segment_count=1"

for /f "tokens=1,2,3 delims=," %%a in (temp_resolution.csv) do (
    set "current_time=%%a"
    set "current_width=%%b"
    set "current_height=%%c"

    if not defined prev_width (
        set "prev_width=!current_width!"
        set "prev_height=!current_height!"
        continue
    )

    if not "!current_width!!current_height!"=="!prev_width!!prev_height!" (
        echo 分割片段 !segment_count!
        ffmpeg -ss !start_time! -to !current_time! -i "%INPUT_FILE%" -c copy "%OUTPUT_PREFIX%_seg!segment_count!.mp4"
        set "start_time=!current_time!"
        set /a segment_count+=1
        set "prev_width=!current_width!"
        set "prev_height=!current_height!"
    )
)

ffmpeg -ss !start_time! -i "%INPUT_FILE%" -c copy "%OUTPUT_PREFIX%_seg!segment_count!.mp4"
del temp_resolution.csv
exit /b 0

使用方法:把这个bat文件放到要处理的视频目录下,双击运行即可自动处理所有指定格式的视频。


常见问题排查

  1. FFmpeg命令报错:检查环境变量是否添加正确,或者直接在bat里写FFmpeg的绝对路径(比如C:\ffmpeg\bin\ffmpeg.exe)。
  2. 分辨率检测误触发:如果视频有几帧的临时分辨率波动,可以修改逻辑——比如添加帧计数器,只有连续3帧以上分辨率变化才判定为分割点,避免分割出极小的片段。
  3. PowerShell方案遗留问题:如果之前的PowerShell代码有具体错误信息,可以贴出来针对性调整,但上面的批处理方案更适配Win10的自动化场景,逻辑更简洁。

内容的提问来源于stack exchange,提问作者EverT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:46:23