1080p未満のすべてのファイルを一覧表示する方法

1080p未満のすべてのファイルを一覧表示する方法

私はyoutube-dlを実行している毎日のクローンスクリプトを使用して複数のYouTubeチャンネルをアーカイブします。しかし、スクリプトが正しく機能していることを確認するために、ビデオの確認中に、アーカイブされたチャンネルの1つの最新のビデオの一部が1080p60の代わりに360pにダウンロードされたことがわかりました。 YouTubeで映像を確認してみると本当に360pです。数日後、ビデオ処理が完了し、解像度は1080p60になります。

Youtubeの処理が完了した後に削除して再ダウンロードできるように、解像度が1080p未満のフォルダにあるすべてのビデオをどのように一覧表示しますか?

ffmpegや他のツールを使って書く方法はありますか?

今後この問題を回避する方法についての提案も大いに感謝します。

答え1

で述べたようにこの回答次のコマンドを使用してビデオファイルのサイズを取得できます。

ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 input.mp4

これは次のような出力を提供します

1280

その後、動画で何をするかを決定できます。

答え2

exiftool -q -r -if '$MIMEType =~ m{^video/} and
                    $ImageHeight < 1080 and
                    print "$Directory/$FileName\0" and 0' . |
  xargs -r0 echo rm -f

(GNUxargsまたは互換仮定)。

echo高さが1080ピクセル未満の画像を含む現在のディレクトリ内のすべてのビデオは、繰り返し削除されます(削除する場合)。ファイル名はUTF-8でエンコードされていると(正しく)仮定されます(-charset他の文字セットのオプションを参照)。

としてパイプするのではなく、xargs rmファイル(> list)に保存できます。まず、リストでいくつかのチェックを実行します。

xargs -r0a list ls -ldrS

よかったら:

xargs -r0a list rm

または、すべての関連情報を読みやすく解析可能な形式で取得できるように、情報をJSON形式で保存します。

exiftool -q -r -j -if '$MIMEType =~ m{^video/}' \
  -ImageWidth -ImageHeight -VideoFrameRate -MIMEType . > list.json

次に、いくつかの基準に従ってリストを確認して削除します。

PERL_UNICODE= json_xs < list.json -t none -e '
  for (@{$_}) {
    unlink $_->{SourceFile} if
      $_->{ImageHeight} < 1080 || $_->{VideoFrameRate} < 60
  }'

Videoframerate(FLVファイルの場合ではないことがわかりましたVideoFrameRate。これらの不一致を知りたい場合があります。)

関連情報