У меня есть следующий скрипт bash, генерирующий файл jpg с тем же именем видеофайла. Теперь мне нужно изменить скрипт bash, чтобы сгенерировать файл jpg с именем image.jpg, а не с тем же именем видео.
Я пробовал много разных способов сделать это, но я не очень хорош в bash-скриптинге, и у меня есть некоторые проблемы с базовым именем и подкаталогами.
Можете ли вы помочь мне?
#!/bin/bash
for i in */*.mp4; do
j=`basename $i .mp4`;
/usr/bin/ffmpeg -i "$i" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 $j.jpg;
done
После дерева каталогов
/
/a/video1.mp4
/b/video2.mp4
/c/video3.mp4
После результата мне нужно
/
/a/video1.mp4
/a/image.jpg
/b/video2.mp4
/b/image.jp4
/c/video3.mp4
/c/image.jpg
Большое спасибо!
Существует проблема с for i in */*.mp4
: вы не можете перебирать файлы в таких подкаталогах, как это (попробуйте: for i in */*.mp4; do echo $i; done
, печатается только */*.mp4
).
Для случая, подобного этому, нет никакого пути вокруг find
.
Один раствор для облицовки с find
:
find /your/base/directory -type f -iname "*.mp4" -execdir /usr/bin/ffmpeg -i "{}" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 image.jpg \;
Просто установите j
на нужное имя
j=image
вместо того, чтобы устанавливать его в качестве базового имени видео.
Измените код вашего bash;)
#!/bin/bash
for i in */*.mp4; do
DIR=$(dirname ${i})
/usr/bin/ffmpeg -i "$i" -r 1 -f image2 -vframes 1 -s 640x360 -ss 0:0:30 $DIR/image.jpg;
done
необходимо пояснение: https://stackoverflow.com/a/6121114