Linux arecord
명령을 사용하여 파일 시간 플래그 등을 사용하여 여러 FLAC 유형 파일을 기록하고 저장하고 싶습니다 .
--max-file-time
wav 파일의 경우 --max-file-time
플래그를 사용하여 여러 파일을 저장하는 것은 매우 간단합니다 . 아래 예에서는 6 채널 오디오의 10 초마다 새 wav 파일이 저장됩니다.
arecord -t raw -f S16_LE -r 44100 --max-file-time 10 -D ac108 -c 6 --use-strftime listen-%H-%M-%v.wav
에서 이 대답 기여가에 오디오 데이터를 배관하여 FLAC 파일에 기록하는 방법을 보여 주었다 flac
이하로 입증 된 바와 같이, FLAC의 formatfile에서 출력 프로그램 :
arecord -t raw -f S16_LE -r 44100 -D ac108 -c 6 | flac - -f --endian little --sign signed --channels 6 --bps 16 --sample-rate 44100 -s -o listen.flac
내 질문은 단순히 각 파일의 크기가 비슷한 여러 FLAC 파일에 기록 할 수있는 Linux 명령을 구성하는 방법입니다.
arecord
생성 한 원시 형식의 다음 속성을 활용 해 보겠습니다 .
따라서 1 초마다 44100 × 12 = 529200 바이트가 걸립니다. 10 초를 얻으려면 5292000 바이트가 필요합니다. 스트림에서 연속 된 5292000 바이트의 임의 청크를 가져올 수 없습니다. 중간 샘플을 시작하지 않도록해야합니다. 그러나 처음 5292000 바이트에는 확실히 정수 개수의 샘플 (엄격히 44100 개 샘플)이 포함되고 다음 5292000 바이트, 다음 등이 포함됩니다.
이것이 split
명령이 할 수있는 일입니다. 스트림을 주어진 크기의 조각으로 나눌 수 있습니다. 진정한 마법은 --filter=
옵션 에서 비롯됩니다 .
arecord -t raw -f S16_LE -r 44100 -D ac108 -c 6 \
| split -d -b 5292000 --filter='
flac - -f --endian little --sign signed --channels 6 --bps 16 --sample-rate 44100 -s -o "${FILE}.flac"
'
위의 파이프 라인 split
은 flac
각 데이터에 대해 실행 됩니다.
메모:
--filter
POSIX에서는 필요하지 않습니다. 당신 split
은 그것을 지원하거나 지원하지 않을 수 있습니다.man 1 split
영향을 미치는 옵션을 알아 보려면를 참조하십시오 ${FILE}
. 난 그냥 사용 -d
그래서 내 경우에는,의 x00
, x01
, x02
, ...arecord
및 split
. 내 테스트에서이 (잘린 마지막 FLAC 파일을 만드는 split
종료 flac
내가 얻을 수 있도록, 하드 방식으로?) ERROR while decoding data
, state = FLAC__STREAM_DECODER_END_OF_STREAM
나중에 파일을 디코딩하면서. SIGINT를 arecord
(예 killall arecord
) 로만 전송 하면 split
(가장 중요한 것은) flac
정상적으로 완료됩니다.이 명령은 가독성을 위해 여러 줄을 사용하지만 논리적으로는 다음 형식의 한 줄입니다.
arecord … | split … --filter='flac …'
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다