目次
はじめに
写真を撮影日時のフォルダに一括移動するの動画ファイル版である。
動画と同様にできるのだが、Exifと同様のgemを探すのに苦労する。 webを検索すると、かなり古いgemを使った記事ばかりで、あまり参考にならなかった。
ruby-ffmpegのインストール
困ったことに、これが公式なgemではないので、gem install ffmpeg でインストールできない。
ハマりポイント
無邪気に
gem install ffmpeg
とやると、かなり古い公式のffmpeg gemがインストールされてしまう。 これはバージョンが0.2.5。インストールはされるが使いかたが分からない。
ちなみにインストールされているgemのリストとバージョンを確認するには
gem list
とする。
なお、この古いgemをアンインストールするには
gem uninstall ffmpeg
とする。
ローカルでgemをビルド・インストール
GitHub – instructure/ruby-ffmpeg: Simple yet powerful ruby ffmpeg wrapper for reading metadata and transcoding moviesからソース(zipにした)をダウンロードする。zipを展開するとffmpeg.gemspec
があり、これに依存関係がある。この依存関係を満足するように必要なgemをインストールしておく。
rake buildが定義されていないようなので(理解が間違っているかも知れない)
gem build ffmpeg.gemspec
でビルドする。これで ffmpeg-6.1.2.gem
が生成される。
ここまで来れば
gem install -l ffmpeg-6.1.2.gem
でインストールできる。
Rubyプログラム
ようやくRubyのプログラムを書くことができる。
#!/usr/bin/env ruby
require 'ffmpeg'
require 'time'
require 'fileutils'
Dir.glob(%w(*.avi *.AVI *.mov *.MOV *.mp4 *.MP4 *.3gp)).each{|mov_path|
#mov_path = "IMG_0005.MP4"
media = FFMPEG::Media.new(mov_path)
p creation_at = media.metadata[:streams][0][:tags][:creation_time]
p time = Time.parse(creation_at)
p dir_name = time.strftime("%Y-%m-%d")
if !FileTest.exist?(dir_name)
puts "#{dir_name} does not exsit. Now newly made."
Dir.mkdir(dir_name)
end
FileUtils.mv(mov_path, dir_name)
}
media.metadata[:streams][0]
の部分は決め打ちで[0]にしてある(ここが一番分かりづらかった)。
これで良いかどうかは、実際のファイルで確認するほうが良いかも知れない。