콘솔에서 비디오 파일의 길이를 얻는 방법?


21

비디오 파일 some_video가 있다고 가정합니다.

쉘 스크립트에서 길이를 얻는 방법 (mplayer / transcode / gstreamer / vlc / ffmpeg / 뭐든간에)?

VIDEO_LENGTH_IN_SECONDS=`ffmpeg .... -i some_video ... | grep -o .....`

답변:


26
ffprobe -i some_video -show_entries format=duration -v quiet -of csv="p=0"

동영상 재생 시간 (초)을 반환합니다.


몰랐어. ffprobe , 감사!
ckujau

20

비슷한 것 :

ffmpeg -i input 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//

그러면 다음과 같은 결과가 나옵니다. HH:MM:SS.ms. 당신은 또한 사용할 수 있습니다 ffprobe, 대부분의 FFmpeg 설치와 함께 제공됩니다 :

ffprobe -show_format input | sed -n '/duration/s/.*=//p'

... 또는 :

ffprobe -show_format input | grep duration | sed 's/.*=//')

초 단위로 변환하고 (밀리 초를 유지하려면) 다음으로 파이프하십시오.

awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }'

밀리 초로 변환하려면 다음으로 파이프하십시오.

awk '{ split($1, A, ":"); print 3600000*A[1] + 60000*A[2] + 1000*A[3] }'

밀리 초없이 초를 원한다면 다음으로 파이프하십시오.

awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'

예:

enter image description here


또한 tcprobe는이를 위해 설계되었지만 시스템에서 제대로 작동하지 않습니다.
Vi.

1
... 제 편집이 거부되었으므로 첫 번째 단계는 다음과 같이보다 간결하게 수행 할 수 있습니다. ffprobe, 이런 종류의 목적을 위해 설계된 도구로 ffmpeg: ffprobe -show_format input | sed -n '/duration/s/.*=//p' (또는 ffprobe -show_format input | grep duration | sed 's/.*=//' ). 어쩌면 @slhck이 이것을 바로 답안으로 편집 할 수 있습니다.
evilsoup

미안 해요, @evilsoup. 어쩌면 나는 너와 LordNeckbeard가 나의 포스트를 자유롭게 편집하는 것을 허용해야한다는 포기 선언을해야 할 것이다. 나는이 문제를 이미 몇 번이나 가지고있다. 다음 번에는 편집 메시지에 약간의 메모 만 추가하십시오. :)
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.