Циклический просмотр папок и объединение mp3-файлов с помощью ffmpeg

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

Я просто копирую этот ответ -->https://unix.stackexchange.com/a/275778/130767


Да, есть способ. Машина даже не всегда должна быть одной и той же, поскольку Linux создает файловые системы /dev, /procи /sysна лету при загрузке ядра, что дает вам большую свободу для внесения довольно радикальных изменений в оборудование..

Допустим, ваша ОС установлена ​​на диск /dev/sda. Вы можете создать ISO-образ /dev/sdaи всех его разделов, какими бы они ни были, с помощью следующей команды:

dd if=/dev/sda of=/path/to/image.iso

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

Если вы хотите клонировать диск непосредственно из /dev/sda,просто вставьте другой диск и используйте что-то вроде:

dd if=/dev/sda of=/dev/sdb

0
14.09.2019, 10:29
1 ответ

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

Вместо этого используйте цикл оболочки:

for dirpath in files/*/; do
    set -- "$dirpath"/*.mp3
    ffmpeg -i "concat:$1|$2" -c copy "$dirpath/both_${1##*/}"
done

или альтернативно

for dirpath in files/*/; do
  (
    cd "$dirpath"
    set -- *.mp3
    ffmpeg -i "concat:$1|$2" -c copy "both_$1"
  )
done

Это зациклило бы ваши folder1, folder2и т. д. каталоги с путем к каждому каталогу в $dirpath. Для каждого пути к каталогу тело цикла будет расширять шаблон подстановки *.mp3в этом каталоге, а затем использовать первые два совпадения этого шаблона для запуска команды ffmpeg. Никакой проверки не делается, чтобы убедиться, что мы действительно получили два совпадения шаблона.

Разница между двумя приведенными выше циклами заключается в том, что первый цикл не меняет свой каталог на каждый из каталогов $dirpath, и поэтому $1и $2будут содержать путь к каталогу. Вот почему я использую "$dirpath/both_${1##*/}"для создания пути к файлу с именем both_something.mp3в каталоге (путь к каталогу должен быть удален с начала $1, чтобы вставить подстроку both_).

Другой цикл использует cdдля изменения каталога в каждый каталог в цикле. Таким образом, строки $1и $2будут именами файлов, а не путями с начальным путем к каталогу. Поскольку cdпроисходит внутри подоболочки (, (...)),изменение рабочего каталога влияет только на команды в круглых скобках.

4
28.01.2020, 02:17

Теги

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