flac: stdout(-c)으로의 출력이 중단되고, 파일에 쓰는 동일한 명령(-o)이 작동합니다.

flac: stdout(-c)으로의 출력이 중단되고, 파일에 쓰는 동일한 명령(-o)이 작동합니다.

arecord오디오를 녹음하고 도구를 사용하여 .flac로 인코딩 flac한 다음 더 많은 프로세스(gzip, gpg, 여기서는 관련 없음)를 통해 전송하려고 합니다 .

flac매개변수를 사용하여 결과를 파일에 쓰면 -o모든 것이 잘 작동합니다.

arecord -t raw -f S16_LE -r16000 -d 10 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -o test.flac

대신 매개변수를 사용 -c하고 출력을 파일로 리디렉션하는 경우:

arecord -t raw -f S16_LE -r16000 -d 10 -D sysdefault:CARD=1 | flac - -f --endian little --sign signed --channels 1 --bps 16 --sample-rate 16000 -c > test.flac

...결과 파일은 잘 재생되지만(사운드는 작동함) VLC에 오디오 녹음 길이가 표시되지 않고 Audacity가 가져오기 프로세스를 시작하고 ETA가 몇 시간 동안 꾸준히 증가하다가 취소된 상태로 멈춥니다.

두 명령의 유일한 차이점 은 -o test.flacvs. -c > test.flac파일이 손상되는 이유는 무엇입니까?

차이가 있는 경우: flac 1.3.2, arecord 1.1.3, USB 마이크가 있는 Pi3의 최신 raspbian에서 실행됩니다.

답변1

파이프를 통해 최종 길이를 계산할 수 없으므로 flac의 헤더에 쓸 수 없습니다. 파일을 손상시키지 않고 라이브 스트림으로 저장하며 라이브 스트림이 언제 끝나는지 알 수 없으며 헤더가 파일 시작 부분에 있습니다.

관련 정보