MP3 파일 및 재생 시간 나열

MP3 파일 및 재생 시간 나열

그래서 MP3 파일 목록과 재생 시간을 표시하고 싶습니다.

ffprobe파일의 지속 시간을 표시합니다. 그러나 그 출력은 끔찍합니다. 여기에는 모든 것이 들어 stderr있으며 컴파일 방법에 대한 "매우 유용한" 정보를 제거할 방법이 없습니다.

따라서 반복하면 *.mp3메시지가 매번 표시됩니다.

필터 스크립트를 작성할 수 있지만 더 쉬운 솔루션이 있을까요?

답변1

다음과 같은 출력을 얻으려면:

00:07:22 first.mp3
00:02:33 second.mp3
00:04:04 third.mp3

사용:

for file in *.mp3
do
  echo -n $(ffprobe "$file" 2>&1 | grep 'Duration' | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1)
  echo " $file"
done 

어디

  • 2>&1stderr를 stdout으로 리디렉션
  • grep ...기간이 있는 행만 필터링
  • 첫 번째 cut ...발췌Duration: 00:07:22.33
  • 두 번째 cut ...발췌00:07:22.33
  • 세 번째 cut ...발췌00:07:22

답변2

stderr이 옵션을 이용하면 -loglevel -quiet입력한 정보를 쉽게 삭제할 수 있습니다 . 이 경우 표시하려는 필드를 쿼리해야 합니다.

[user@host ~]$ ffprobe -loglevel quiet -show_entries format=duration test/test.mp3 
[FORMAT]
duration=172.434286
[/FORMAT]

이제 이는 초 단위의 지속 시간과 함께 압축할 수 있는 몇 가지 추가 정보를 제공합니다.

[user@host test]$ ffprobe -loglevel quiet -show_entries format=duration \-print_format default=noprint_wrappers=1:nokey=1 -pretty test.mp3 
0:02:52.434286

여기에서 -print_format다음을 사용하여 추가 정보를 제거할 수 있습니다.

  • default=noprint_wrappers=1이런 [FORMAT]것들은 삭제될 거예요
  • nokey=1키 이름이 삭제됩니다.duration=

마지막으로, 지속 시간(초 단위)을 일부 형식으로 사용하거나 변환 -pretty할 수 있습니다 .-sexagesimalHH:MM:SS.MICROSECONDS


폴더에 있는 모든 MP3 파일을 찾으려면 위의 명령을 결합할 수 있습니다 find.ffprobe

[user@host ~]$ find test/ -name '*mp3' -printf "%f:\t" -exec ffprobe -loglevel error -print_format default=noprint_wrappers=1:nokey=1 -pretty -show_entries stream=duration "{}" \;
test.mp3:   0:02:52.434286

관련 정보