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

관련 정보