おうちの雑品スクリプトの第二弾、video2mp4 をpython化します。 まず、元のRuby版はこんな感じ。
#!/usr/bin/ruby
album = "default"
artist = "default"
ARGV.each{|f|
if f =~ /\-(album|artist)/
if f =~ /\-album=(.+)$/i
album = $1.clone
elsif f =~ /\-artist=(.+)$/i
artist = $1.clone
end
next
end
p f
if File.exist?(f) == true && f =~ /\.(mkv|webm|avi|mov)$/i
ofn = f.gsub(/\.(mkv|webm|avi|mov)$/i,".mp4")
p ofn
if f != ofn && File.exist?(ofn) == false
Dir.mkdir("mp4") if File.exist?("mp4") == false
system("ffmpeg -i \"#{f}\" -y -metadata ALBUM=\"#{album}\" -metadata ARTIST=\"#{artist}\" \"mp4/#{ofn}\"")
else
p "Exist #{ofn}"
end
else
p "Not Exist #{f}"
p "Exist" if File.exist?(f) == true
p "ExistOK" if f =~ /\.(ogv|mkv|webm|avi|mov)$/i
end
}
ふむふむ。
メタ情報いじってるのは歴史的経緯で、今は使ってないのでこの機会に取っ払いましょうか。
他にもいくつか、今は不要なのを消します。
さて、これをpython化すると……。
#!/usr/bin/python3
import os
import re
import subprocess
import sys
p = re.compile(r'\.(avi|mov|mkv|webm)$',flags=re.IGNORECASE)
for i in sys.argv:
if(p.search(i) != None):
j = re.sub(p,'.mp4',i)
if(not os.path.isfile(j)):
print("不在:"+j)
x = "nice -n 20 ffmpeg -i \""+i+"\" \""+j+"\""
subprocess.run(x,shell=True)
うん、最低限の機能だけ載せたら、めっちゃスッキリしたわね。
興味深いのは、Rubyでは追加モジュールなしで動いていた点ね。
ここは正直いって **Pythonの欠点** だと思うけど、それは日本語と米語どっちが優れてるか、みたいな話でそもそも意味がない。そこは「別の言語だから」と気にしない事ね。