check duration of audio files on the command-line

后端 未结 14 861
攒了一身酷
攒了一身酷 2021-02-05 00:00

I need to check the duration of a group of audio files. Is there a simple way to do this on the unix command-line?

> duration *

I have the a

相关标签:
14条回答
  • 2021-02-05 00:36

    If you are interested in finding total duration of wav files in a directory using soxi you can use this:

    soxi -D input_dir/*.wav | python -c "import sys;print(sum(float(l) for l in sys.stdin))

    change input_dir according to your input directory. If you want to find max/min duration between all wav files feel free to change sum to max or min.

    0 讨论(0)
  • 2021-02-05 00:39

    A solution based on mplayer from commandlinefu by syssyphus that works with both audio and video files:

    sudo apt-get install mplayer
    find -type f -name "*.mp3" -print0 | xargs -0 mplayer -vo dummy -ao dummy -identify 2>/dev/null | perl -nle '/ID_LENGTH=([0-9\.]+)/ && ($t +=$1) && printf "%02d:%02d:%02d\n",$t/3600,$t/60%60,$t%60' | tail -n 1
    

    Get the total length of all video / audio in the current dir (and below) in H:m:s

    Change the *.mp3 to whatever you want to match (e.g., *.avi, *.wav), you can remove it altogether if you want to check all files.

    Example of output: 00:00:37

    0 讨论(0)
  • 2021-02-05 00:39

    with ffprobe

    ffprobe your_file.mp3 2>&1 | grep "Duration"
    

    The output looks like this:

    Duration: 00:44:33.50, start: 0.011995, bitrate: 128 kb/

    0 讨论(0)
  • 2021-02-05 00:42

    mediainfo can do this, but mediainfo is one of those useful tools that's so badly documented that you almost need to know how to use it in order to learn how to use it (happens a lot in the linux world).

    After hours of trials and reading high and low, I finally got it to generate a recursive comma-separated list of file names and their duration in milliseconds.

    cd to the starting directory and issue the following command:

    find "$(pwd)" -type f -print0 | xargs -0 -I {} mediainfo --Inform="General;%CompleteName%,%Duration%" {} > list.txt
    

    The results will be output to list.txt.

    0 讨论(0)
  • 2021-02-05 00:43

    In addition to cdosborn's answer, to calculate the length of all .mp3 files recursively in subfolders of current directory and show the total sum result in days:hours:minutes:seconds format:

    In zsh:

    afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'
    

    In bash or sh:

    find . -name "*.mp3" -exec afinfo {} \; | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'
    

    The result is like this (7 days, 5 hours, 6 minutes, 58 seconds):

    $ afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}'
    7:05:06:58
    $
    
    0 讨论(0)
  • 2021-02-05 00:44

    on OSX

    Print the length of each audio file in the current dir:

    afinfo * | awk '/estimated duration/ { print $3 }'
    

    Include the filepath:

    afinfo * | awk '/File:/ { song=$2 } /estimated duration/ { print song, $3 }'
    
    0 讨论(0)
提交回复
热议问题