Скопіювати файл FLAC, якщо він більший, ніж певна частота дискретизації?


0

Я хочу перетворити цілу купу файлів FLAC на ALAC, використовуючи такий інструмент ffmpeg або sox . Це само по собі досить просто з однією командною лінією. Тим не менш, я хочу, щоб заощадити дисковий простір за допомогою downsampling тільки ті файли FLAC з частотою дискретизації більше певної величини. Так що:


Для всіх файлів * .flac у певному каталозі ...

... якщо вхідний файл має частоту дискретизації більше 96 кГц, конвертувати в ALAC і зменшити до 96 кГц (додавши прапорець "-ar 96000").

ffmpeg -i track.flac -acodec alac -ar 96000 track.m4a

... інакше, просто перетворити його на ALAC без змін.

ffmpeg -i track.flac -acodec alac track.m4a

Чи може бути досягнута спроба виявлення зразків, і якщо так, то як би виглядав сценарій для виконання вищезазначеного?

Відповіді:


1

... aaaand зрозумів це. Тут, використовуючи sox для визначення частоти дискретизації, і ffmpeg для перекодування. Засунув його в bash сценарій:

for f in *.flac; do

  RATE="$(soxi -r $f)"

  if [ $RATE -gt 96000 ]
  then
    echo Resampling and converting... 
    ffmpeg -i "$f" -acodec alac -ar 96000 -c:v copy "${f%}.m4a";
  else
    echo Converting...
    ffmpeg -i "$f" -acodec alac -c:v copy "${f%}.m4a";
  fi

done

The -c: v копія прапор переносить мистецтво альбому недоторканим.


Видалити -vn і додати -c:v copy щоб уникнути транскодування відео.
Gyan

Щиро дякую! Працює відмінно - додається до рішення.
abza

Якщо ви хочете використовувати ffprobe замість Sox, ви могли б зробити: ffprobe "$f" -v error -select_streams a:0 -show_streams | grep sample_rate | cut -d= -f2 або подібні.
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.