Bir videonun (mp4) kabuğu ne kadar süre kullandığını nasıl kontrol edebilirim?


16

Kabuğunu kullanarak uzunluğu> 4 dakika olan bir dizindeki tüm mp4 dosyalarını ftp yüklemeniz gerekir. Bir videonun ne kadar uzun olduğunu kontrol etmek için herhangi bir komut dosyası bulamıyorum. Bunun nasıl yapılacağı hakkında bir fikri olan var mı?

Çok teşekkür ederim!


1
bu stackoverflow.com/questions/3844430/… :-) umarım bu yardımcı olur
harish.venkat

Yanıtlar:


23

Bu size bir videonun uzunluğunu verecektir.

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

Ayrıca uzak video URL'leri için de çalışır, örneğin ffmpeg -i " instagram.fewr1-1.fna.fbcdn.net/t50.2886-16/… " 2> & 1 | grep Süre | kes -d '' -f 4 | sed s /, //
skidadon

FFmpeg günlük iletileri biçimi garanti ediliyor mu? Değilse, bu kadar sevmiyorum - herhangi bir sürümle çalışmayı durdurabilir.
Ondra 24ižka

7

Mediainfo bu amaç için hızlı bir araçtır:

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

Daha kapsamlı bir cevapta daha fazla seçenek bulabilirsiniz .

Testlerimde ffprobe0,3 saniye ve mediainfo0,09 saniye sürüyor.


Bu tuhaf sonuçlar verir ... 2679600 gibi ... daha iyi kullanmak mediainfo --Inform="Video;%Duration/String%" [inputfile]... hangi bir şey size 43 dk 50s olsun
Robert Riedl

5

Avconv komutunu kullanmayı deneyebilirsiniz ..

İlk önce yüklemeniz gerekir:

Yazılım merkezi üzerinden yükleme

komutu -i bayrağıyla yazarsanız, video hakkında bilgi alırsınız:

avconv -i test.mp4

Çıktıda Süre adlı bir alan var

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

Şimdi yalnızca alan değerini almak için komutunu kullanabilirsiniz Süresi

Tür:

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

Benim durumumda sonuç:

00:58:28.05

58 Dakika ve 28.05 saniye.

Umarım bu yardımcı olacaktır!


1
Bu da ile kullanılabilir avprobe- buna gerek yoktur -i, ancak aksi takdirde tam olarak aynı şekilde çalışır. Ya ffprobeda @ per'in cevabı için.
evilsoup

4

exiftool(başlangıçta görüntü dosyalarından kamera meta verilerini okumak için tasarlanmıştır, ancak daha sonra hemen hemen her tür medya dosyasından meta veri okumak ve yazmak için genişletilmiştir ) bunun için çok uygundur. Şununla çalıştır:

exiftool FILE.mp4 | grep Duration

Muhtemelen önce yüklemeniz gerekir exiftool, ancak bu aşağıdaki komutla kolayca yapılır (Debian ve Ubuntu gibi türevlerde):

apt install libimage-exiftool-perl

Tabii ki, bu cevap sadece başka bir alternatif. Diğer cevapların çoğu da iyidir. :)


2

Daha da basit:

avprobe file.mp4 -show_format_entry duration

Şu anda "Seçenek 'show_format_entry' kullanımdan kaldırıldı mesajı alıyorum, bunun yerine '-show_entries format = duration' kullanın"
Faheem Mitha

1

Ekleme pers çözümü , bu bütün bir dizinde kullanılabilir:

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

| sortdosyaların uzunluğuna göre sıralanması için genişletilebilir .

bunu bir dizine yapabilmek için .bashrcveya bir dizine ekleyebilirsiniz.bash_aliaseslsvlength | 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çıktı yolu verilmezse hata atar daha zarif bir çözümdür .

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

0

Bir dizindeki bazı videoların süresini görmek istiyorsanız, aşağıdaki komutu kullanabilirsiniz

exiftool * | grep ^ Süre | kes -d '' -f 26


1
Kullanmaya gerek yok grepve böyle. Basitçe exiftool -T -Duration *.mkv(ya da herhangi bir dosya deseni)
PerlDuck

0

Gördüğünüz gibi bunu başarmanın çeşitli yolları vardır. ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATIONBurada mediafile dosyanın adıdır, aşağıdakine benzer çıktılar sağlar. Birincisi birinci akışın süresi (tipik olarak video) ve ikincisi ikinci akışın süresini (tipik olarak ses) sağlar

  DURATION        : 00:21:40.132000000
  DURATION        : 00:21:40.062000000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.