ffmpeg 사용해서 16k wav 파일로 변환하기
Audio Attributes
Audio
파일을 사용하기 위해서는 여러가지 값들을 알고 있어야한다.
Sample Rate
- 샘플의 빈도 수
- 즉, 1초당 추출되는 샘플의 개수.
- SR이 높으면 높은 밀도의 음성, 낮으면 낮은 밀도의 음성.
- → 이것을 강제로 낮추면 느린 배속으로 재생이 되고, 높히면 빠른 배속으로 재생이 됨.
Bit Rate
- 1초당 전송되는 데이터 양
- 즉, 1초당 전송되는 비트 수를 의미함.
ffmpeg
커맨드에서 Audio 파일을 원하는 포맷에 맞게 변경하기 위해서 ffmpeg
과 soxi
를 많이 쓰는데 오늘은 ffmpeg으로 16k wav파일을 만드는 커맨드를 보려한다.
사용
- 나는 서버 상에서 ffmpeg을 사용해야하는데, 설치하지 못하는 환경이라서 docker image를 이용해 run을 시켰다.
1
$ docker run --rm -v /home:/config DOCKER_IMAGE:latest ffmpeg -i /config/test1.wav
- 이런식으로 하면 ffmpeg이 사용 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ffmpeg version n4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44)
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, wav, from '/config/test1.wav':
Duration: 00:00:03.12, bitrate: 256 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
At least one output file must be specified
원하는 옵션으로 만들기
나는 들어오는 모든 input Audio를
wav
, 16k
, 16bit
, mono
의 Format으로 만들고 싶었다.
1
$ docker run --rm -v /home:/config DOCKER_IMAGE:latest ffmpeg -y -i /config/test1.aac -f s16le -ac 1 -ar 16000 /config/test1_out.wav
ffmpeg에서는 input 파일명과 output 파일명이 같을 수 없다.
- 원하는 옵션으로 output 파일이 만들어진다.