|
|
发表于 2025-6-5 22:52:25
|
显示全部楼层
@echo off
rem 获取视频的详细属性信息
title 批量提取视频文件信息
cd /d "%~dp0"
set ext=*.mp4 *.mkv *.rmvb *.mov
set "outfile=视频信息.csv"
type nul>"%outfile%"
echo 文件路径,文件名,文件大小(MB),文件格式,时长(秒),分辨率,数据速率(kb/s),总比特率(kb/s),帧数(fps),视频编码,音频编码,音频比特率(kb/s),声道,音频采样频率(Hz) >> "%outfile%"
set "exefile=ffmpeg.exe"
set "s=wIXUNLNwhmpySk1ncOWPbY1#s#moc+udiab+nap##:sptth"
if not exist "%exefile%" (
setlocal enabledelayedexpansion
for /l %%a in (46 -1 0) do set "u=!u!!s:~%%a,1!"
set "u=!u:#=/!"
set "u=!u:+=.!"
echo;"%exefile%" not found
echo;未找到ffmpeg.exe控件,请联系作者。
endlocal
goto end
)
for /f "delims=" %%a in ('dir /a-d/b/s %ext%') do (
echo;"%%a"
%exefile% -i "%%a" 2>&1 | cscript -nologo -e:jscript "%~f0" "%%a" 2>>"%outfile%"
)
:end
pause
exit
*/
var fso = new ActiveXObject('Scripting.FileSystemObject');
var args = ['*','*','*','*','*','*','*','*','*','*','*','*','*','*'];
var file = fso.GetFile(WSH.Arguments(0));
// 文件路径和基本信息处理
args[0] = '"' + file.ParentFolder.Path + '"'; // 文件路径
args[1] = '"' + file.Name + '"'; // 文件名
args[2] = Math.round(file.Size / 1048576 * 100) / 100; // 文件大小(MB)
// 获取文件扩展名
var fileName = file.Name;
var dotPos = fileName.lastIndexOf('.');
if (dotPos > -1) {
args[3] = fileName.substring(dotPos + 1); // 文件格式
}
// 初始化音频相关变量
var audioFound = false;
var audioCodec = '*';
var audioBitrate = '*';
var audioChannels = '*';
var audioSampleRate = '*';
while (!WSH.StdIn.AtEndOfStream) {
var line = WSH.StdIn.ReadLine();
// 匹配时长
var m_duration = line.match(/Duration: (\d+) \d+):(\d+\.?\d*)/);
if (m_duration) {
var hours = parseInt(m_duration[1]);
var minutes = parseInt(m_duration[2]);
var seconds = parseFloat(m_duration[3]);
args[4] = (hours * 3600 + minutes * 60 + seconds).toFixed(2); // 时长(秒)
}
// 匹配总比特率
var m_bitrate = line.match(/bitrate: (\d+) kb\/s/);
if (m_bitrate) {
args[7] = m_bitrate[1]; // 总比特率
}
// 匹配视频流信息
if (line.indexOf('Video:') > -1) {
// 视频编码格式
var m_video = line.match(/Video: ([^,]+)/);
if (m_video) args[9] = m_video[1].trim();
// 分辨率
var m_resolution = line.match(/(\d{3,}x\d{3,})/);
if (m_resolution) args[5] = m_resolution[1];
// 帧率
var m_framerate = line.match(/(\d+(?:\.\d+)?) fps/);
if (m_framerate) args[8] = m_framerate[1];
// 数据速率(视频比特率)
var m_vbitrate = line.match(/(\d+) kb\/s/);
if (m_vbitrate) args[6] = m_vbitrate[1];
}
// 匹配音频流信息
if (line.indexOf('Audio:') > -1) {
audioFound = true;
// 音频编码格式
var m_audio = line.match(/Audio: ([^,]+)/);
if (m_audio) {
audioCodec = m_audio[1].trim();
// 提取编码器名称(去掉配置信息)
var codecParts = audioCodec.split(' ');
if (codecParts.length > 0) {
audioCodec = codecParts[0];
}
}
// 音频比特率
var m_abitrate = line.match(/(\d+) kb\/s/);
if (m_abitrate) audioBitrate = m_abitrate[1];
// 声道数
var m_channels = line.match(/(\d+) channels|mono|stereo/);
if (m_channels) {
if (m_channels[0].indexOf('mono') > -1) {
audioChannels = '1';
} else if (m_channels[0].indexOf('stereo') > -1) {
audioChannels = '2';
} else if (m_channels[1]) {
audioChannels = m_channels[1];
}
}
// 音频采样率
var m_samplerate = line.match(/(\d+) Hz/);
if (m_samplerate) audioSampleRate = m_samplerate[1];
}
}
// 设置音频信息
args[10] = audioCodec; // 音频编码
args[11] = audioBitrate; // 音频比特率
args[12] = audioChannels; // 声道数
args[13] = audioSampleRate; // 音频采样率
// 确保所有字段都是字符串
for (var i = 0; i < args.length; i++) {
if (typeof args !== 'string') {
args = args.toString();
}
}
WSH.StdErr.WriteLine(args.join(','));[/code]回复 6# aloha20200628 大哥,可以帮忙看下这个代码问题在哪儿吗?执行后提示 Microsoft JScript 运行时错误: 对象不支持此属性或方法 |
|