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

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

【问题讨论】:

    标签: batch-file audio ffmpeg mp3 trim


    【解决方案1】:

    这是两个问题合二为一:

    1. 如何从任意持续时间的输入中删除最后 0.5 秒?
    2. 如何将其合并到 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】:
    1. 如何将其合并到 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.exe、xidel.exe 和 ffmpeg.exe 都在同一个目录中。

    【讨论】:

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