【问题标题】:Conversion of mp3 to flac results in file with longer duration将 mp3 转换为 flac 会导致文件持续时间更长
【发布时间】:2019-06-18 14:56:09
【问题描述】:

我注意到,当我将 mp3 文件转换为 flac 时,flac 文件中报告的持续时间通常与源 mp3 文件的持续时间不同。大多数情况下,这种差异可以忽略不计,可以忽略(可能只有几分之一秒)。

但是,有时计时会偏离几秒钟,这会导致我的处理管道出现很多问题。

例如,以podcast episode for example 为例。如果我通过 ffmpeg 运行它,我可以看到它的持续时间为:

Duration: 00:52:38.39, start: 0.000000, bitrate: 128 kb/s

如果我随后使用以下命令将其转换为 flac:

ffmpeg -i startups-for-the-rest-of-us-448.mp3 -ac 1 -ar 16000 -f flac output.flac

我可以看到flac文件的持续时间是:

Duration: 00:52:45.65, start: 0.000000, bitrate: 133 kb/s

请注意,在转换过程中有一条错误消息指出:

[mp3 @ 0x7fffd16d6780] Header missing
Error while decoding stream #0:0: Invalid data found when processing input

时长的差异是否与比特率差异有关?当我听文件时,它听起来是一样的,我假设 flac 版本必须稍微慢一点,以便在播客过程中获得额外的 7 秒。

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

    你应该在 ffmpeg 日志的顶部附近看到这个

    Estimating duration from bitrate, this may be inaccurate
    

    MP3 可能没有索引,因此 ffmpeg 必须估计持续时间,它使用比特率来估计。根据比特率变化,这个估计可能会被关闭。

    运行 ffmpeg -i in.mp3 -vn -f null - 并检查日志末尾以获得准确的估计值

    size=N/A time=00:52:45.67 bitrate=N/A speed= 761x
    

    【讨论】:

    • 好的,这很有趣。两件事...... 1)该命令到底在做什么? 2)当我将 mp3 文件加载到媒体播放器中时,它会报告 00:52:38 时间,而不是 00:52:45... 如果我擦到最后,音频确实在 00:52 正确结束: 38.玩家会以某种方式捏造这个吗?真的,如果我拿出秒表并从头开始播放文件,我会发现它真的运行了 00:52:45 而不是 00:52:38?
    • 该命令正在解码整个音频并将其发送到空输出。在该管道内,ffmpeg 测量原始音频持续时间,即您看到的时间。您可以运行ffmpeg -i in -c copy out.mp3 来生成一个新文件,ffmpeg 会将持续时间存储在标题中。
    • 太棒了,谢谢!做额外的工作来获得适当的持续时间将需要更多时间,但它至少可以让我在不操纵现有处理管道的情况下继续进行
    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 2014-06-01
    • 2013-07-12
    • 1970-01-01
    • 2023-01-12
    • 2013-05-12
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多