Bash скрипт, генерирующий изображение из видео с определенным заголовком в подкаталогах

У меня есть следующий скрипт 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

Большое спасибо!

1
задан 1 February 2013 в 16:02

3 ответа

Существует проблема с 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 \;
0
ответ дан 1 February 2013 в 16:02

Просто установите j на нужное имя

j=image

вместо того, чтобы устанавливать его в качестве базового имени видео.

0
ответ дан 1 February 2013 в 16:02

Измените код вашего 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

0
ответ дан 1 February 2013 в 16:02

Другие вопросы по тегам:

Похожие вопросы: