임시 파일을 사용하지 않고 명령 출력을 다른 명령에 인수로 전달합니다.

임시 파일을 사용하지 않고 명령 출력을 다른 명령에 인수로 전달합니다.

수천 개의 비디오 파일을 한 형식(vob)에서 다른 형식(mkv)으로 변환하려고 합니다. 각 소스 비디오는 순차적으로 번호가 매겨진 8개 미만의 1GB *.vob 파일로 분할됩니다. 안타깝게도 비디오 변환 프로그램은 연결된 단일 vob 파일만 허용할 수 있으며 다음을 사용하여 쉽게 만들 수 있습니다.

cat *.vob > full_movie.vob

(full_movie.vob의 크기는 일반적으로 6~7GB입니다.)

비디오 형식 변환 프로그램의 형식은 다음과 같습니다.

video_convert -i full_movie.vob  many_arguments -o full_movie.mkv

이러한 파일은 네트워크 드라이브에 있으므로 네트워크 트래픽이 가장 큰 병목 현상이 됩니다. 나는 모든 임시 full_movie.vob 파일을 생성하고 이후에 파기하는 중간 단계를 어떻게든 피하고 싶습니다(비록 이 파일이 내 노트북 ​​SSD에 로컬로 저장되어 있더라도 >100TB를 써서 파일이 닳고 싶지는 않습니다).

cat *.vob명령의 출력을 가져와서 (파일로 저장하는 대신) RAM에 저장하고 어떻게든 video_convert 프로그램 매개변수에 푸시할 수 있는 방법이 있습니까 ? 서버에 임시 파일을 저장해야 한다면 네트워크 트래픽과 시간이 두 배로 늘어납니다.

이것은 둥근 구멍에 있는 사각형 말뚝일 수 있습니다…

답변1

프로그램 video_convert에 파일 대신 표준 입력을 처리하는 옵션이 있습니까? 그렇다면 출력을 파이프하면 됩니다 cat *.vob. 그런데 많은 프로그램에서는 -파일 이름을 사용하여 표준 입력을 나타내거나, 파일 이름을 제공하지 않으면 기본적으로 표준 입력을 사용할 수 있습니다. 또는 /dev/stdin예를 들어 .for를 사용할 수 있습니다.

cat *.vob | video_convert many_arguments -o full_movie.mkv
cat *.vob | video_convert -i -  many_arguments -o full_movie.mkv
cat *.vob | video_convert -i /dev/stdin  many_arguments -o full_movie.mkv

video_convert입력에서 특정 위치를 찾아야 하는 경우 stdin을 사용할 수 없습니다. 연속적인 데이터 스트림을 처리할 수 있는 경우에만 효과적입니다. 사용하는 경우에도 동일하게 적용됩니다.프로세스 교체또는명명된 파이프@muru가 댓글에서 언급했듯이 AKA fifo도 검색할 수 없습니다.

관련 정보