Преобразование всех файлов в каталоге с помощью FFMPEG

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

Я собрал небольшой скрипт, но он не будет работать. Может ли кто-нибудь протянуть руку / предложить, как лучше всего сжимать и сохранять качество?

#!/bin/bash
#Convert files using ffmpeg
DIR="/Volumes/Misc/To Convert 2"
for i in $DIR; do ffmpeg -i "$i" -c:v libx264 -crf 19 -preset slow -c:a aac -strict experimental -b:a 192k -ac 2 "/Volumes/Misc/Converted/${i%.*}.m4v"
done

EDIT: OUTPUT
Это вывод, который я получаю при попытке запустить скрипт оболочки

ffmpeg version 2.6.1-tessus Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
  configuration: --cc=/usr/bin/clang --prefix=/Users/tessus/data/ext/ffmpeg/sw --as=yasm --extra-version=tessus --disable-shared --enable-static --disable-ffplay --enable-gpl --enable-pthreads --enable-postproc --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libxvid --enable-libspeex --enable-bzlib --enable-zlib --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libxavs --enable-libsoxr --enable-libwavpack --enable-version3 --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvpx --enable-libgsm --enable-libopus --enable-libmodplug --enable-fontconfig --enable-libfreetype --enable-libass --enable-libbluray --enable-filters --disable-indev=qtkit --disable-indev=x11grab_xcb --enable-runtime-cpudetect
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
/Volumes/Misc/ToConvert: Operation not permitted
16
задан Hastur
02.01.2023 5:08 Количество просмотров материала 2523
Распечатать страницу

2 ответа

В общем это не безопасно для анализа выходных данных ls(см. ниже) и аналогично "*.*".

Я предлагаю использовать find Он защищает вас от необычного имени файла со специальным символом.

#!/bin/bash
#Convert files using ffmpeg
OrDir="/Volumes/Misc/To Convert 2/"

find "$OrDir" -type f -exec /bin/bash -c \
    'f2=$(basename ""); \
     ffmpeg -i "" -c:v libx264 -crf 19 -preset slow -c:a aac -strict experimental -b:a 192k -ac 2 "/Volumes/Misc/Converted/${f2%.*}.m4v" ' _ {}  \;

вы можете проверить его с помощью имени файла, например

  cp myfile.mpg myfile$'\n'with_new_line.mpg

ссылки

3
отвечен Hastur 2023-01-03 12:56

так как имя каталога содержит пробелы, необходимо заключить "$DIR" для предотвращения разбора пробелов как разделителей слов.

Я также предлагаю вам немного изменить цикл for:

#!/bin/bash
DIR="/Volumes/Misc/To Convert 2"
cd "$DIR"
for i in *.*; do
    ffmpeg -i "$i" -your_option "/Volumes/Misc/Converted/${i%.*}.m4v"
done
2
отвечен Giorgio Bar 2023-01-03 15:13

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх