2013-01-22

How to sort films by length?

(1)Version 1

用「ffmpeg -i」來掠影片的長度。

佇「xargs」內底用「bash -c」來執行1个以上的指令。

用「(...)」(subshell)共指令組合起來。

find . \( -name "*.avi" -o -name "*.mp4" -o -name "*.mkv" \) -type f -print0 | xargs -0 -I % bash -c 'echo -ne "%\x00"; (ffmpeg -i "%" 2>&1 | grep Duration);' | awk -F '\x00' '{print $2,$1;}' | sort -k2


 (2)Version 2

簡化Version 1。

檔名「%」愛用「"%"」,通好保護。

find . \( -name "*.avi" -o -name "*.mp4" -o -name "*.mkv" \) -type f -print0 | xargs -0 -I % bash -c 'echo $(ffmpeg -i "%" 2>&1 | grep Duration) "%"' | sort -k2


 (3)Version 3

改用「-exec」。

「{}」愛用「"{}"」。

find . \( -name "*.avi" -o -name "*.mp4" -o -name "*.mkv" \) -type f -exec bash -c 'echo $(ffmpeg -i "{}" 2>&1 | grep Duration) "{}"' \; | sort -k2