I need to get a list of filenames and path along with the duration of the file. All are video files. Some files are in subfolders as well. I need the list sorted according to duration. My goal is to delete the files which have a duration lower than 2 minutes. Is there someway I can do it through terminal or GUI?
2 Answers
this should give you a list of mp4s less than 120 seconds in the folder specified including sub folders
find ~/pathtofolder -iname '*.mp4' -type f > vidfiles && while read f; do echo -n "$f: "; ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$f"; done < vidfiles | awk '$NF<120' > shortvids
Just change the ~/pathtofolder
to your target location.
The list will be in a file called shortvids
I apologize for not sorting but I don't see the need if the only files in the list are the short videos.
If you would like to change the duration, near the end change '$NF<120'
to the number of seconds. For example '$NF<300'
would mean "duration less than 5 minutes(or 300 seconds)"
of course you can also find durations greater than or equal to by changing the sign ie. <
to >
or =
You are out of luck without using external programmes, file videoname.xyz
does not return the duration of the videos. On the other hand, avprobe (ffprobe) from the package libav-tools does!
You would need to perform a recursive directory walk (e.g. in Python), call avprobe (via a subprocess), parse the duration from the output and store play length and filename in a suitable structure.