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