【问题标题】:Use ffmpeg to time-dilate and resample audio without changing frequencies使用 ffmpeg 在不改变频率的情况下对音频进行时间膨胀和重新采样
【发布时间】:2018-05-18 17:16:14
【问题描述】:

我有一些音频(波形文件)以每秒 48000 个样本的速率进行采样。

创建此音频是为了匹配 30 FPS 视频。但是,视频实际上以 29.97 (30 X 1000/1001) 的 NTSC 帧速率在目标上播放。

这意味着我需要对音频进行时间扩展,以便在之前有 48000 个样本的情况下有 48048 个样本(播放速度慢 1.001 倍),但仍保持最终音频文件的速率为每秒 48000 个样本。

理想情况下,我还想使用 FFMPEG 的 sox 库选项进行重新采样,因为我听说它的质量要高得多。

谁能帮助我使用以这种方式处理文件所需的命令行?

【问题讨论】:

    标签: ffmpeg sox ntsc


    【解决方案1】:

    基本命令是

    ffmpeg -i in.wav -af asetrate=47952,aresample=48000:resampler=soxr out.wav
    

    这假定 libsoxr 已链接。

    【讨论】:

    • 谢谢。但是,47952 有点不精确(它会导致音频每 5 小时漂移大约一帧)。有没有办法做类似 'asetrate=48000,aresample=48048' 但仍然让它以 48k 的速率写入输出文件,如果你有一个很长的音频文件会更准确?
    • 我认为,它是每 9 小时 1 帧。无论如何,颠倒顺序:-af aresample=48048:resampler=soxr,asetrate=48000,
    • 你说得对——在 30 FPS 下大约需要 9 小时。我使用 60 FPS / 59.94 进行了计算,得到了 ~5 小时数。
    猜你喜欢
    • 2021-01-07
    • 2019-02-06
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2015-07-06
    • 2021-10-26
    相关资源
    最近更新 更多