Я пытаюсь скопировать большой архив видео (сидя в подпапках) в параллельную структуру папок при конвертации видео из mov в mp4 (плюс некоторые другие настройки). Это команда:

for f in Users/me/VIDEOARCHIVE/*/*.mov; do ffmpeg -i "$f" "Users/me/CONVERTED/${f%.mov}.mp4"; done

Тем не менее, я получаю "нет такого файла или каталога" для выходного файла. Я знаю, что на этом сайте много похожих вопросов, но ни один из них не помог мне.
Я также попытался заранее создать пустую структуру папок так, чтобы она создавала только файл .mp4, но все равно получала ту же ошибку.

Это работает, когда (пустая) структура папок уже создана заранее. Но как только отсутствует папка, я получаю сообщение "нет такого файла или каталога".

Есть ли способ сказать ему, чтобы создать родительские папки, если это необходимо, чтобы он мог помещать файлы в них?

1 ответ1

3

Есть ли способ сказать ему, чтобы создать родительские папки, если это необходимо, чтобы он мог помещать файлы в них?

FFmpeg? Нет. Он не будет создавать папки самостоятельно. На самом деле, очень немногие программы делают это.

Некоторые предложения:

  • Вы должны создать папку заранее.
  • Вам нужно использовать базовое имя файла, так как $f уже содержит полный путь к файлу.
  • Вы должны использовать рекурсивное перетаскивание для вашего видеоархива (**/*) для обхода всех каталогов.

Собираем это вместе:

# enable recursive globbing
shopt -s globstar
# create the directory if necessary
dir="/Users/me/CONVERTED/"
mkdir -p "$dir"
# iterate over all files
for f in /Users/me/VIDEOARCHIVE/**/*.mov; do
    # get the file's basename
    fname="$(basename "$f")"
    # run the command, replacing the file extension
    ffmpeg -i "$f" "$dir/${fname%.mov}.mp4"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .