Arquivo de áudio convertido com ffmpeg para 22050 Hz uint8_t mono PCM é muito grande

0

Estou tentando reduzir a resolução de um som estéreo de 44.1 kHz para 22050 Hz e mono. No entanto, o tamanho do arquivo resultante é muito grande.

Exemplo de sessão (construção de ffmpeg e informações de versão removidas para legibilidade).

> ffprobe input.wav -count_frames
Input #0, wav, from 'input.wav':
  Metadata:
    encoder         : Lavf57.56.101
  Duration: 00:03:23.18, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

Portanto, a contagem de quadros é: 03: 23.18 * 44100 = 8960238

> ffmpeg -i input.wav -ar 22050 -ac 1 -f u8 -acodec pcm_u8 output.u8
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'input.wav':
  Metadata:
    encoder         : Lavf57.56.101
  Duration: 00:03:23.18, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
File 'output.u8' already exists. Overwrite ? [y/N] y
Output #0, u8, to 'output.u8':
  Metadata:
    encoder         : Lavf57.56.101
    Stream #0:0: Audio: pcm_u8, 22050 Hz, mono, u8, 176 kb/s
    Metadata:
      encoder         : Lavc57.64.101 pcm_u8
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_u8 (native))
Press [q] to stop, [?] for help
size=    4375kB time=00:03:23.18 bitrate= 176.4kbits/s speed= 276x    
video:0kB audio:4375kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

Agora, a contagem de quadros deve ser a metade da anterior porque reduzimos pela metade a taxa de amostragem, ou seja, deve ser 8960238/2 = 4480119. E como o formato é u8, ele deve ter exatamente a mesma quantidade de bytes.

> wc -c output.u8
4480160 output.u8

… mas é 41 byte maior do que deveria ser.

    
por user768151 05.09.2017 / 09:38

0 respostas