使用 FFMPEG 批量删除音频结尾

Posted

技术标签:

【中文标题】使用 FFMPEG 批量删除音频结尾【英文标题】:Using FFMPEG to batch remove audio endings 【发布时间】:2019-07-25 15:31:17 【问题描述】:

我有超过 1000 个音频文件,所有这些文件都以鼠标单击结束。我想从所有这些中删除最后半秒。音频文件有不同的长度(即 15 秒、5 秒……),但它们的共同点是最后半秒有鼠标点击声。如何使用 Windows 10 命令行批量修剪文件夹中 mp3 文件的结尾?我已经下载了 FFMPEG。谢谢!

【问题讨论】:

【参考方案1】:

这是两个问题合二为一:

    如何从任意持续时间的输入中删除最后 0.5 秒? 如何将其合并到 Windows 批处理脚本中?

我会回答 #1,因为我不是 Windows 用户。批处理脚本由您决定。


使用ffprobe获取持续时间:

ffprobe -v error -show_entries format=duration -of csv=p=0 input.mp3

使用ffmpeg修剪:

ffmpeg -i input.mp3 -t <duration> -c copy output.mp3

&lt;duration&gt; 替换为ffprobe 的输出减去0.5 秒。

【讨论】:

提醒我,有一个输入 -toeof 的补丁可以恢复。 感谢 Llogan 的回答。对此,我真的非常感激。我真的不能逐个文件手动完成。如果可能,我需要运行一个 batch.bat 文件,因为有超过 1000 个文件。我希望有人能找到答案。谢谢!【参考方案2】:
    如何将其合并到 Windows 批处理脚本中?

应该这样做:

FOR %%A IN (*.mp3) DO (
  FOR /F %%B IN ('ffprobe.exe -v error -show_entries format^=duration -of csv^=p^=0 "%%~A" ^| xidel -s - -e ". - 0.5"') DO (
    ffmpeg.exe -i "%%~A" -t %%B -c copy "%%~dpnA_trimmed.mp3"
  )
)

首先,在批处理中进行浮点计算在官方上是不可能的,而且在非官方的情况下真的很难编写脚本。这就是为什么我建议让Xidel 做数学。它首先是一个从 html/XML/JSON 下载和提取数据的命令行工具,但它可以做的更多!

循环遍历当前目录中的所有 mp3 文件。 llogan 建议的 ffprobe 命令通过管道传送到 Xidel,以减去 0.5 秒。例如,25.547755 现在变为 25.047755。 不要忘记在 for 循环中转义必要的字符!在这种情况下,=|。 llogan 建议的 ffmpeg 命令打开 "%%~A(mp3 文件),将持续时间设置为 %%B 并创建一个新的 mp3 文件 (&lt;filename&gt;_trimmed.mp3)。 此代码假定 mp3 文件 ffprobe.exexidel.exeffmpeg.exe 都在同一个目录中。

【讨论】:

嗨 Reino。谢谢你的代码。我希望它会起作用,因为它可以节省我几天的手动编码。我如何让 Xidel 做数学?我要先下载它,然后将下载的文件放在与FFMPEG相同的文件夹下吗?我对上面的任何代码都不熟悉,所以当你说不要忘记转义一些 for 循环时,这是否意味着我需要进一步修改代码?谢谢! 使用“windows 10 命令行”我假设您已经熟悉 cmd/batch。以上是一个简单的批处理脚本,您可以将其复制/粘贴到记事本中并保存为*.bat 文件。当然你也可以直接在 cmd 中输入这个命令(一行!)。在这种情况下,将 %% 替换为 %。 Xidel 和 FFmpeg 一样,不是标准的 Windows 程序,所以是的,你必须先下载它。如果您希望上述代码正常工作,则确实与 ffmpeg.exe 相同的目录。批量转义意味着在某些字符前面放置一个^=| 已被转义,因此无需进一步修改代码 我做了以下事情:我下载了 Xidel 并将它的一份副本放在 FFmpeg 文件夹中,并在它的外面立即放置一份副本以防万一。我还使用上面的代码创建了一个 batch.bat 文件,但出现此错误:对于有效格式,请键入 CALL /?或为/?该命令的语法不正确。 您确定您在 bat 文件中使用的代码与上述完全相同吗?我相信这样的错误消息表明使用% 而不是%% 我只是复制粘贴。没有任何修改。

以上是关于使用 FFMPEG 批量删除音频结尾的主要内容,如果未能解决你的问题,请参考以下文章

使用 ffmpeg 批量降低 mp3 音频文件的比特率和大小

急!如何批量删除数据库中以特定字符开头和结尾的字符串

python调用ffmpeg批量转换音频flac、mp3、m4a

Python 批量提取视频中的音频

Python3 批量提取视频中的音频

Python3 批量提取视频中的音频