web-dev-qa-db-ja.com

ファイルブラウザ:選択したオーディオ/ビデオファイルの合計時間を取得します

可能であれば、Linuxファイルマネージャーの1つで選択したオーディオ/ビデオファイルの合計時間を知る方法を知りたいのですが。

私はUbuntu 18.04 LTSを使用しており、そのデフォルトのファイルマネージャーはFiles AKA Nautilus です。

1
Amir

これがNautilusスクリプトです
-nautilusでファイルを選択
-右クリック
-コンテキストメニューで、[スクリプト]>NameOfScriptを選択します

enter image description here


インストール:
存在しない場合はmediainfoプログラムをインストールしますSudo apt install mediainfo
スクリプトを~/.local/share/nautilus/scriptsのファイルに保存します
実行可能にしますchmod +x ~/.local/share/nautilus/scripts/scriptname
nautilus nautilus ~/.local/share/nautilus/scriptsを使用してスクリプトディレクトリに一度アクセスします

#!/bin/bash

# Selected fileslist to Array
OLDIFS=$IFS
IFS=$'\n'
fileArray=($NAUTILUS_SCRIPT_SELECTED_FILE_PATHS)
IFS=$OLDIFS

# Length of array: total num of selected files
NbFiles=${#fileArray[@]}

# The loop 
for (( i=0; i < ${NbFiles}; i++ ));
do
    # Get duration if file is media (audio or video)
    buff=$(file -N -i "${fileArray[$i]}" | grep -E 'audio|video')
    if [ ! -z  "$buff" ]
        then
            # mediainfo gives duration in milliseconds, easy to sum up
            MediaDuration=$(mediainfo --Output='General;%Duration%' "${fileArray[$i]}")
            TotalDuration=$((TotalDuration + MediaDuration))
            NbMedia=$((NbMedia + 1))
    fi
done

# Format Duration: milliseconds to H:M:S
Seconds=$((TotalDuration / 1000))
FormattedDuration=$(printf '%02dh:%02dm:%02ds\n' $(($Seconds/3600)) $(($Seconds%3600/60)) $(($Seconds%60)))

# Build report
ReportText="${NbFiles} File"
test $NbFiles -gt 1 && ReportText="${ReportText}s"
ReportText="${ReportText} selected\n"
test $NbMedia -gt 0 && ReportText="${ReportText}${NbMedia} media file" || ReportText="${ReportText}No media file"
test $NbMedia -gt 1 && ReportText="${ReportText}s"
test $NbMedia -gt 0 && ReportText="${ReportText}\nTotal duration: ${FormattedDuration}"

zenity  --info --no-wrap --text="${ReportText}"
3
cmak.fr