packages: subconv/subconv.py - mediainfo, file based fps detection
arekm
arekm at pld-linux.org
Sun Feb 21 11:01:49 CET 2010
Author: arekm Date: Sun Feb 21 10:01:49 2010 GMT
Module: packages Tag: HEAD
---- Log message:
- mediainfo, file based fps detection
---- Files affected:
packages/subconv:
subconv.py (1.7 -> 1.8)
---- Diffs:
================================================================
Index: packages/subconv/subconv.py
diff -u packages/subconv/subconv.py:1.7 packages/subconv/subconv.py:1.8
--- packages/subconv/subconv.py:1.7 Sat Feb 20 23:39:34 2010
+++ packages/subconv/subconv.py Sun Feb 21 11:01:41 2010
@@ -9,7 +9,7 @@
# Released under terms of GNU GPL
#
-import re, sys, getopt, string
+import re, sys, getopt, string, os, subprocess
def usage():
sys.stderr.write("""
@@ -28,6 +28,50 @@
""")
+def detect_file_fps(file):
+ """
+ Detect the FPS for a given media file
+ input: file name
+ returns: FPS
+ """
+ def mediainfo_fps(file):
+ f = subprocess.Popen(['mediainfo', '--Inform=Video;%FrameRate%', file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ (out, err) = f.communicate()
+ if not out:
+ return False
+ return float(out)
+
+ def file_fps(file):
+ f = subprocess.Popen(['file', file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ (out, err) = f.communicate()
+ if not out:
+ return False
+ re_fps = re.compile(r'^.*, (\d+\.{0,1}\d{0,}) fps,.*')
+ m = re_fps.match(out)
+ if m:
+ return float(m.group(1))
+ return False
+
+ print "Guessing fps",
+ file = os.path.basename(file)
+ if len(file) <= 4:
+ return False
+ dir = os.path.dirname(file)
+ if not dir:
+ dir = '.'
+ mfile = file[:-4]
+ ref = re.compile(r'^' + mfile + '.*')
+ for file in os.listdir(dir):
+ if not ref.match(file):
+ continue
+ fps = mediainfo_fps(file)
+ if not fps:
+ fps = file_fps(file)
+ if fps:
+ print "from file %s: %.3f" % (file, fps)
+ return fps
+ print " .. unknown"
+ return False
def detect_fps(list):
"""
@@ -47,7 +91,7 @@
last = int(m.group(2))
for i in range(0,len(most_current)):
- sys.stderr.write("%s %.2f Fps -> " % (str(i), most_current[i]))
+ sys.stderr.write("%s %.3f Fps -> " % (str(i), most_current[i]))
tot_sec = int(last / most_current[i])
min = tot_sec / 60
sec = tot_sec % 60
@@ -342,7 +386,9 @@
return read_srt(subs)
elif fmt == "mdvd":
if fps == -1:
- fps = detect_fps(subs)
+ fsp = detect_file_fps(file)
+ if not fps:
+ fps = detect_fps(subs)
return read_mdvd(subs, fps)
elif fmt == "auto":
return read_subs(file,detect_format(subs),fps)
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/subconv/subconv.py?r1=1.7&r2=1.8&f=u
More information about the pld-cvs-commit
mailing list