录音/制作/创作 吉他 扩声技术 视频技术 作品展示 生活 信息 更多... | 音频应用专卖店

利用 PowerShell 与 FFMPEG 切掉音频内的静音

( 7 )
 
[收藏]

2428
#1 21-9-17 16:29

利用 PowerShell 与 FFMPEG 切掉音频内的静音

这个 PWSH 脚本仅用来切除音频内的绝对数字静音。诸位可以根据 FFMPEG 的参考手册来调整这个脚本。

macOS 系统需要单独安装 PowerShell,且 FFMPEG 需要单独安装(该脚本针对 MacPorts 版 FFMPEG 优化,请 HomeBrew 用户自行调整)。

Windows 系统内建 PowerShell,但是 FFMPEG 需要单独安装。

Windows 10 专业版、企业版用户也可以使用 Linux 子系统内建的封包管理器来安装 Linux 专用版 PowerShell 与 FFMPEG。

  1. # ### Set the source and target folders  ####################

  2. $sourceDir = "/var/tmp/SourceDir"
  3. $targetDir = $sourceDir + "_trimmed"

  4. # ### Set the desired FFmpeg directives  ################################################################

  5. $ffmpegDirectives = "-af silenceremove=window=0:detection=peak:stop_mode=all:start_mode=all:stop_periods=-1:stop_threshold=0: -c:a pcm_s32le  -y"

  6. # ### Set the location of the FFmpeg program  ################################################################

  7. $ffmpegPath = "/opt/local/bin/ffmpeg"

  8. # ### No changes needed below this line ################################################################

  9. Write-Host "--------------------------------------------------------------------"
  10. Write-Host "Trim Silence from files "
  11. $now = Get-Date -Format "HH:mm:ss"
  12. Write-Host @("script started at " + $now )

  13. # Set-Location $sourceDir
  14. New-Item -Path $targetDir -Force -ItemType directory | Out-Null

  15. $wavFileList = Get-ChildItem -Path $sourceDir -Name -Include "*.wav"

  16. $fileCount = 0
  17. foreach ( $wavFile in $wavFileList ) {

  18.     $fileCount++

  19.     $sourcePath = Join-Path $sourceDir $wavFile
  20.     $targetPath = Join-Path $targetDir $wavFile

  21. #    Write-Host @($sourcePath + " >>> " + $targetPath)

  22.     $ffmpegParameters = " -loglevel error  -i """ + $sourcePath + """ " + $ffmpegDirectives + "  """ + $targetPath + """"

  23. #    Write-Host $ffmpegParameters
  24.     Start-Process -FilePath $ffmpegPath -ArgumentList $ffmpegParameters -NoNewWindow
  25. }

  26. # ########################################################################
  27. Write-Host @("Files processed: " + $fileCount)
  28. $now = Get-Date -Format "HH:mm:ss"
  29. Write-Host @("script completed at " + $now )
  30. Write-Host "-------------------------------------------------------------`n"
复制代码

本帖最后由 ShikiSuen 于 21-9-17 16:33 编辑
观众反应

2428
#2 21-9-17 16:35

3459
#3 21-9-17 16:54
不明觉历

8861
#4 21-9-17 17:41
厉害了

454
#5 21-9-18 17:20
没有GUI。。。转码、录屏也还凑合,批处理的话,Cubase都不是一键能整利索的,FFMPEG的还是玩玩算了...    不过PS还是很强而且便利的,附上一个简单指令交流哇(txt保存\改后缀ps1\ps执行):

cmd /c dir /s /b |? {$_.length -gt 260} > PATH大于260.TXT

可以一键遍历[子路径]所有超过260字符的文件,素材命名有时太长了、或含特殊字符,容易导致读写失败,最终看log去修正命名即可

本帖最后由 425046203 于 21-9-18 17:46 编辑

2428
#6 21-9-18 20:33
425046203 发表于 21-9-18 17:20
没有GUI。。。转码、录屏也还凑合,批处理的话,Cubase都不是一键能整利索的,FFMPEG的还是玩玩算了...     ...

你这还是用到了 DOS CMD……

454
#7 21-9-22 09:49
ShikiSuen 发表于 21-9-18 20:33
你这还是用到了 DOS CMD……

算是CMD+PS

2428
#8 21-9-22 11:56

这就牵扯到平台通用性的问题。
PowerShell 是可以在 macOS 和 Linux 系统下使用的,但 Windows NT 的 CMD 只有 Windows NT 内核的系统能用。(CMD 用法与 DOS 类似,但仍旧是两个不同的东西。)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

搜索