ffmpeg を使用した再帰変換には find コマンドを使用します

ffmpeg を使用した再帰変換には find コマンドを使用します

次のスクリプトをどのように使用すればいいでしょうか再帰的に.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

関連情報