如何在管道命令中多次使用目前檔案名稱?

如何在管道命令中多次使用目前檔案名稱?

我正在嘗試將一批 .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

相關內容