Как получить доступ к папке / подпапкам / файлам с помощью вложенных циклов для конверсий файлов?

В такой структуре:

/home/me/Videos/Downloads/Videos/xml tutorials/Main/video1.mp4 /home/me/Videos/Downloads/Videos/xml tutorials/Main/video2.mp4 .... /home/me/Videos/Downloads/Videos/java tutorials/Main/video1.mp4 /home/me/Videos/Downloads/Videos/java tutorials/Main/video2.mp4 ....

Мне нужно преобразовать видео и сохранить новые файлы следующим образом:

/home/me/Videos/Downloads/Videos/xml tutorials/Converted/video1.mp4 /home/me/Videos/Downloads/Videos/xml tutorials/Converted/video2.mp4 /home/me/Videos/Downloads/Videos/java tutorials/Converted/video1.mp4 /home/me/Videos/Downloads/Videos/java tutorials/Converted/video2.mp4

Я хочу преобразовать эти видео, используя ffmpeg, запустив вложенную петлю через Folder/Subfolders/Videos.

Запустив это, я могу пропустить все файлы в текущем каталоге:

for f in *; do ffmpeg -i "$f" ... ; done

Как использовать вложенные петли для этого, так что сам bash может автоматически просматривать Videos/xml tutorials/main/ и выполнять преобразование, помещать их в Videos/xml tutorials/converted и сам переходить на Videos/java tutorials/main/?

0
задан 21 April 2017 в 09:42

3 ответа

Наконец выяснилось, скорее всего, есть более эффективный / оптимизированный способ сделать это, но на данный момент все работает. Но ffmpeg не занимал пробелы в именах, поэтому пришлось переименовывать их все, заменив пространство символом подчеркивания.

В папке «Видео», в которой есть разные учебники, выполнение этого работает -

for f in * ; do
  for g in "$f"/Main/* ; do
     ffmpeg -i "$g" -s 854x480 -c:v libx265 "$f"/Converted/$(basename $g)
  done
done

Здесь $f получает имена папок, а затем $g получает имена самих файлов вместе с их путями и расширениями.

1
ответ дан 22 May 2018 в 23:23

Наконец выяснилось, скорее всего, есть более эффективный / оптимизированный способ сделать это, но на данный момент все работает. Но ffmpeg не занимал пробелы в именах, поэтому пришлось переименовывать их все, заменив пространство символом подчеркивания.

В папке «Видео», в которой есть разные учебники, выполнение этого работает -

for f in * ; do for g in "$f"/Main/* ; do ffmpeg -i "$g" -s 854x480 -c:v libx265 "$f"/Converted/$(basename $g) done done

Здесь $f получает имена папок, а затем $g получает имена самих файлов вместе с их путями и расширениями.

1
ответ дан 18 July 2018 в 14:34

Наконец выяснилось, скорее всего, есть более эффективный / оптимизированный способ сделать это, но на данный момент все работает. Но ffmpeg не занимал пробелы в именах, поэтому пришлось переименовывать их все, заменив пространство символом подчеркивания.

В папке «Видео», в которой есть разные учебники, выполнение этого работает -

for f in * ; do for g in "$f"/Main/* ; do ffmpeg -i "$g" -s 854x480 -c:v libx265 "$f"/Converted/$(basename $g) done done

Здесь $f получает имена папок, а затем $g получает имена самих файлов вместе с их путями и расширениями.

1
ответ дан 24 July 2018 в 20:25

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

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