실행 중에 MPEG-TS 비디오 데이터를 파일에 지속적으로 쓰는 프로그램을 작업 중입니다. 나는 그것이 여러 날 동안 지속적으로 실행될 것으로 기대합니다.
ffmpeg를 사용하여 이 비디오 데이터를 실시간으로 트랜스코딩하고 싶습니다. 따라서 .mts 파일은 하드 드라이브 공간이 부족할 때까지 계속 커지지 않습니다. 첫 번째 프로그램이 명명된 파이프에 쓰고 ffmpeg
해당 파이프에서 읽도록 하려고 합니다.
나는 이것을 시도했지만 ffmpeg -i /tmp/test.mts -c:v libx264 test.mp4
새 데이터를 기다리는 대신 파이프 끝에 도달하면 ffmpeg가 종료되는 것 같습니다. 예를 들어 프로그램을 시작하고 30초 정도 기다린 후 ffmpeg를 실행하면 약 50초 정도의 영상만 출력됩니다. (30초 + ffmpeg가 따라잡는 데 걸리는 시간)
나는 그것을 작동시킬 수 있었지만 ffmpeg -i pipe:0 -c:v libx264 test.mp4 < /tmp/test.mts
표준 입력을 사용하여 이 작업을 수행하는 것은 나에게 약간 오래된 학교처럼 느껴집니다. 명명된 파이프를 ffmpeg에 대한 입력으로 직접 제공하고 현재 데이터 끝에 도달한 후 새 데이터를 기다리게 하는 방법이 있습니까?
감사해요!
답변1
쓰기를 위해 다른 곳에서 FIFO를 열고 열어두세요. 예:
창에서:
mkfifo /tmp/test.mts
exec 7<>/tmp/test.mts
ffmpeg -i /tmp/test.mts out.mp4
다른 창에서:
cat ... >/tmp/test.mts
cat ... >/tmp/test.mts
아이디어는 쓰기 위해 파이프를 연 모든 프로세스가 파이프를 닫을 때까지 판독기가 파이프에서 EOF를 받지 않는다는 것입니다.
$ mkfifo /tmp/fifo
$ cat /tmp/fifo &
[1] 26437
$ exec 7>/tmp/fifo
$ echo yes >/tmp/fifo
yes
$ echo yes >/tmp/fifo
yes
$ echo yes >/tmp/fifo
yes
$ exec 7>&-
$
[1]+ Done cat /tmp/fifo
exec 7>/tmp/fifo
유지되는 쓰기 종료까지 열린 핸들이 없으면 첫 번째 핸들 이후에 종료 /tmp/fifo
됩니다 .cat
echo