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中?

您需要对.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

最新更新