Як використовувати поточне ім'я файлу кілька разів у команді pipe?


0

Я намагаюся конвертувати пакет файлів .mov у mp4. Як я можу отримати ім'я файлу з труби для створення команди ffmpeg? Як використовувати аргумент труби кілька разів у ланцюговій ланці? Я намагаюся мати щось подібне:

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

Відповіді:


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

Я можу написати це сценарій perl, але я що для цього використовувати труби, щоб зрозуміти концепцію труб.
Олексій Ряжських
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.