오디오/비디오 지속 시간을 가져오기 위한 느린 bash 스크립트

오디오/비디오 지속 시간을 가져오기 위한 느린 bash 스크립트

현재 폴더에 있는 오디오/비디오 파일의 지속 시간을 포함할 HTML 파일을 생성하기 위해 bash 스크립트를 만들었습니다. 이 스크립트는 ffprobe자동 모드의 지속 시간과 fileMIME 유형을 가져오는 데 사용됩니다 . 스크립트가 예상대로 작동하지만조금 느린 느낌이 듭니다. 속도를 높일 수 있을지 궁금합니다.. 그러나 저는 스크립팅 경험이 없고 시간 분석 도구도 모릅니다. 이 주제에 대한 stackoverflow 답변을 찾았지만 시간 분석은 새로운 라이브러리나 방법을 제안할 수 없습니다.

나는 파이썬 세계에서 opencv를 사용하기 위한 SO에 대한 제안을 접했고 벤치마크는 유망해 보였지만 단지 이를 위해 크든 작든 거대한 라이브러리와 그 종속성을 설치하는 것에 대해 조심스럽습니다.

편집하다: 느리다고 느낀다는 것은 내가 사용하고 있는 일부 명령이나 사용 방식에 대해 더 빠른 대안이 있다고 믿는다는 것입니다. 내 1년 된 HDD에서는 단 12개의 비디오 파일로 구성된 파일을 만드는 데 약 1초가 걸립니다. 쉘 스크립트이기 때문에 나는 이 스크립트가 C만큼 빠르거나 적어도 C만큼 빠르거나 적어도 최적화된 버전이기를 기대했습니다.

#!/bin/bash

today=$(date +"%Y-%m-%d-%H-%M-%S")
file=$(printf "duration-${today}.html")
tot_dur=0
echo "<!DOCTYPE html>
<html>
<head>
<style>
table {
  border: 1px solid black;
  border-collapse: collapse;
}
th, td {
  border: 1px solid black;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {background-color: #f5f5f5;}
</style>
</head>
<body>" >> "${file}"
echo "<table>" >> "${file}"
echo "<tr>
        <th>File</th>
        <th>Duration</th>
      </tr>" >> "${file}"
while read filename
do
    mime=$(file -b --mime-type "${filename}")
    IFS='/' read -r -a mime <<< "$mime"
    if [[ $mime == "video" || $mime == "audio" ]]; then
        duration=$(ffprobe -v quiet -of default=noprint_wrappers=1:nokey=1 -show_entries format=duration "${filename}")
        tot_dur=$(echo $tot_dur + $duration | bc -l)
        duration=$(printf '%02d:%02d:%02f\n' $(echo -e "$duration/3600\n$duration%3600/60\n$duration%60"| bc | xargs echo))
        echo "<tr><td>"${filename}"</td><td>"${duration}"</td></tr>" >> "${file}"
    fi
done < <(ls)
# (find . -type f)
tot_dur=$(printf '%02d:%02d:%02f\n' $(echo -e "$tot_dur/3600\n$tot_dur%3600/60\n$tot_dur%60"| bc | xargs echo))
echo "<tr>
        <td><b>Total</td>
        <td><b>${tot_dur}</td>
      </tr>" >> "${file}"
echo "</table>" >> "${file}"
echo "</body> </html>" >> "${file}"

분명히 말씀드리자면, 코드 리뷰에 이 질문을 게시했는데 아무런 응답도 받지 못했습니다.협회

관련 정보