Herhangi bir video dosyasının saniyesinde kare nasıl bulunur?


44

Ubuntu'da bir videonun fpsini bulmanın basit bir yolu var mı? Pencerelerde bir video dosyasıyla ilgili tüm bilgileri bulmak için Gspot kullanıyorum. Ancak ubuntu'da bu temel bilgiyi bulmak çok zor. Herhangi bir yardım takdir edilmektedir.


Bu mümkün değildir, çünkü tüm video dosyalarında "fps" yoktur (çünkü VFR kodlaması vardır).
fkraiem

VFR videoları hala ortalama kare hızına sahip - bunun yararlı olup olmadığı uygulamaya bağlı.
thomasrutter

Yanıtlar:


47

Değişken kare hızı değilse size kare hızını söyleyecektir:

ffmpeg -i dosya adı

Dosya adı gizlenmiş olan örnek çıktı:

Giriş # 0, matroska, webm, 'somerandom.mkv' adresinden:
  Süre: 01: 16: 10.90, başlangıç: 0.000000, bit hızı: N / A
    Akış # 0.0: Video: h264 (Yüksek), yuv420p, 720x344 [PAR 1: 1 DAR 90:43], 25 fps, 25 tbr, 1k tbn, 50 tbc (varsayılan)
    Akış No. 0.1: Ses: aac, 48000 Hz, stereo, s16 (varsayılan)
ffmpeg -i dosya adı 2> & 1 | sed -n "s /.*, \ (. * \) fp. * / \ 1 / p"

İstediğim gibi çalışmayan biriyle düzenlenmiş biri. Bu başvuruda bulunulur burada
sen tbr değerini bu sed hat eserlerini istiyorsan ... Ek düzenleme

sed -n "s /.*, \ (. * \) tbr. * / \ 1 / p"

Tek astarda fp yerine tb kullanmam gerekiyordu. Tüm video dosyalarının fps bildirmediği, tüm yazarın aynı değere sahip olan tbr tbc gibi bir şey olduğu görülüyor.
sup

geçerli, ancak düzenlemedeki tek astar, bu belirli çıktı kümesindeki tbr değerini değil, tbc değerini çıktı. neden değiştiğimi düşünmek için bir şey ... hiç fark edilmemiş bir şekilde değil, gerçekten farkedilebilir bir şekilde başarısız olacağım.
RobotHumans,

Sanırım sonunda sed -n "s/.*, \(.*\) tbr.*/\1/pözlüyor ", değil mi?
sup

6
ffmpeg onaylanmadı, avconv bir ffmpeg şubesinden geldi ve ffmpeg alternatifini kullananlar için kafa karışıklığını önlemek için sahte dalın bu kullanıcıların kullandıkları sürümün değiştiğini bilmelerini sağlamak için kullanımdan kaldırıldı olarak işaretlendi. Yorumunuz yanıltıcıdır ve kullanıcıların bu konuyu araştırmak için zaman kaybetmesine neden olabilir
Chris

1
Değişken kare hızı ise?
28'de

29
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile

Sonuç:

2997/100

3
Bu muhtemelen EXACT kare hızını verdiği için en iyi cevaptır (örn. 24000/1001 = 23.976023976)
ntg

1
bazen 0/0biçime bağlı olarak
alıyorum

1
İstediğinize bağlı olarak, bu ya çalışır ya da olmaz. Kodlamanın kare hızını bildirir, ancak videonun gerçek kare hızını bildirmez. Örneğin, 60fps'ye kodlanmış bir 30fps video 60fps'yi rapor eder, ancak gerçek çıktıda 30fps olacaktır.
Harvey,

8
Video akışı ilk akış değilse, bu işe yaramadıysa, ses akışına bakarsa 0/0 elde edersiniz. -select_streams V:0İlk hareketli video akışını seçecek olan düzenlemeyi yapacağım .
Sam Watkins,

2
@ SamWatkins'in tamamlayıcısı önemlidir. Onsuz, komut çıktı verdi 0/0.
jdhao

4

İşte tam kare hızı veren ffprobe kullanarak Steven Penny'nin cevabına dayanan bir python işlevi

ffprobe 'Upstream Color 2013 1080p x264.mkv' -v 0 -select_streams v -print_format flat -show_entries stream=r_frame_rate
import sys
import os
import subprocess
def get_frame_rate(filename):
    if not os.path.exists(filename):
        sys.stderr.write("ERROR: filename %r was not found!" % (filename,))
        return -1         
    out = subprocess.check_output(["ffprobe",filename,"-v","0","-select_streams","v","-print_format","flat","-show_entries","stream=r_frame_rate"])
    rate = out.split('=')[1].strip()[1:-1].split('/')
    if len(rate)==1:
        return float(rate[0])
    if len(rate)==2:
        return float(rate[0])/float(rate[1])
    return -1

2

Komut satırına alternatif, dosyanızın özelliklerine Nautilus'taki bağlam menüsünden (grafik dosya yöneticisi) bakıyor. Ses / video dosyaları için orada ek bilgiler içeren ek bir sekme olsun.


2

Bu, herkesin ilgisini çekmesi durumunda, mplayer kullanarak bunu yapmak için kullanılan bir python betiğidir. path/to/script path/to/movie_name1 path/to/movie/name2Vb kullanılır

#!/usr/bin/python
# -*- coding: utf-8 -*-

import subprocess
import re
import sys

pattern = re.compile(r'(\d{2}.\d{3}) fps')
for moviePath in sys.argv[1:]:
    mplayerOutput = subprocess.Popen(("mplayer", "-identify", "-frames", "0", "o-ao", "null", moviePath), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
    fps = pattern.search(mplayerOutput).groups()[0]
    print fps

0

Hedef dosyaya, Özellikler, Ses / Video'ya sağ tıklayabilirsiniz ancak tam kare hızını elde edemezsiniz. Kesin bir kare hızı elde etmek için MediaInfo uygulamasını yükleyebilirsiniz.


0

Birisi bunun üzerine tökezlediğinde ... tabii ki input arg'u yol olarak kullanabilirsiniz;)

import numpy as np
import os
import subprocess

def getFramerate():
    con = "ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1:nokey=1 D:\\Uni\\Seminar\\leecher\\Ninja\\stream1.mp4"

    proc = subprocess.Popen(con, stdout=subprocess.PIPE, shell=True)
    framerateString = str(proc.stdout.read())[2:-5]
    a = int(framerateString.split('/')[0])
    b = int(framerateString.split('/')[1])
    return int(np.round(np.divide(a,b)))

0

Genellikle exiftoolherhangi bir dosya türünden bilgi almak için kullanılır ... Örneğin komut exiftool file.swfile herhangi bir SWF dosyasının kare hızını, başaramadığım bir şeyi biliyorumffmpeg


-1
ffprobe <media> 2>&1| grep ",* fps" | cut -d "," -f 5 | cut -d " " -f 2

1
ne yapacağını açıkla?
rʒɑdʒɑ
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.