是否可以用精确的长度(毫秒)编码音频流?

时间:2019-04-26 15:40:59

标签: ffmpeg mp3 aac avconv vorbis

我希望使用mp3,aac或vorbis编解码器创建长度恰好 30秒的输出文件。我已经通过以下命令使用了avconv(也尝试了ffmpeg):

avconv  -i input_file_here -c:a aac -b:a 320k -t 30 out.mp4

这将产生输出,说明它已经正确编码了30秒,但是:

$ avprobe out.mp4
avprobe version v13_dev0-1648-gc4642788e, Copyright (c) 2007-2018 the Libav developers
  built on Apr 24 2019 15:49:35 with gcc 7 (Ubuntu 7.3.0-27ubuntu1~18.04)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:30.02, start: 0.023220, bitrate: 323 kb/s
    Stream #0:0(und): Audio: aac (LC) [mp4a / 0x6134706D]
      44100 Hz, stereo, fltp, 321 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
# avprobe output

当我在mp3中编码时,它会正确显示它在编码过程中的时间超过30秒。当我尝试使用vorbis时,它的时间不到30秒。

是否可以使用任何工具(我更喜欢avconv)实现30秒到毫秒的长度。

1 个答案:

答案 0 :(得分:1)

在您的示例中,您正在使用aac音频44100khz。 AAC每帧使用1024个样本。 1024/44100不能被30整除。因此,不可能。可能可以调整启动样本,但是您需要了解启动样本的工作原理,并修改编码器。

Mp3每帧使用1152、572或384个样本,具体取决于图层。 可能会有一种有效的组合。在此处查看更多https://hydrogenaud.io/index.php/topic,85125.0.html

我对vorbis一无所知,所以我不知道它是否可能。