Я пытаюсь преобразовать пакет файлов .mov в mp4. Как мне получить имя файла из канала для генерации команды ffmpeg? Как использовать аргумент канала несколько раз в цепочке ссылок? Я пытаюсь сделать что-то вроде этого:
ls *.MOV | ffmpeg -y -i $file "$file.mp4"
решение1
Трубы полезны, когда вы хотите использоватьстандартный вывододной команды какстандартный вводдругой команды. Но вам нужно передать файл в качестве входных данных в ffmpeg
, а не имена файлов на его стандартном входе. И вам нужно запустить ffmpeg
несколько раз, по одному разу для каждого входного файла, чтобы получить выходной файл.
Короче говоря, каналы для этого бесполезны, вам нужен цикл, как предлагалось в другом ответе. Но следует заключить параметры имени файла в двойные кавычки:
for file in *.MOV; do
ffmpeg -y -i "$file" "$file.mp4"
done
Вы упомянули в комментарии, что можете написать скрипт Perl. Это было бы действительно излишеством. Bash — более простой, идеально подходящий подход. Обратите внимание, что вы можете написать приведенный выше скрипт в одну строку и запустить его прямо в командной строке.
for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done
решение2
Вы можете сделать это с помощью простого for
цикла
#!/bin/bash
for file in /path/to/*.MOV
do
echo "Converting $file"
done