FFmpeg批处理文件-将单独的文件集与另一组文件中的随机选择结合起来

时间:2018-08-04 08:21:00

标签: file batch-file audio ffmpeg

我需要将一组特定的文件与另一组文件中的随机选择组合在一起;对于更具体的上下文,语音片段后面是随机的步行对讲机提示音。目前,我已经设法将其组合起来,而不是四处搜寻:

setlocal EnableDelayedExpansion
cd beeps
set n=0
for %%f in (*.*) do (
    set /A n+=1
    set "file[!n!]=%%f"
)
set /A "rand=(n*%random%)/32768+1"
cd ..
for %%A IN (*.ogg) DO ffmpeg -y -i radio_beep.wav -i "%%A" -i "beeps\!file[%rand%]!" -filter_complex "[0:a:0][1:a:0][2:a:0]concat=n=3:v=0:a=1[outa]" -map "[outa]" "helper\%%A"

目前,此操作只会运行一次随机化操作,并对每个文件都使用该选择。我该如何对文件夹中的每个.ogg进行随机化,并将其作为输入输入FFmpeg?

1 个答案:

答案 0 :(得分:1)

您需要为.ogg循环的每次迭代执行随机化。

下面是一个示例,该示例通过在每次迭代中Call标记一个标签部分来实现:

@Echo Off
SetLocal EnableDelayedExpansion
Set "i=0"
For %%A In (beeps\*) Do (Set /A i+=1
    Set "file[!i!]=%%A")
For %%A In (*.ogg) Do Call :Process "%%A"
GoTo :EOF

:Process
Set /A "rand=(%RANDOM%%%i)+1"
ffmpeg -y -i "radio_beep.wav" -i %1 -i "!file[%rand%]!" -filter_complex "[0:a:0][1:a:0][2:a:0]concat=n=3:v=0:a=1[outa]" -map "[outa]" "helper\%~nx1"
Exit /B