これでビデオから音声トラックをmp3に落したり、theora oggで保存録画したり、 かなり便利ツールになった。
#!/usr/bin/python
# -*-mode:python-*-
import os, re, sys
# configuration variables
command = 'ffmpeg -i %(fin)s %(args)s -vsync 2 -async 2 %(fout)s'
kinds = {'iPod high rate':('-s 320x240 -b 700k', 'mp4'),
'iPod long video':('-s 320x240 -b 400k -ab 64k -r 18', 'mp4'),
# 'iPod h264':('-s 320x240 -b 660k -vcodec libx264 -ab 100k -acodec libfaac', 'mp4'),
'audio only(mp3)':('-vn -ab 128k', 'mp3'),
'audio voribs ogg':('-vn -ab 128k -acodec libvorbis', 'ogg'),
'VGA theora ogg':('-s 640x480 -b 1600k -vcodec libtheora -acodec libvorbis', 'ogg')}
debug = False
# '(ipod mp3)':('-s 320x240 -b 700k -vcodec mpeg4 -acodec libmp3lame', 'mp3'),
# '(ipod aac)':('-s 320x240 -b 660k -vcodec libx264 -acodec libfaac', 'm4v'),
log = []
total = len(sys.argv)
count = 0
if total > 1:
progress = os.popen('echo -n "%s" | zenity --list --column=2 --checklist --column="ffmpeg setting"' % ('\n'+('\n\n'.join(kinds.keys())) + '\n'))
kind = progress.read().split('\n')[0]
if not kind:
print "No format selected"
sys.exit(0)
try:
for f in sys.argv[1:]:
args = kinds[kind][0]
suffix = kinds[kind][1]
fin = os.path.abspath(f)
fout = ''
count += 1
if not os.path.splitext(fin)[1] in ['.avi', '.divx', '.flv', '.mpeg', '.mpg', '.ogg', '.VOD', '.wmv']:
os.popen('zenity --error --text="%s can not be converted"' % fin)
continue
basename = re.sub(r'(.+)\.(avi|divx|flv|mpeg|mpg|ogg|VOD|wmv)$', '\\1', fin)
basename = re.sub('[:|()&# !]+', '_', basename)
if basename + '.' + suffix == fin:
basename += '-resized'
for number in ['', '-01', '-02', '-03', '-04', '-05']:
fout = basename + number + '.' + suffix
# os.popen('zenity --error --text="%s"' % fout)
if fout == fin:
continue
if not os.path.exists(fout):
break
pass
else:
progress = os.popen('zenity --error --text="filename for converted is used %s"' % fout)
continue
dic = {'num':count,
'fin':re.sub('([&;() ])', r'\\\1', fin),
'fout':fout,
'_fin':os.path.basename(fin),
'_fout':os.path.basename(fout),
'suffix':suffix,
'args':args}
if total == 2:
message = "Generating %(_fout)s from %(_fin)s ..." % dic
elif count == 2:
message = "Generating 2nd file: %(_fout)s from %(_fin)s ..." % dic
else:
message = "Generating %(num)dth file: %(_fout)s from %(_fin)s ..." % dic
pass
progress = os.popen('zenity --progress --text="%s" --auto-close' % message, 'w', 0)
if debug:
print command % dic
else:
os.system(command % dic)
progress.write("%d\n" % (100.0*count/total))
pass
pass
except Exception, e:
progress = os.popen('zenity --info --text="Error %s"' % e, 'w', 0)
pass
pass
else:
print "Please call this script inside nautilus"
sys.exit(0)
これでビデオから音声トラックをmp3に落したり、theora oggで保存録画したり、 かなり便利ツールになった。
#!/usr/bin/python
# -*-mode:python-*-
import os, re, sys
# configuration variables
command = 'ffmpeg -i %(fin)s %(args)s -vsync 2 -async 2 %(fout)s'
kinds = {'iPod high rate':('-s 320x240 -b 700k', 'mp4'),
'iPod long video':('-s 320x240 -b 400k -ab 64k -r 18', 'mp4'),
# 'iPod h264':('-s 320x240 -b 660k -vcodec libx264 -ab 100k -acodec libfaac', 'mp4'),
'audio only(mp3)':('-vn -ab 128k', 'mp3'),
'audio voribs ogg':('-vn -ab 128k -acodec libvorbis', 'ogg'),
'VGA theora ogg':('-s 640x480 -b 1600k -vcodec libtheora -acodec libvorbis', 'ogg')}
debug = False
# '(ipod mp3)':('-s 320x240 -b 700k -vcodec mpeg4 -acodec libmp3lame', 'mp3'),
# '(ipod aac)':('-s 320x240 -b 660k -vcodec libx264 -acodec libfaac', 'm4v'),
log = []
total = len(sys.argv)
count = 0
if total > 1:
progress = os.popen('echo -n "%s" | zenity --list --column=2 --checklist --column="ffmpeg setting"' % ('\n'+('\n\n'.join(kinds.keys())) + '\n'))
kind = progress.read().split('\n')[0]
if not kind:
print "No format selected"
sys.exit(0)
try:
for f in sys.argv[1:]:
args = kinds[kind][0]
suffix = kinds[kind][1]
fin = os.path.abspath(f)
fout = ''
count += 1
if not os.path.splitext(fin)[1] in ['.avi', '.divx', '.flv', '.mpeg', '.mpg', '.ogg', '.VOD', '.wmv']:
os.popen('zenity --error --text="%s can not be converted"' % fin)
continue
basename = re.sub(r'(.+)\.(avi|divx|flv|mpeg|mpg|ogg|VOD|wmv)$', '\\1', fin)
basename = re.sub('[:|()&# !]+', '_', basename)
if basename + '.' + suffix == fin:
basename += '-resized'
for number in ['', '-01', '-02', '-03', '-04', '-05']:
fout = basename + number + '.' + suffix
# os.popen('zenity --error --text="%s"' % fout)
if fout == fin:
continue
if not os.path.exists(fout):
break
pass
else:
progress = os.popen('zenity --error --text="filename for converted is used %s"' % fout)
continue
dic = {'num':count,
'fin':re.sub('([&;() ])', r'\\\1', fin),
'fout':fout,
'_fin':os.path.basename(fin),
'_fout':os.path.basename(fout),
'suffix':suffix,
'args':args}
if total == 2:
message = "Generating %(_fout)s from %(_fin)s ..." % dic
elif count == 2:
message = "Generating 2nd file: %(_fout)s from %(_fin)s ..." % dic
else:
message = "Generating %(num)dth file: %(_fout)s from %(_fin)s ..." % dic
pass
progress = os.popen('zenity --progress --text="%s" --auto-close' % message, 'w', 0)
if debug:
print command % dic
else:
os.system(command % dic)
progress.write("%d\n" % (100.0*count/total))
pass
pass
except Exception, e:
progress = os.popen('zenity --info --text="Error %s"' % e, 'w', 0)
pass
pass
else:
print "Please call this script inside nautilus"
sys.exit(0)
Your feedback (comment or TB), please!
Comment-back
Track-back
Ping-back
NOT AVAILABLE NOW

