使用find指令使用ffmpeg進行遞歸轉換

使用find指令使用ffmpeg進行遞歸轉換

我如何使用以下腳本遞迴地將包含的目錄轉換.mp4.png(僅 1 格)。

現在它只轉換目錄。它不是遞歸的。

for i in *.mp4
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
done

答案1

find . -type f -name '*.mp4' -exec sh -c '
    name="${1%.*}"
    echo "$name"
    ffmpeg -i "$1" -r 0.0033 -vf scale=-1:1024 -vcodec png "${name}.png"
' find-sh {} \;

筆記:

  • 在您的原始程式碼中name=`echo "$i" | cut -d'.' -f1`是相當低品質的片段。它在第一個點被切斷,這似乎是錯誤的。這不是唯一的問題,但我不會詳細說明。如果你想刪除擴展,正確的方法是name="${i%.*}"
  • *.mp4被引用是因為
  • 頭腦
  • find-sh已解釋這裡
  • find下降到子目錄,但預設情況下它不遵循符號連結。如果事實上所有「子目錄」都.連結到目錄,那麼您可能會錯誤地認為該工具通常不會下降。檢查man 1 find-L選項。

相關內容