Я пытаюсь конвертировать пакет файлов .mov в mp4. Как я могу получить имя файла из канала для генерации команды ffmpeg? Как использовать аргумент трубы несколько раз в звене цепи? Я пытаюсь получить что-то подобное:

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"

2 ответа2

2

Каналы полезны, когда вы хотите использовать стандартный вывод одной команды в качестве стандартного ввода другой команды. Но вам нужно передать файл в качестве ввода в 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
0

Вы можете сделать это, используя простой цикл for

#!/bin/bash

for file in /path/to/*.MOV
do

    echo "Converting $file"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .