00시부터 12시 사이에 생성된 영상파일을 반복해서 ffmpeg를 이용해서 변환한 후 삭제하는 스크립트를 만들어보려고 합니다.
스크립트는 파일을 찾고 ffpmeg를 시작하여 작동하지만 첫 번째 ffmpeg 변환이 시작된 후에는 find -exec에서 문자를 계속 "보내는" 것처럼 보이며 결국 ffmpeg를 중단하고 변환을 중지합니다. 이런 일이 발생하지 않도록 하려면 스크립트를 어떻게 수정해야 합니까?
현재 스크립트
!/bin/bash -e
find /videos/. -type f -print0 -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 00 ] && [ "$h" -lt 12 ]' sh {} \;|while read -d $'\0' i;
do
ffmpeg -y -i "$i" -vcodec libx264 -crf 27 -preset veryfast -movflags +faststart -c:a copy -threads 14 /output/"$(basename "$i" .ts)".mp4
rm -f -- "$i"
done
답변1
Gordon Davisson 덕분에 이 문제를 해결할 수 있었습니다. 나중에 이 문제가 발생하는 경우 전체 작업 스크립트는 다음과 같습니다.
#!/bin/bash -e
find /videos/. -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 00 ] && [ "$h" -lt 12 ]' sh {} \; -print | while IFS= read -r i;
do
ffmpeg -y -i "$i" -vcodec libx264 -crf 27 -preset veryfast -movflags +faststart -c:a copy -threads 14 /output/"$(basename "$i" .ts)".mp4 </dev/null
rm -f -- "$i"
done