Есть куча видосов. Лежат в некоем месте. Вложенность директорий не ограничена.
Мне надо пройти скриптом и родить тумбнайл для каждого видео.
Скрипт я написал. Он пашет. Да вот не могу понять в каком месте я что-то сделал не так:
SHARED_MEDIA_DIR_PATH="/foo"
THUMBNAILS_DIR_PATH="/bar"
createThumbnails()
{
local CURRENT_DIR_PATH=$(readlink -f "${1}")
local FILE_NAME
ls "${CURRENT_DIR_PATH}" -A1 | while read FILE_NAME; do
local ITEM_PATH="${CURRENT_DIR_PATH}/${FILE_NAME}"
if [ -d "${ITEM_PATH}" ]; then
createThumbnails "${ITEM_PATH}"
continue
fi
local MD5_SUM=$(printf '%s' "${ITEM_PATH}" | md5sum | cut -d ' ' -f 1)
local THUMBNAIL="${THUMBNAILS_DIR_PATH}/${MD5_SUM}.jpg"
if [ -f "${THUMBNAIL}" ]; then
continue
fi
echo "${ITEM_PATH}"
#echo "${THUMBNAIL}"
ffmpeg \
-ss $(ffmpeg -i "${ITEM_PATH}" 2>&1 \
| grep Duration \
| awk '{print $2}' \
| tr -d , \
| awk -F ':' '{print ($3+$2*60+$1*3600)/2}') \
-i "${ITEM_PATH}" \
-an \
-vcodec mjpeg \
-vframes 1 \
-f rawvideo \
-y \
"${THUMBNAIL}" \
>> /dev/null 2>&1
done
}
createThumbnails "${SHARED_MEDIA_DIR_PATH}"
В некоей директории лежит 30 видео файлов с именами от 01 до 30 *.mp4.
Запускаю скрипт. Выводит:
/foo/бла бла/01.mp4
/foo/бла бла/.mp4
/foo/бла бла/03.mp4
/foo/бла бла/.mp4
/foo/бла бла/05.mp4
/foo/бла бла/6.mp4
/foo/бла бла/07.mp4
/foo/бла бла/8.mp4
/foo/бла бла/09.mp4
/foo/бла бла/.mp4
/foo/бла бла/11.mp4
/foo/бла бла/2.mp4
/foo/бла бла/13.mp4
/foo/бла бла/4.mp4
/foo/бла бла/15.mp4
/foo/бла бла/6.mp4
/foo/бла бла/17.mp4
/foo/бла бла/8.mp4
/foo/бла бла/19.mp4
/foo/бла бла/0.mp4
/foo/бла бла/21.mp4
/foo/бла бла/.mp4
/foo/бла бла/23.mp4
/foo/бла бла/4.mp4
/foo/бла бла/25.mp4
/foo/бла бла/6.mp4
/foo/бла бла/27.mp4
/foo/бла бла/8.mp4
/foo/бла бла/29.mp4
/foo/бла бла/0.mp4
И скрипт делает 15 тамбнейлов для 15 видео. Через один!!!
Вывод второго запуска отличается тем, что скрипт делает теперь 15 чётных:
/foo/бла бла/02.mp4
/foo/бла бла/3.mp4
/foo/бла бла/04.mp4
/foo/бла бла/5.mp4
/foo/бла бла/06.mp4
/foo/бла бла/7.mp4
/foo/бла бла/08.mp4
/foo/бла бла/9.mp4
/foo/бла бла/10.mp4
/foo/бла бла/.mp4
/foo/бла бла/12.mp4
/foo/бла бла/3.mp4
/foo/бла бла/14.mp4
/foo/бла бла/5.mp4
/foo/бла бла/16.mp4
/foo/бла бла/7.mp4
/foo/бла бла/18.mp4
/foo/бла бла/9.mp4
/foo/бла бла/20.mp4
/foo/бла бла/1.mp4
/foo/бла бла/22.mp4
/foo/бла бла/3.mp4
/foo/бла бла/24.mp4
/foo/бла бла/5.mp4
/foo/бла бла/26.mp4
/foo/бла бла/7.mp4
/foo/бла бла/28.mp4
/foo/бла бла/9.mp4
/foo/бла бла/30.mp4
И выводит какой-то мусор, на котором сам же спотыкается.
Что за хрень?
Интересно, что если закомментировать вызов ffmpeg, выводится всё правильно. Но как только я включаю собственно генерацию тамбнейлов — приехали.
ffmpeg как-то влияет на последовательность действий? Ставил sleep для каждой итерации — не помогло.
ЧЯДНТ?