공학, 음악 부스러기
Published on

녹음프로그램 없이 쉘에서 오디오 녹음하기

Authors
  • avatar
    Name
    치우

안녕하세요

24년도가 얼마 남지 않았습니다

다들 한 해 마무리 잘 하시고 탈 없는 새해 맞이 하시기 바랍니다.

이번 글은 쉘스크립트를 통한 레코딩 구현 실습? 그런 목적의 기록입니다.

개인적으로 오디오 스트림 전송 관련해서 니즈가 있어가

실습 내용

ffmpeg 라이브러리를 통해 로컬 기기에 연결된 입력 장치를 탐색하고, 쉘스크립트를 통해 60초 동안의 입력 스트림을 wav 파일로 로컬 컴퓨터에 저장합니다

실습 환경

OS Mac os Sonoma 14.5 개발환경 빌트인 터미널 또는 iterm2 , 쉘 이외 개발언어 없음

ffmpeg 설치

brew install ffmpeg
홈브루 ffmpeg 설치 스크린샷

명령어 기반으로 입력 장치 탐색

다음 명령어를 입력해 현재 컴퓨터에서 접근 가능한 오디오 입력장치 목록을 조회합니다.

ffmpeg -f avfoundation -list_devices true -i ""
ffmpeg 입력장치  탐색 스크린샷

웹에 웹에 레퍼런스가 많이 없어서 맨 밑 빈 문자열 에러는 해결 방법을 모르겠네요

아예 넣지 않으면 i 옵션 인자가 없어서 넣긴 해야 하는데

빈 무자열 말고 다른 방법이 있으면 누가 좀 알려줬으면 ;;

명령어 맨 뒤 -i  '' 부분의 빈 문자열은 전체 리스트를 위한 더미 옵션입니다

입력 스트림 저장으로 레코딩 구현

다음은 0 번 인덱스의 입력장치로 들어오는 오디오 스트림을 스크립트 실행 기준으로 60 초 분량을 wav 파일로 저장하는 쉘 스크립트입니다.

입력 장치의 인덱스가 디스플레이 캡쳐 장치 또는 비디오 카메라인 경우 설정이 맞지 않을 수 있씁니다.


# 출력 파일 이름
OUTPUT_FILE="output.wav"

# 녹음 시간 (초)
DURATION=60
# 0 번 인덱스를 사용한다고 가정합니다. 요구사항에 맞게 0 번이 아닌 다른 인덱스로 수정하거나 이 스크립트의 매개변수로 입력을 받아 사용하도록 추후 수정합니다

# FFmpeg 명령어 실행
ffmpeg -f avfoundation -i "0" -t "$DURATION" -ac 2 -ar 44100 "$OUTPUT_FILE"

# 결과 확인
if [ $? -eq 0 ]; then
 echo "녹음 완료: $OUTPUT_FILE"
else
 echo "녹음 실패!"
fi


.sh 파일로 저장 후 실행권한 부여하고 실행해보면 같은 경로에 output.wav 파일이 생겨나는 것을 볼 수 있습니다.

끝