使用 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

相關內容