私は時々提供したい多くの画像コレクションを持っていますffmpeg
。しかし、私はただアルファベット順に食べたい後ろに一部の画像(最後の実行の最後のフレーム、一部のファイルに保存された名前)。
たとえば、ファイルのシーケンス/インデックス番号を見つけてhead
そのtail
番号を使用できますか?
それともパラメータ-pattern_type glob
として使用できる魔法のようなものがありますか?ffmpeg -i
これまで最高のフィルタリングソリューションはこれのようですが、ちょっとそうです。重い:
find . -maxdepth 1 -type f | sort | awk '$0 > "./picture_2022-04-22_13-46-12.jpg"'
代替案は、リストをテキストファイルに入れてそこから解析し、テキストファイルをffmpegに供給することです。しかし、もっと簡単な方法がありますか?
ベストアンサー1
ソート後、someまたはsed
を使用してawk
パターンからストリームの終わりまで一致させることができます。最後のffmpeg
コマンドがファイル引数のリストを受け入れるとします。私は以下をaにprintf
置き換えました。ffmpeg
find . -type f -print0 | sort -z | sed -nz '/pattern/,$p' | xargs -r0 printf '%s\n'
GNUパラメータを使用して分離します。sed
このコマンドは、パターン(含む)からストリームの終わりまでソートされた引数をフィルタリングします。
終わりではなく、2番目のパターンまでパターンからファイルをインポートする唯一の修正sed
はsed -zn '/pattern1/,/pattern2/p'
。
あなたの場合(深さ1)、通常のファイルをテストしないより短い選択肢は次のとおりです。
printf '%s\0' ./*.jpg | sed -nz '/pattern/,$p' | xargs -r0 printf '%s\n'
ここのファイルは最初のステップの後にすでにアルファベット順にソートされています。
あるいは、ファイル名に必ずしも存在しない文字列を比較、除外、または含めることもできます。awk
すでに使用している方法を使用することをお勧めします。たとえば、次の名前のすべてのファイルをインポートします2022-01
。
printf '%s\0' ./*.jpg | awk 'BEGIN {RS=ORS="\0"} $0 > "./picture_2022-01"' | xargs -r0 printf '%s\n'