私は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
。これらの不一致を知りたい場合があります。)