используйте команду find для рекурсивного преобразования с помощью ffmpeg

используйте команду find для рекурсивного преобразования с помощью ffmpeg

Как я могу использовать следующий скрипт длярекурсивнопреобразовать каталог, содержащий .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

Связанный контент