Можно ли кодировать аудиопоток с точной длиной (в миллисекундах)? - PullRequest
1 голос
/ 26 апреля 2019

Я хочу создать выходной файл длиной точно 30 секунд в кодеках mp3, aac или vorbis.Я использовал 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 секунд.

Можно ли с помощью какого-либо инструмента достичь длины от 30 секунд до миллисекунды (я предпочитаю либо avconv).

1 Ответ

1 голос
/ 26 апреля 2019

В вашем примере вы используете aac audio 44100 кГц.AAC использует 1024 выборки на кадр.1024/44100 не делится на 30 поровну, поэтому нет, это невозможно.МОЖЕТ быть возможно отрегулировать выборки инициализации, но вам нужно будет понять, как работают образцы инициализации, и изменить кодер.

Mp3 использует 1152, 572 или 384 выборки на кадр в зависимости от слоя.Там может быть комбинация, которая работает.подробнее здесь https://hydrogenaud.io/index.php/topic,85125.0.html

Я ничего не знаю о ворбисах, поэтому не знаю, возможно ли это.

...