
Как я могу использовать следующий скрипт длярекурсивнопреобразовать каталог, содержащий .mp4
в .png
(только 1 кадр).
Сейчас он только преобразует каталог. Он не рекурсивный.
for i in *.mp4
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
done
решение1
find . -type f -name '*.mp4' -exec sh -c '
name="${1%.*}"
echo "$name"
ffmpeg -i "$1" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
' find-sh {} \;
Примечания:
- В вашем исходном коде
name=`echo "$i" | cut -d'.' -f1`
довольно низкокачественный фрагмент. Он обрезает первую точку, это кажется неправильным. Это не единственная проблема, но я не буду вдаваться в подробности. Если вы хотите удалить расширение, правильный способ —name="${i%.*}"
. *.mp4
цитируется из-заэтот.- Разумэтот.
find-sh
объясняетсяздесь.find
спускается в подкаталоги, но по умолчанию не следует символическим ссылкам. Если все "подкаталоги" в.
являются фактическими ссылками на каталоги, то вы можете ошибочно подумать, что инструмент не спускается в целом. Проверьте параметр ,man 1 find
.-L