Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
wiki:bashscript_ffmpeg [2011/07/18 19:53] создано |
wiki:bashscript_ffmpeg [2014/02/22 13:33] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Вступление ====== | + | ====== Bash-скрипт + FFmpeg ====== |
- | Здраствуйте. Недавно возникла необходимость конвертирования видео/аудио файлов. Выбор пал на ffmpeg, потому что данная утилита имеет довольно широкие возможности + распространяется бесплатно. Стоит отметить, что ffmpeg следует собирать из исходников, поскольку версия в репозитории довольно стара и может не удовлетворить всех потребностей. Для тех кто еще не знает, что это такое ознакомьтесь с [[http://ru.wikipedia.org/wiki/FFmpeg|данной статьей]], а также с синтаксисом утилиты [[http://help.ubuntu.ru/wiki/ffmpeg|здесь]]. Мануалы по компиляции смотрите [[http://www.google.com/search?client=ubuntu&channel=fs&q=%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0+ffmpeg&ie=utf-8&oe=utf-8#pq=%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0%20ffmpeg&hl=en&cp=26&gs_id=17&xhr=t&q=%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0+ffmpeg+linux+ubuntu&pf=p&sclient=psy&client=ubuntu&hs=Lk&channel=fs&source=hp&pbx=1&oq=%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0+ffmpeg+linux+ubuntu&aq=f&aqi=&aql=&gs_sm=&gs_upl=&bav=on.2,or.r_gc.r_pw.&fp=97eede9ed711c932&biw=1366&bih=595|здесь]]. Итак приступим. | + | Здравствуйте. Недавно возникла необходимость конвертирования видео/аудио файлов. Выбор пал на ffmpeg, потому что данная утилита имеет довольно широкие возможности + распространяется бесплатно. Стоит отметить, что ffmpeg следует собирать из исходников, поскольку версия в репозитории довольно стара и может не удовлетворить всех потребностей. Для тех кто еще не знает, что это такое ознакомьтесь с [[http://ru.wikipedia.org/wiki/FFmpeg|данной статьей]], а также с синтаксисом утилиты [[http://help.ubuntu.ru/wiki/ffmpeg|здесь]]. Мануалы по компиляции смотрите [[http://www.google.com/search?&q=сборка+ffmpeg+ubuntu+linux|здесь]] и [[https://trac.ffmpeg.org/wiki/UbuntuCompilationGuide|здесь]]. Итак приступим. |
===== Bash-скрипт ===== | ===== Bash-скрипт ===== | ||
<code bash> | <code bash> | ||
Строка 91: | Строка 91: | ||
FileValidation "$1" | FileValidation "$1" | ||
Message "" "$REDФайла $INPUT не существует!$ENDCOLOR" | Message "" "$REDФайла $INPUT не существует!$ENDCOLOR" | ||
- | # Убираем слеш на конце | + | # Выделяем имя файла без расширения |
- | INPUT="${1%*/}" | + | INPUT="${INPUT##*/}" |
- | # Убираем расширение | + | OUTPUT="${INPUT%.*}" |
- | INPUT="${INPUT%.*}" | + | |
- | # Убираем начальную часть пути | + | |
- | OUTPUT="${INPUT##/*/}" | + | |
# Путь у файлу на выходе | # Путь у файлу на выходе | ||
# Если нет слеша в конце пути, то добавим его | # Если нет слеша в конце пути, то добавим его | ||
Строка 102: | Строка 99: | ||
if [ $SLASH != / ]; then | if [ $SLASH != / ]; then | ||
PATH_FILE="$2/" | PATH_FILE="$2/" | ||
+ | else | ||
+ | PATH_FILE="$2" | ||
fi | fi | ||
OUTPUT="$PATH_FILE$OUTPUT.$3" | OUTPUT="$PATH_FILE$OUTPUT.$3" | ||
Строка 107: | Строка 106: | ||
echo "ffmpeg -i" "$1" "$4" "$OUTPUT" | echo "ffmpeg -i" "$1" "$4" "$OUTPUT" | ||
} | } | ||
+ | |||
################# Данные функции представлены в качестве примеров, Вы можете создать свой набор предустановок ################# | ################# Данные функции представлены в качестве примеров, Вы можете создать свой набор предустановок ################# | ||
Строка 159: | Строка 159: | ||
INPUT="$OPTARG" >> $LOG | INPUT="$OPTARG" >> $LOG | ||
# Делаем выборку из предварительных настроек | # Делаем выборку из предварительных настроек | ||
- | "$PARAM" "$INPUT" "$PATH_TO_OUT";; | + | "$PARAM" "$INPUT" "$PATH_TO_OUT" 2>>$LOG;; |
f ) Empty "$PARAM" 2>> $LOG | f ) Empty "$PARAM" 2>> $LOG | ||
Continue "$REDВы не указали preset!$ENDCOLOR" 2>> $LOG | Continue "$REDВы не указали preset!$ENDCOLOR" 2>> $LOG | ||
Строка 171: | Строка 171: | ||
for COUNT in *."$EXTENSION" | for COUNT in *."$EXTENSION" | ||
do | do | ||
- | "$PARAM" "$COUNT" "$PATH_TO_OUT" | + | "$PARAM" "$COUNT" "$PATH_TO_OUT" 2>>$LOG |
done;; | done;; | ||
p ) PATH_TO_OUT="$OPTARG" 2>> $LOG | p ) PATH_TO_OUT="$OPTARG" 2>> $LOG | ||
Строка 182: | Строка 182: | ||
Empty "$INPUT" 2>> $LOG | Empty "$INPUT" 2>> $LOG | ||
Exit 1 "$REDВы не указали входной файл!$ENDCOLOR" 2>> $LOG | Exit 1 "$REDВы не указали входной файл!$ENDCOLOR" 2>> $LOG | ||
+ | echo -e $GREEN"------------------------------------------------------------------------------"$ENDCOLOR | ||
+ | cat $LOG | more | ||
+ | echo -e $GREEN"------------------------------------------------------------------------------"$ENDCOLOR | ||
exit 0 | exit 0 | ||
</code> | </code> | ||
- | Для того, чтобы запустить у себя скрипт достаточно: | + | **Для того, чтобы запустить у себя скрипт достаточно:** |
- | * Скопировать текст приведенный выше в Ваш любимый текстовый редактор | + | * Скопировать текст приведенный выше в Ваш любимый текстовый редактор |
- | * Сохранить файл с любым именем | + | * Сохранить файл с любым именем |
- | * Сделать файл исполняемым <code>chmod +x Путь_к_Вашему_файлу</code> | + | * Сделать файл исполняемым <code>chmod +x Путь_к_Вашему_файлу</code> |
- | * Отредактировать файл .bashrc добавив строку <code>alias Convert='Путь_к_Вашему_файлу'</code> | + | * Отредактировать файл .bashrc добавив строку <code>alias Convert='Путь_к_Вашему_файлу'</code> |
- | * Этой командой в консоли и будет вызываться скрипт<code>Convert</code> | + | * Этой командой в консоли и будет вызываться скрипт<code>Convert</code> |
===== Использование ===== | ===== Использование ===== | ||
- | Попробуйте ввести в консоли Convert и нажать <key>Enter</key>. Вы увидите справку по ключам скрипта: | + | Попробуйте ввести в консоли **Convert** и нажать <key>Enter</key>. Вы увидите справку по ключам скрипта: |
- | {{http://itmages.ru/image/view/233159/5444111e?200x50}} | + | <code> |
- | Остановимся поподробнее на каждой опции: | + | Вызовите сценарий с одним или более параметром |
- | * -p : Каталог для конвертированных файлов. Если данный ключ отсутствует, то будет использована та папка, где находится исходный файл. Данную опцию следут указывать до указания входного файла | + | ------------------------------------------------------------------------------ |
- | * -s : Как конвертировать файлы. Опция является обязательной. Здесь указывается имя функции-настройки из скрипта. В данном случае PSP или NokiaC3. Данную опцию следут указывать до указания входного файла | + | ВНИМАНИЕ: |
- | * -i : Один файл для конвертирования. | + | * Формат: ./a.sh <опции> |
- | * -f : Множество входных файлов для конвертирования. В данном случае указывается один файл из папки, и все файлы с аналогичным расширением будут переконвертированы | + | * -p : Путь к каталогу для выходных файлов |
+ | Обязательно слеш на конце! | ||
+ | * -s : Как конвертировать файлы (preset) | ||
+ | * -i : Входной файл для конвертирования | ||
+ | * -f : Указать файл из папки. Все файлы с аналогичным раcши | ||
+ | рением также будут переконвертированы | ||
+ | ------------------------------------------------------------------------------ | ||
+ | * : Если не указан путь, то выходные файлы помещаются в папку с исходными файлами | ||
+ | * : Опции желательно указывать в порядке перечисленном выше | ||
+ | * : Опции можно указывать несколько раз | ||
+ | ------------------------------------------------------------------------------ | ||
+ | Presets: | ||
+ | * PSP : видео для консоли (368x208) | ||
+ | * Nokia: видео для телефона (320x240) | ||
+ | ------------------------------------------------------------------------------ | ||
+ | </code> | ||
+ | **Остановимся поподробнее на каждой опции:** | ||
+ | * **-p:** Каталог для конвертированных файлов. Если данный ключ отсутствует, то будет использована папка, где находится исходный файл. Данную опцию следут указывать **до указания входного файла** | ||
+ | * **-s:** Как конвертировать файлы. Опция является обязательной. Здесь указывается имя функции-настройки из скрипта. В данном случае **PSP** или **NokiaC3**. Данную опцию следут указывать **до указания входного файла** | ||
+ | * **-i:** Один файл для конвертирования. | ||
+ | * **-f:** Множество входных файлов для конвертирования. В данном случае указывается один файл из папки, и все файлы с аналогичным расширением будут переконвертированы | ||
===== Предустановки ===== | ===== Предустановки ===== | ||
Чтобы расширить возможности скрипта добавьте свои функции с предустановками: | Чтобы расширить возможности скрипта добавьте свои функции с предустановками: | ||
- | * Найдите строку | + | * Найдите строку |
<code>################# Данные функции представлены</code> | <code>################# Данные функции представлены</code> | ||
- | * Создайте функцию по образу и подобию, стандартных. | + | * Создайте функцию по образу и подобию, стандартных. |
- | * Например: | + | * Например: |
<code> | <code> | ||
ConvertToMP3 () | ConvertToMP3 () | ||
Строка 211: | Строка 234: | ||
} | } | ||
</code> | </code> | ||
- | ==== Примеры использования ==== | + | * Третий параметр расширение выходного файла, а четвертый Ваши опции конвертирования |
- | * Будет переконвертирован один файл и помещен в ~/ | + | ===== Примеры использования ===== |
+ | * Будет переконвертирован один файл и помещен в /home/citizen | ||
<code>Convert -s PSP -p /home/citizen -i /home/rTorrent/example.avi</code> | <code>Convert -s PSP -p /home/citizen -i /home/rTorrent/example.avi</code> | ||
- | * Будет переконвертированы файлы с одним расширением и помещены в ~/ | + | * Будет переконвертированы файлы с одним расширением и помещены в /home/citizen/Scrubs |
<code>Convert -s PSP -p /home/citizen/Scrubs -f /home/rTorrent/Scrubs/example.avi</code> | <code>Convert -s PSP -p /home/citizen/Scrubs -f /home/rTorrent/Scrubs/example.avi</code> | ||
- | * Аналогично двум командам выше | + | * Аналогично двум командам выше |
<code>Convert -s PSP -p /home/citizen -i /home/rTorrent/example.avi -p /home/citizen/Scrubs/ -f /home/rTorrent/Scrubs/example.avi</code> | <code>Convert -s PSP -p /home/citizen -i /home/rTorrent/example.avi -p /home/citizen/Scrubs/ -f /home/rTorrent/Scrubs/example.avi</code> | ||
+ | {{tag>Скрипты Можно_улучшить Кодирование_видео ffmpeg}} |