[HN Gopher] Go CLI to calculate total media duraton in directories
       ___________________________________________________________________
        
       Go CLI to calculate total media duraton in directories
        
       Author : mddysr
       Score  : 6 points
       Date   : 2023-09-04 16:23 UTC (6 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | d0mine wrote:
       | In Python: https://stackoverflow.com/questions/17185348/how-to-
       | get-avi-...
        
         | netmare wrote:
         | As long as we're golfing: In PowerShell, using my personal
         | script library:                   F:films> ls -rec -file | gec
         | video | gvi | ndur         372:18:09
         | 
         | where:
         | 
         | - `ls -rec -file` gets all files recursively under CWD
         | (F:films)
         | 
         | - `gec video` selects video files via extension (gec -> Get-
         | ExtensionCategory)
         | 
         | - `gvi` uses FFPROBE to get video info in custom object (gvi ->
         | Get-VideoInfo)
         | 
         | - `ndur` sums Duration property of objects and converts seconds
         | to 'hhh:mm:ss'
         | 
         | Most people I've shown this have found the syntax and aliases
         | confusing and non-intuitive. They prefer the find/xargs/awk
         | incantations, which, I'm told, are more elegant, correct and
         | precise. After that, I'm usually speechless.
        
       | abdusco wrote:
       | What are the possible use cases for this tool? Why would I want
       | to find out the total runtime of all videos in a directory?
       | 
       | Also, you might wanna limit concurrency[0] instead of spawning
       | many ffprobe instances at the ~same time.
       | 
       | [0]: https://github.com/sourcegraph/conc
       | 
       | In another note, ChatGPT suggests this shell command to do the
       | same thing. It doesn't process files in parallel though.
       | find . -name "*.mp4" -print0 | \           xargs -0 -I {} ffprobe
       | -v error -show_entries format=duration -of
       | default=noprint_wrappers=1:nokey=1 {} | \           awk '{sum +=
       | $1} END {print sum}'
        
         | iruoy wrote:
         | This way it will output time in H:MM:SS                   find
         | . -type f -print0 | \           xargs -0 -I {} ffprobe -v quiet
         | -show_entries format=duration -of
         | default=noprint_wrappers=1:nokey=1 {} | \           awk '{s +=
         | $1} END {printf "%d:%.2d:%.2d\n", s/3600, s%3600/60,
         | s%3600%60}'
        
         | metadat wrote:
         | Simply adding the `-P 10` flag to xargs will make it run 10 (or
         | however many processes you want) in parallel.
        
         | o1y32 wrote:
         | One use case is that if you have a folder of (presumably
         | legitimately acquired, or you know what I mean) movie files,
         | you can figure out how long it will take you to finish them.
         | Although number of video files * 2 hours/file is also likely a
         | very good estimate.
         | 
         | Although I seriously doubt data hoarders care about that. A
         | movie will be eventually watched someday. If they run out of
         | space, they'll get another drive. Storage is cheap.
        
       | mddysr wrote:
       | Azmena let's you show total duration of media files in
       | directories and sub-directories.
        
       ___________________________________________________________________
       (page generated 2023-09-04 23:02 UTC)