找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 1235|回复: 14

[文本处理] 使用BAT批量提取视频参数--问题已解决

[复制链接]
发表于 2026-4-20 11:25:14 | 显示全部楼层 |阅读模式
本帖最后由 5520a 于 2026-4-22 12:03 编辑

需要提取项目:1、文件名称;2、文件类型;3、文件大小;以上为属性中的常规选项,4、详细信息选项中的视频长度、帧宽度、帧高度、数据速率、总比特率、帧速率;
音频中的比特率;频道(声道);音频采样率,及文件路径。  找了很多没有找到相关的BAT文件,拜求大神
 楼主| 发表于 2026-4-20 11:28:30 | 显示全部楼层
/*&cls
@echo off
rem 获取jpg、tif图片或mp4视频的基本属性信息
mode con lines=5000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
set ext=*.mp4
set "outfile=.\info.csv"
cd /d "%~dp0"
dir /a-d/b %ext% 2>nul|cscript -nologo -e:jscript "%~f0"
echo;%#% +%$%%$%/%@% %z%
pause
exit
*/
var fso=new ActiveXObject('Scripting.FileSystemObject');
var sa=new ActiveXObject('Shell.Application');
while(!WSH.StdIn.AtEndOfStream){
    var line=WSH.StdIn.ReadLine();
    var f=fso.GetFile(line);
    var filepath=f.ParentFolder.Path;
    var filename=f.Name;
    var objFolder=sa.NameSpace(filepath);
    var objItem=objFolder.ParseName(filename);
    for(var i=0;i<=300;i++){
        var key=objFolder.GetDetailsOf(null, i);
        var value=objFolder.GetDetailsOf(objItem, i);
        if(value !='' && value != null){
            WSH.echo(key+':'+value);
        }
    }
     WSH.echo('----------------------------');
}
 楼主| 发表于 2026-4-20 11:29:55 | 显示全部楼层
