그래서 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>&1
stderr를 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
할 수 있습니다 .-sexagesimal
HH: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