Last update: 2025-05-19
This add-in creates two script columns: AudioBitRateAvg and VideoBitRateAvg.
For folders, these columns display the average audio and video bitrates of the video files within the folder. By default, subfolders are excluded, but recursive scanning can be enabled in the script settings.
For individual files, the columns show the same values as the standard columns video.mp3bitrate
and video.datarate
.
How to set up and use
Save ColumnFolderBitrate.js.txt to ↓
%appdata%\GPSoftware\Directory Opus\Script AddIns
Toggle the columns with
Set COLUMNSTOGGLE="scp:FolderBitrate/AudioBitRateAvg(!,a,0)"
Set COLUMNSTOGGLE="scp:FolderBitrate/VideoBitRateAvg(!,a,0)"
Open the settings with
Prefs SCRIPTS=ColumnFolderBitrate.js*
Things you might enjoy reading
How to use buttons and scripts from this forum
Inspired by Average Video Bit Rate column
Similar: DurationAV (Duration columns for folders)
The script's inner workings
JScript
function OnInit(initData) {
initData.name = 'FolderBitrate';
initData.version = '2025-05-19';
initData.url = 'https://resource.dopus.com/t/folderbitrate-columns-with-average-bitrates-for-video-files-in-folders/53491';
initData.desc = 'Display Average Audio and Video Bit Rate for folders.';
initData.default_enable = true;
initData.min_version = '13.0';
initData.config_groups = DOpus.Create().OrderedMap();
initData.config_desc = DOpus.Create().OrderedMap();
initData.config = DOpus.Create().OrderedMap();
initData.config_group_order = DOpus.Create().Vector('Misc');
AddConfig('recursive', 'Misc', 'Include subfolders in calculation', DOpus.Create().Vector(0, 'no', 'yes'));
function AddConfig(name, group, desc, value) {
if (group) initData.config_groups.set(name, group);
if (desc) initData.config_desc.set(name, desc);
initData.config.set(name, value);
}
}
function OnAddColumns(addColData) {
var col = addColData.AddColumn();
col.name = 'AudioBitRateAvg';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'double';
col.multicol = true;
var col = addColData.AddColumn();
col.name = 'VideoBitRateAvg';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'double';
col.multicol = true;
}
function OnColumn(scriptColData) {
var item = scriptColData.item;
var bitrateAudio = 0;
var bitrateVideo = 0;
var countAudio = 0;
var countVideo = 0;
var flags = Script.config.recursive ? 'r' : '';
if (item.is_dir) {
var folderEnum = DOpus.FSUtil().ReadDir(item, flags);
while (!folderEnum.complete) {
var folderItem = folderEnum.Next();
var meta = folderItem.metadata;
if (meta != 'video') continue;
var d = meta.video.mp3bitrate;
if (typeof d == 'number') {
bitrateAudio += d;
countAudio++;
}
var d = meta.video.datarate;
if (typeof d == 'number') {
bitrateVideo += d;
countVideo++;
}
}
folderEnum.Close();
} else {
var meta = item.metadata;
if (meta == 'video') {
bitrateAudio = meta.audio.mp3bitrate;
if (typeof bitrateAudio != 'number') bitrateAudio = 0;
countAudio = 1;
bitrateVideo = meta.video.datarate;
if (typeof bitrateVideo != 'number') bitrateVideo = 0;
countVideo = 1;
}
}
scriptColData.columns('AudioBitRateAvg').value = (countAudio ? bitrateAudio / countAudio : 0).toFixed(1);
scriptColData.columns('VideoBitRateAvg').value = (countVideo ? bitrateVideo / countVideo : 0).toFixed(1);
}