5520a 发表于 2026-4-20 11:28
/*&cls
@echo off
rem 获取jpg、tif图片或mp4视频的基本属性信息

这个没有音频参数,路径,大小,并且没有导出成为表格
发表于 2026-4-20 12:26:09 | 显示全部楼层
你要指明这些参数的前后顺序及其分隔符等输出格式...
 楼主| 发表于 2026-4-20 12:43:52 | 显示全部楼层
aloha20200628 发表于 2026-4-20 12:26
你要指明这些参数的前后顺序及其分隔符等输出格式...

顺序没有要求,只要这些参数能调出,并形成表格xlsx格式既可以
发表于 2026-4-20 13:17:41 | 显示全部楼层
5520a 发表于 2026-4-20 12:43
顺序没有要求,只要这些参数能调出,并形成表格xlsx格式既可以

批处脚本通过 vbs/jscript/powershell 代码调用系统内置的 shell.application 不能完全获取 mp4/mkv/avi 等多种视频格式文件的音视频数据,须借助 ffmpeg 系列组件或 mediaInfo 等第三方(均可直接从本论坛下载)...
 楼主| 发表于 2026-4-20 13:56:04 | 显示全部楼层
aloha20200628 发表于 2026-4-20 13:17
批处脚本通过 vbs/jscript/powershell 代码调用系统内置的 shell.application 不能完全获取 mp4/mkv/avi  ...

抱歉我是小白,你说的这些我都不懂
发表于 2026-4-20 15:00:31 | 显示全部楼层
本帖最后由 ShowCode 于 2026-4-20 15:03 编辑

BAT + MediaInfo

1、下载 MediaInfo
https://mediaarea.net/download/binary/mediainfo/26.01/MediaInfo_CLI_26.01_Windows_x64.zip

2、解压缩出来的MediaInfo.exe和LIBCURL.DLL与下面的 test.bat 都放在待处理的mp4视频文件夹下


  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. set "OutFile=1.csv"
  5. echo 文件名称,文件类型,文件大小,文件路径,视频时长,视频帧宽度,视频帧高度,视频数据速率,视频总比特率,视频帧速率,音频比特率,音频频道(声道),音频采样率>"%OutFile%"
  6. for /f "delims=" %%i in ('dir /b /a-d *.mp4') do (
  7.     echo --- %%i
  8.     for /f "tokens=1-4 delims=," %%a in ('MediaInfo.exe --Inform^="Audio;%%BitRate%%,%%Channel(s)%%,%%SamplingRate%%" "%%i"') do (
  9.         set "audioBit=%%a"
  10.         set "audioChannel=%%b"
  11.         set "audioSampling=%%c"
  12.     )
  13.     for /f "tokens=1-5 delims=," %%a in ('MediaInfo.exe --Inform^="Video;%%Duration/String3%%,%%Width%%,%%Height%%,%%BitRate%%,%%FrameRate%%" "%%i"') do (
  14.         set "videoDuration=%%a"
  15.         set "videoWidth=%%b"
  16.         set "videoHeight=%%c"
  17.         set "videoBit=%%d"
  18.         set "videoFrame=%%e"
  19.     )
  20.     set /a videoTotal=videoBit+audioBit
  21.     echo %%~nxi,%%~xi,%%~zi,%%~dpi,!videoDuration!,!videoWidth!,!videoHeight!,!videoBit!,!videoTotal!,!videoFrame!,!audioBit!,!audioChannel!,!audioSampling!>>"%OutFile%"
  22. )
复制代码

评分

参与人数 1技术 +1 收起 理由
5520a + 1 感谢给帖子标题标注[已解决]字样 ...

查看全部评分

 楼主| 发表于 2026-4-20 16:25:06 | 显示全部楼层
ShowCode 发表于 2026-4-20 15:00
BAT + MediaInfo

1、下载 MediaInfo

谢谢大神,数据元全部可以提取出来了。但是提取出来的参数值与看属性里的值有些误差,怎么调整
发表于 2026-4-20 17:58:06 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-4-26 21:02 编辑

    以下代码用 utf-8 编码存为 test.bat 运行,与视频文件和 mediainfo.exe 同目录,其中调用的 mediainfo.exe 可从本论坛第三方下载 http://bcn.bathome.net/tool/mediaarea,20.03/MediaInfo.rar 落地即用,须用 20.03 版,因此版支持命令行用通配符传入批量文件可完成一次性处理
    代码会析取当前目录下的 *.mp4, *.mkv, *.avi 视频文件中所有音视频轨道所属的基本参数,汇总写入当前目录下的 all.csv 文件(utf-8 编码),其中每行参数序列根据 mediainfo.exe 的标准输出列表顺序,相应各参数的细分定义要比资源管理器中显示的属性(或用 shell.application 获取的结果)完整准确。
    备注》若某一视频文件包含多个视频轨或多个音频轨,则其参数位序会相应扩展(即视频组属性值 '视频时长, 视频比特率, 宽度, 高度, 帧率' 或音频组属性值 '音频时长, 音频比特率, 声道数, 音频采样率' 会随之增扩),与输出文件 all.csv 的行头标题有可能错位,对那些被 mediainfo 解析不完备的视频文件则只能另当别论....

  1. @echo off &chcp 65001>nul &del /q "all.csv" 2>nul &echo,等候处理...
  2. setlocal enabledelayedexpansion &set "kw=/text/menu/chapter/image/" &set "h="
  3. (echo,文件名, 类型名, 文件路径, 文件大小, 总时长, 总比特率, 视频时长, 视频比特率, 宽度, 高度, 帧率, 音频时长, 音频比特率, 声道数, 音频采样率
  4. for /f "tokens=1* delims=:" %%a in ('mediainfo *.mp4 *.avi') do (
  5.   set "a=%%a" &set "b=%%b" &set "b=!b: =!"
  6.   if /i "!a:%kw%=!" neq "!a!" goto :end
  7.   if /i "%%~nxa"=="complete name" (for /f "tokens=* delims= " %%F in ("%%b") do set/p=""%%~nxF",%%~xF,"%%~dpF",") else if /i "%%~nxa"=="file size" (set "c=1" &set/p="!b!,") else if /i "%%~nxa"=="duration" (set/p="!b!,") else if /i "%%~nxa"=="overall bit rate" (set/p="!b!,") else if /i "%%~nxa"=="bit rate mode" (if /i "!b:~,1!"=="v" set "c=" &set/p="!b!,") else if /i "%%~nxa"=="bit rate" (if defined c set/p="!b!,") else if /i "%%~nxa"=="width" (set "g=1" &set/p="!b!,") else if /i "%%~nxa"=="height" (set/p="!b!,") else if /i "%%~nxa"=="frame rate" (if defined g set/p="!b!,") else if /i "%%~nxa"=="channel(s)" (set "g=" &set/p="!b!,") else if /i "%%~nxa"=="sampling rate" (set/p="!b!,") else if /i "%%~nxa"=="general" (if not defined h (set "h=1") else echo,)
  8. ) )<nul >"all.csv"
  9. :end
  10.    type "all.csv" &echo,&pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
77七 + 1 乐于助人

查看全部评分

发表于 2026-4-21 08:25:45 | 显示全部楼层
5520a 发表于 2026-4-20 16:25
谢谢大神,数据元全部可以提取出来了。但是提取出来的参数值与看属性里的值有些误差,怎么调整 ...

请举例说明哪个属性的值有误差,代码获取的值是什么,你希望的值又是什么?
 楼主| 发表于 2026-4-22 11:21:16 | 显示全部楼层
ShowCode 发表于 2026-4-21 08:25
请举例说明哪个属性的值有误差,代码获取的值是什么,你希望的值又是什么? ...

提取的数据雨属性数据的对比请大神看图
对比.PNG
发表于 2026-4-22 11:33:47 | 显示全部楼层
5520a 发表于 2026-4-22 11:21
提取的数据雨属性数据的对比请大神看图


试试这个结果里面有没有你想要的数据速率
  1. @echo off
  2. cd /d "%~dp0"
  3. MediaInfo.exe --Full 0022.mp4 | findstr /i /c:"Bit rate"
  4. pause
复制代码
 楼主| 发表于 2026-4-22 11:54:56 | 显示全部楼层
ShowCode 发表于 2026-4-22 11:33
试试这个结果里面有没有你想要的数据速率

这个调出的信息对比,,是不是不一样的软件调取出来的都不一样,,我用了其它软件调取的信息也是与属性内的数值不一样。。。
对比2.PNG
发表于 2026-4-22 13:56:02 | 显示全部楼层
是的,总比特率=视频比特率+音频比特率,由于你这些视频文件在资源管理器获取到的2417kbps和其他软件获取到的值不一样。所以你看到的结果里面标黄的两个值都不同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-5-14 22:36

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表