Linux ターミナルを使用して長さで .avi ビデオを削除する

Linux ターミナルを使用して長さで .avi ビデオを削除する

ターミナル経由でビデオの長さに応じてビデオを削除するにはどうすればよいですか?

カットオフポイントは 30 秒で、それ以下のものはすべて削除したいです。サイズ ( find . -type f -size +27818098c) で選択すると、ビデオのビットレートが異なるため、正確な結果が得られません。

答え1

少しハッキーですが:

for f in *.avi; do 
  echo "Testing $f"
  ffmpeg -i "$f" 2>&1 | awk '/Duration/ { split($2,a,":"); exit a[1]*3600+a[2]*60+a[3] < 30 ? 3 : O }'
  [[ $? -eq 3 ]] && rm -i -- "$f"
done

これは、がffmpegインストールされていることを前提としています。ファイルを削除する前に確認を求められますが、目的の動作を確実に実行できる場合はrm削除できます。-i

ポータブルなRubyスクリプトでない確認を求めますが、次のf.deleteように置き換えてputs f何が行われるか確認することもできます。

ruby <<"EOF"
  Dir.glob("*.avi").each { |f| 
    ff = %x( ffmpeg -i "#{f}" 2>&1 )
    d = ff.match(/Duration: ([0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2})/)[1].split(":").map{|s| s.to_i}
    s = (d[0]*60*60 + d[1]*60 + d[2])
    f.delete if s < 30 
  }
EOF

関連情報