답변:
ffmpeg를 사용하면 길이를 스크립트에서 사용할 수있는 변수로 얻는 방법을 알 수 없습니다. 그러나 mp3info 는 않습니다.
mp3info -p "%S" sample.mp3 // total time in seconds
\n
새 줄도 인쇄하려면 추가하십시오 . > mp3info -p "%S\n" sample.mp3
// 총 시간 (초)
ffmpeg
다른 인수를주지 않으면 파일에 대해 알고있는 모든 것을 인쇄합니다. grep
"지속 시간"을 제외한 모든 것을 제거하는 데 사용하십시오 .
$ ffmpeg -i foo.mp3 2>&1 | grep Duration
Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s
당신은 또한 사용할 수 있습니다 mplayer
. "ID_LENGTH ="줄에 대한 Grep :
$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00
TOTLENGTH=0; for f in *.mp3; do LENGTH=$(mplayer -ao null -identify -frames 0 "$f" 2>&1 | awk -F= '/ID_LENGTH/ {print $2}' | awk -F. '{print $1}'); TOTLENGTH=$(($TOTLENGTH + $LENGTH)); done; echo $TOTLENGTH
모든 파일에서 오디오의 전체 길이를 초 단위로 인쇄하는 것과 같은 것을 사용할 수 있습니다 . 아마도 더 효율적으로 할 수 있지만 일회성으로 작성했기 때문에 내 요구에 충분했습니다. (두 번째 awk 호출은 소수점을 제거하므로 결과는 100 % 정확하지 않지만 다시 필요에 충분합니다.)
Estimating duration from bitrate, this may be inaccurate
. 이 답변은 Constant Bitrate MP3 에서만 유효하다고 생각합니다 .
흥미롭게도 EXIFTool 응용 프로그램은 MP3 지속 시간을 마지막 줄로 제공합니다!
$ exiftool somefile.mp3 ExifTool 버전 번호 : 7.98 파일 이름 : somefile.mp3 디렉토리 :. 파일 크기 : 49 MB 파일 수정 날짜 / 시간 : 2009 : 09 : 10 11 : 04 : 54 + 05 : 30 파일 형식 : MP3 MIME 유형 : 오디오 / mpeg MPEG 오디오 버전 : 2.5 오디오 레이어 : 3 오디오 비트 전송률 : 64000 샘플링 속도 : 8000 채널 모드 : 단일 채널 MS 스테레오 : 꺼짐 강도 스테레오 : 꺼짐 저작권 : False 원본 미디어 : True 강조 : 없음 ID3 크기 : 26 장르 : 블루스 소요 시간 : 1:47:46 (약)
사용하는 솔루션 ffmpeg
은 인터페이스로 디자인되지 않은 출력을 구문 분석하기 때문에 약간 깨지기 쉽습니다. 그들은 아마 몇 년 동안 계속 일할 것이라고 말했다.
ffmpeg
는 ffprobe
오디오 파일 (mp3를 포함한 많은 형식)에 대한 정보를 가져 오고 기계가 읽을 수있는 출력을 생성 할 수 있는 도구와 함께 제공됩니다 . 다음 명령은 노래 지속 시간을 가져옵니다.
ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'
ffprobe -show_entries stream=duration -of compact=p=0:nk=1 -v fatal song.mp3
위의 참조를 사용하는 간단한 방법이 있습니다.
mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'
10:47:15
그 값을 변수 mp3_full_length에 보냅니다.
mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
read -r mp3_full_length <<< `ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'`
# I can use this variable for my own purpose!
echo $mp3_full_length
10:47:15
사람들보다 감사합니다! 나는 당신의 아이디어와 지식을 사용합니다 읽기 주셔서 감사합니다, 좋은 하루 되세요! ;)