비디오 (mp4)가 셸을 사용하는 시간을 확인하는 방법은 무엇입니까?


답변:


23

비디오 길이를 알려줍니다.

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

또한 원격 비디오 URL (예 : ffmpeg -i " instagram.fewr1-1.fna.fbcdn.net/t50.2886-16/… "2> & 1 | grep 기간 | 컷 -d ''-f 4 | sed s /, //
skidadon

FFmpeg 로그 메시지 형식이 보장됩니까? 그렇지 않다면, 나는 이것을 좋아하지 않습니다-그것은 모든 릴리스에서 작동을 멈출 수 있습니다.
Ondra Žižka

7

Mediainfo 는이 목적을위한 빠른 도구입니다.

$ mediainfo --Inform="Video;%Duration%"  [inputfile]

보다 철저한 답변 에서 더 많은 옵션을 찾을 수 있습니다 .

내 테스트에서는 ffprobe0.3 초가 mediainfo걸리고 0.09 초가 걸립니다.


이 같은 이상한 결과 ... 제공 2,679,600 보다 효율적으로 사용하는 ... mediainfo --Inform="Video;%Duration/String%" [inputfile]당신에게 이케 뭔가 얻을 것입니다 ... 43 개의 50
로버트 RIEDL

5

avconv 명령 을 사용할 수 있습니다 .

먼저 설치해야합니다 :

소프트웨어 센터를 통해 설치

-i 플래그와 함께 명령을 입력하면 비디오에 대한 정보를 얻을 수 있습니다.

avconv -i test.mp4

출력에는 Duration 이라는 필드가 있습니다

avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Nov  6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':

  Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s

이제 명령을 사용하여 Duration 필드의 값만 가져올 수 있습니다

유형:

avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//

필자의 경우 결과는 다음과 같습니다.

00:58:28.05

58 분 28.05 초

이것이 도움이 되길 바랍니다!


1
이것도 사용할 수 있습니다 avprobe-필요는 -i없지만 정확히 같은 방식으로 작동합니다. 또는 ffprobe@per의 답변입니다.
evilsoup

4

exiftool(원래는 이미지 파일에서 카메라 메타 데이터를 읽기위한 것이지만 나중에 거의 모든 종류의 미디어 파일 에서 메타 데이터 를 읽고 쓸 수 있도록 확장 됨 )는 매우 편리합니다. 다음과 같이 실행하십시오.

exiftool FILE.mp4 | grep Duration

exiftool먼저 설치해야 할 수도 있지만 데비안과 우분투와 같은 파생물에서 다음 명령으로 쉽게 수행 할 수 있습니다.

apt install libimage-exiftool-perl

물론이 답변은 또 다른 대안입니다. 다른 많은 답변도 좋습니다. :)


2

더 간단합니다 :

avprobe file.mp4 -show_format_entry duration

현재 '옵션'show_format_entry '가 사용되지 않습니다. 대신'-show_entries format = duration '을 사용하십시오'라는 메시지가 표시됩니다.
Faheem Mitha

1

pers solution에 추가 하면 전체 디렉토리에서 사용할 수 있습니다.

for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done

| sort파일을 길이별로 정렬 하도록 확장 할 수도 있습니다 .

당신은이를 추가 할 수 있습니다 .bashrc하거나 .bash_aliases할 수 있도록하기 위해 lsvlength | sort디렉토리에

alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done'

1

ffprobeffmpeg출력 경로가 제공되지 않으면 오류가 발생하는 것보다 더 우아한 솔루션 입니다.

ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1

0

디렉토리에서 일부 비디오의 지속 시간을 보려면 다음 명령을 사용할 수 있습니다

exiftool * | grep ^ 지속 시간 | 컷 -d ''-f 26


1
사용할 필요가 없습니다 grep. 간단히 exiftool -T -Duration *.mkv(또는 어떤 파일 패턴이든)
PerlDuck

0

보시다시피, 이것을 달성하는 많은 방법이 있습니다. ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATION여기서 mediafile 은 파일 이름이며 다음과 유사한 출력을 제공합니다. 첫 번째는 첫 번째 스트림의 지속 시간 (일반적으로 비디오)이고 두 번째는 두 번째 스트림의 지속 시간을 제공합니다 (일반적으로 오디오)

  DURATION        : 00:21:40.132000000
  DURATION        : 00:21:40.062000000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.