Используйте расширения параметров в команде, запущенной из «find | xargs», чтобы предотвратить перезапись вывода - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть скрипт bash, который ищет файлы mp4 в подпапках с определенными именами и сохраняет кадры этих видео в формате jpeg.

#!/bin/bash
find ../folder -type f -iname '*C00*.mp4' | xargs -I %% ffmpeg -i %% -vf fps=1 -q:v 3 "../frames/_${i%.*}_frame%d.jpg"

Проблема в том, что каждый раз, когда скрипт завершает одно видео, выходные файлы .jepg следующих видео перезаписывают существующие.

Как я могу предотвратить это?

1 Ответ

0 голосов
/ 20 февраля 2019

Вот быстрый удар, который создает каталог с тем же именем, что и входной файл с любым расширением .mp4, обрезанным.

#!/bin/bash
find ../folder -type f -iname '*C00*.mp4' -print0 |
xargs -r0 sh -c 'for f; do
    d="../frames/${f%.[Mm][Pp]4}"
    mkdir "$d" || { echo "$d already exists" >&2; exit 123; }
    ffmpeg -i "$f" -vf fps=1 -q:v 3 "$d/frame%d.jpg"
  done' _
...