我正在尝试制作这个脚本,循环播放 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