В такой структуре:
/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/?
Наконец выяснилось, скорее всего, есть более эффективный / оптимизированный способ сделать это, но на данный момент все работает. Но 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 получает имена самих файлов вместе с их путями и расширениями.
Наконец выяснилось, скорее всего, есть более эффективный / оптимизированный способ сделать это, но на данный момент все работает. Но 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 получает имена самих файлов вместе с их путями и расширениями.
Наконец выяснилось, скорее всего, есть более эффективный / оптимизированный способ сделать это, но на данный момент все работает. Но 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 получает имена самих файлов вместе с их путями и расширениями.