批量循环文件夹中的每个波形文件,总音频时长不超过 4 分钟

批量循环文件夹中的每个波形文件,总音频时长不超过 4 分钟

我希望使用批处理命令来编辑文件夹中的许多波形文件:获取一个文件并将其重复至最短持续时间超过 4 分钟。

无论什么程序可以做到这一点,只要它是免费的并且可以在 Windows 10 上运行。

无论它是否是命令行都没关系。

SoX 不行,因为我无法计算重复播放所有音频文件(数百个)所需的时间,直到结果超过 4 分钟。

这是可能吗?

答案1

我为你编写了一个 vbscript 的开头,用于.*wav从此文件夹中获取所有文件持续时间大于或等于 4 秒的文件C:\Windows\Media

如果你想得到大于或等于 4 分钟,只需改变这一行

If Split(oFolder.GetDetailsOf(strFileName,LENGTH),":")(2) >= 4 Then通过这个

If Split(oFolder.GetDetailsOf(strFileName,LENGTH),":")(1) >= 4 Then

尝试一下并告诉我您想要针对您的情况进行哪些修改:

Const LENGTH = 27 
Dim oShell  : Set oShell  = CreateObject("Shell.Application")
Dim oFolder : Set oFolder = oShell.Namespace("C:\Windows\Media")
DIM oFSO    : Set oFSO    = CreateObject("Scripting.FileSystemObject")

For Each strFileName in oFolder.Items
If Lcase(oFSO.GetExtensionName(strFileName.Name)) = Lcase("wav") Then
    If Split(oFolder.GetDetailsOf(strFileName,LENGTH),":")(2) >= 4 Then
        Msg = Msg & "File name: " &_
        oFolder.GetDetailsOf(strFileName,FILE_NAME) &_
        vbTab & "Duration : "& oFolder.GetDetailsOf(strFileName,LENGTH) & vbcrlf
    End If
End If
Next
wscript.echo Msg

编辑 :批量添加另一段代码来生成上述 vbscript 并将结果放入文本文件中:

@echo off
Title Get Duration from *.wav files using vbscript and Batch
Set "LogFile=%~dp0MusicLength.txt"
Call :Generate_VBS_File
Call :Execute_VBS_File
If exist "%LogFile%" Start "" /MAX "%LogFile%"
pause
EXIT
:: -----------------------------------------------------------------------------
:Generate_VBS_File
>"%tmp%\%~n0.vbs" ( 
    echo    Const LENGTH = 27 
    echo    Dim oShell  : Set oShell  = CreateObject("Shell.Application"^)
    echo    Dim oFolder : Set oFolder = oShell.Namespace("C:\Windows\Media"^)
    echo    DIM oFSO    : Set oFSO    = CreateObject("Scripting.FileSystemObject"^)
    echo    For Each strFileName in oFolder.Items
    echo    If Lcase(oFSO.GetExtensionName(strFileName.Name^)^) = Lcase("wav"^) Then
    echo        If Split(oFolder.GetDetailsOf(strFileName,LENGTH^),":"^)(2^) ^>= 4 Then
    echo            Msg = Msg ^& "File name: " ^&_
    echo            oFolder.GetDetailsOf(strFileName,FILE_NAME^) ^&_
    echo            vbTab ^& "Duration : "^& oFolder.GetDetailsOf(strFileName,LENGTH^) ^& vbcrlf
    echo        End If
    echo    End If
    echo    Next
    echo    wscript.echo Msg
)
Exit /B
:: -----------------------------------------------------------------------------
:Execute_VBS_File
cscript /nologo "%tmp%\%~n0.vbs">"%LogFile%"
If exist "%LogFile%" Type "%LogFile%"
If Exist "%tmp%\%~n0.vbs" Del "%tmp%\%~n0.vbs"
Exit /B
:: -----------------------------------------------------------------------------

相关内容