저는 다양한 형식의 오디오 파일을 작업하고 있으며 FFMPEG 및 SoX를 사용하여 해당 형식과 구성을 통합하고 싶습니다.
내 프로세스에는 두 단계가 있습니다.
- 파일(원래 파일이 무엇이든)을 PCM 16비트 리틀 엔디안 WAV 파일로 변환합니다.
ffmpeg -i input.wav -c:a pcm_s16le output.wav
- 원하는 샘플 속도와 채널 수에 맞게 Sox에서 파일을 처리합니다.
sox input.wav output.flac channels 2 rate 44.1k
이상적으로는 불필요한 파일 생성을 피하기 위해 이 두 명령을 함께 연결하고 싶습니다.
그러나 실제로 형식을 작동시키는 데 많은 어려움을 겪고 있습니다.
SoX는 들어오는 오디오의 형식을 명시적으로 알아야 한다고 불평하는데, 나는 그것을 실행할 때조차 그것을 알지 못합니다. PCM 오디오 형식은 알고 있지만 채널 수나 수신 오디오의 샘플링 속도는 잘 모르겠습니다.
이 두 명령을 함께 연결하는 방법이 있습니까? 아니면 하나의 도구를 사용하여 작업을 수행하는 것이 더 좋습니까?
내가 하나만 시도하는 대신 두 가지 도구를 사용하는 이유는 다음과 같습니다.
FFMPEG
- 채널을 복사하여 모노 오디오 스트림을 스테레오 오디오 스트림으로 안전하게 변환하는 방법이 있는지 확실하지 않습니다. (SoX는 이 작업을 기본적으로 수행합니다.)
- 샘플 속도를 변경하는 방법을 잘 모르겠습니다. (SoX는 이 작업을 기본적으로 수행합니다.)
- 최적의 압축률로 FLAC으로 출력하는 방법을 잘 모르겠습니다.
삭스
- FFMPEG와 같은 오디오 형식 감지가 없습니다. 확장자가 없는 파일이 있는 경우 SoX에서는 형식을 수동으로 지정해야 하는데 이는 내 응용 프로그램에서 전혀 작동하지 않습니다.
답변1
디코딩에는 FFmpeg를 사용하고, 형식 감지 문제를 피하기 위해 파이핑에는 sox 형식을 사용하며, 16비트로 출력하려면 레벨 8 FLAC 압축을 사용합니다.
ffmpeg -hide_banner -i input.wav -f sox - |
sox -t sox - -b 16 -C 8 output.flac channels 2 rate 44.1k
답변2
파일 헤더에서 입력 형식을 결정 하려면 sox
해당 입력을 찾아야 하는데 이는 파이프와 호환되지 않습니다.
나는 ffmpeg가 당신이 원하는 모든 것을 할 수 있다고 생각하지만 완전히 확신하지는 않습니다. 나는 그것에 익숙하지 않으며 문서는 매우 명확합니다.
ffmpeg -i "$input" -compression_level 9 -ac 2 -ab 44100 output.flac
대안으로, 멘코더도 비슷한 일을 할 수 있어야 합니다.
mencoder "$input" -oac lavc -lavcopts=acodec=flac:abitrate=44.1:o=compression_level=9 -af channels=2 output.flac