This add-in creates six custom columns: DurationAV, DurationAudio, DurationVideo, DurationAVAvg, DurationAudioAvg, and DurationVideoAvg.
Like the built-in duration column, these columns display the lengths of audio and video files. However, unlike the built-in column, they also work for folders, showing the sum of durations for all files within each folder (non-recursively).
The DurationAV column represents the combined total of DurationAudio and DurationVideo.
DurationAVAvg, DurationAudioAvg, and DurationVideoAvg display the average duration per valid file.
How to set up and use
Save ColumnDurationAV.js.txt toββββ
%appdata%\GPSoftware\Directory Opus\Script AddIns
Toggle the columns with
Set COLUMNSTOGGLE="duration(!,a,0)"
Set COLUMNSTOGGLE="scp:DurationAV/DurationAV(!,a,0)"
Set COLUMNSTOGGLE="scp:DurationAV/DurationAVAvg(!,a,0)"
Set COLUMNSTOGGLE="scp:DurationAV/DurationAudio(!,a,0)"
Set COLUMNSTOGGLE="scp:DurationAV/DurationAudioAvg(!,a,0)"
Set COLUMNSTOGGLE="scp:DurationAV/DurationVideo(!,a,0)"
Set COLUMNSTOGGLE="scp:DurationAV/DurationVideoAvg(!,a,0)"
Things you might enjoy reading
How to use buttons and scripts from this forum
The script's inner workings
JScript
function OnInit(initData) {
initData.name = 'DurationAV';
initData.version = '2024-11-14';
initData.url = 'https://resource.dopus.com/t/durationav-duration-columns-for-folders/42701';
initData.desc = 'Display duration for folders.';
initData.default_enable = true;
initData.min_version = '13.0';
}
function OnAddColumns(addColData) {
var col = addColData.AddColumn();
col.name = 'DurationAV';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'duration';
col.multicol = true;
var col = addColData.AddColumn();
col.name = 'DurationAudio';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'duration';
col.multicol = true;
var col = addColData.AddColumn();
col.name = 'DurationVideo';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'duration';
col.multicol = true;
var col = addColData.AddColumn();
col.name = 'DurationAVAvg';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'duration';
col.multicol = true;
var col = addColData.AddColumn();
col.name = 'DurationAudioAvg';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'duration';
col.multicol = true;
var col = addColData.AddColumn();
col.name = 'DurationVideoAvg';
col.method = 'OnColumn';
col.justify = 'right';
col.type = 'duration';
col.multicol = true;
}
function OnColumn(scriptColData) {
var item = scriptColData.item;
var durationAudio = 0;
var durationVideo = 0;
var countAudio = 0;
var countVideo = 0;
if (item.is_dir) {
var folderEnum = DOpus.FSUtil().ReadDir(item);
while (!folderEnum.complete) {
var folderItem = folderEnum.Next();
var meta = folderItem.metadata;
if (meta == 'audio') {
var d = meta.audio.duration;
if (typeof d == 'number') {
durationAudio += d;
countAudio++;
}
} else if (meta == 'video') {
var d = meta.video.duration;
if (typeof d == 'number') {
durationVideo += d;
countVideo++;
}
}
}
folderEnum.Close();
} else {
var meta = item.metadata;
if (meta == 'audio') {
durationAudio = meta.audio.duration;
if (typeof durationAudio != 'number') durationAudio = 0;
countAudio = 1;
} else if (meta == 'video') {
durationVideo = meta.video.duration;
if (typeof durationVideo != 'number') durationVideo = 0;
countVideo = 1;
}
}
scriptColData.columns('DurationAudio').value = durationAudio;
scriptColData.columns('DurationVideo').value = durationVideo;
scriptColData.columns('DurationAV').value = durationAudio + durationVideo;
scriptColData.columns('DurationAudioAvg').value = countAudio ? durationAudio / countAudio : '---';
scriptColData.columns('DurationVideoAvg').value = countVideo ? durationVideo / countVideo : '---';
scriptColData.columns('DurationAVAvg').value = (countAudio + countVideo) ? (durationAudio + durationVideo) / (countAudio + countVideo) : '---';
}