ビデオファイルの毎秒のフレームを見つける方法は?


44

Ubuntuのビデオのfpsを見つける簡単な方法はありますか?Windowsでは、Gspotを使用して、ビデオファイルに関するすべての情報を見つけます。しかし、ubuntuでは、この基本的な情報を見つけることは非常に困難です。どんな助けも大歓迎です。


すべてのビデオファイルに「fps」があるわけではないため(VFRエンコーディングが存在するため)、これは不可能です。
fkraiem

VFRビデオにはまだ平均フレームレートがあります-これが有用かどうかは、アプリケーションによって異なります。
thomasrutter

回答:


47

これにより、可変フレームレートでない場合のフレームレートがわかります。

ffmpeg -iファイル名

ファイル名が隠されたサンプル出力:

「somerandom.mkv」からの入力#0、matroska、webm:
  期間:01:16:10.90、開始:0.000000、ビットレート:N / A
    ストリーム#0.0:ビデオ:h264(高)、yuv420p、720x344 [PAR 1:1 DAR 90:43]、25 fps、25 tbr、1k tbn、50 tbc(デフォルト)
    ストリーム#0.1:オーディオ:aac、48000 Hz、ステレオ、s16(デフォルト)
ffmpeg -i filename 2>&1 | sed -n "s /.*、\(。* \)fp。* / \ 1 / p"

誰かが私が望んでいた方法で動作しないもので編集しました。ここで参照されています
追加の編集...このsed行が機能するTBR値が必要な場合

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

ワンライナーでfpの代わりにtbを使用する必要がありました。すべてのビデオファイルがfpsを報告するわけではなく、すべてのautputがtbr tbcのように同じ値を持っているようです。
supの

有効ですが、編集のワンライナーは、この特定の出力セットのtbr値ではなくtbc値を出力しました。私がそれを変更した理由について検討するもの...私はむしろ、まったく気付かない方法よりも本当に目立つ方法で失敗するでしょう。
RobotHumans

結局はsed -n "s/.*, \(.*\) tbr.*/\1/pミスだと思う"
sup

6
ffmpegは非推奨ではありません。avconvはffmpegのブランチに由来し、ffmpegの代替を使用しているユーザーの混乱を避けるため、fakeブランチは非推奨としてマークされ、使用しているバージョンが変更されていることをユーザーに知らせます。あなたのコメントは誤解を招くものであり、ユーザーがこれを調査する時間を無駄にする可能性があります
クリス

1
可変フレームレートの場合はどうなりますか?
0xcaff 16

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

結果:

2997/100

3
それは(例= 23.976023976 1001分の24000に)EXACTフレームレートを与えるという点で、これはおそらく最良の答えである
NTG

1
時々私0/0は形式に依存します
Daniel_L

1
あなたが望むものに応じて、これは動作するかしないかのどちらかです。エンコードのフレームレートはレポートしますが、ビデオの実際のフレームレートはレポートしません。たとえば、60fpsにエンコードされた30fpsビデオは60fpsを報告しますが、実際の出力では30fpsのままです。
ハーベイ

8
ビデオストリームが最初のストリームでない場合、これは機能しませんでした。オーディオストリームを見ると0/0になります。put -select_streams V:0に編集して、最初の動画ストリームを選択します。
サムワトキンス

2
@SamWatkinsの補完は重要です。それがなければ、コマンドはoutputを与えました0/0
jdhao

4

これは、正確なフレームレートを与えるffprobeを使用したSteven Pennyの回答に基づいたpython関数です。

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

コマンドラインの代わりに、Nautilus(グラフィカルファイルマネージャー)のコンテキストメニューを使用してファイルのプロパティを確認します。オーディオ/ビデオファイルの場合、追加の情報を含む追加のタブが表示されます。


2

これは、mplayerを使用してこれを行うためのPythonスクリプトです。使用されるpath/to/script path/to/movie_name1 path/to/movie/name2など

#!/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

ターゲットファイル、プロパティ、オーディオ/ビデオを右クリックできますが、正確なフレームレートは取得できません。正確なフレームレートを取得するには、MediaInfoをインストールできます。


0

誰かがこれに遭遇した場合に備えて...もちろん、入力引数をパスとして使用できます;)

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

私は通常exiftool、あらゆる種類のファイルの情報を取得するために使用しています...たとえば、コマンドexiftool file.swfを使用すると、swfファイルのフレームレートを知ることができます。ffmpeg


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

1
それが何をするのか説明してください。
rɑːdʒɑ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.