Скрипт ffmpeg из mp4 в mp3

0

Вопрос

#!/bin/bash
for i in *.mp4
do
ffmpeg -i "$i" -ab 128k "${i%mp4}mp3"
done

Этот пакет преобразует все файлы *.mp4 в текущем каталоге в формат mp3. ffmpeg должен быть установлен или включен в этот дистрибутив. Иногда я не хочу, чтобы все в CWD было преобразовано. Я хотел бы изменить этот сценарий так, чтобы.

  1. Если аргументов нет, скрипт ничего не делает
  2. Если аргумент *.mp4, он преобразует весь файл .mp4 в файл .mp3
  3. Если аргументом является filename.mp4, он преобразует только один файл в filename.mp3

Могу ли я получить некоторую помощь с этим кодом сценария bash ? ТИА ! Не уверен, как считывать аргументы из командной строки и помещать их в сценарий

$1 $2 ? Просто покажите мне один пример. Я должен быть в состоянии справиться с остальными.

bash ffmpeg script
2021-11-23 16:45:49
1

Лучший ответ

0

Вы можете позволить оболочке обрабатывать расширения, а затем в своем сценарии перебирать позиционные параметры. Вы могли бы сделать это с помощью

for i in "$@"

или, еще короче, просто

for i

поскольку поведение по умолчанию заключается в циклическом переборе позиционных параметров.

Итак, ваш сценарий будет выглядеть так

#!/usr/bin/env bash

for i; do
    ffmpeg -i "$i" -ab 128k "${i%mp4}mp3"
done

и вы бы назвали это так

yourscript           # Do nothing
yourscript *.mp4     # Expands to all .mp4 files
yourscript file.mp4  # Process just file.mp4
2021-11-23 17:13:32

Огромное спасибо. Это хорошо работает. Могу ли я использовать $i в любом сценарии bash для чтения первого аргумента после имени scrfipt ? Я думал, что это $1 $2 $3 и т. Д.
teddymills

@teddymills "волшебство" заключается в for i строка, которая неявно делает for i in "$@", где $@ представляет собой массив всех позиционных параметров. $1, $2 и т.д.-это индивидуальные позиционные параметры, если вы хотите получить к ним прямой доступ.
Benjamin W.

Имя i является произвольным; вы также можете использовать for param или for file вместо этого и ссылка на него с $param или $file.
Benjamin W.

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................