READMEに指定方法が書かれておらず少しハマったのでそのメモ。
例えば、アイコン画像(ここではavator)を幅120pxでアスペクト比を維持したままリサイズするときには PaperClipのstyleで指定する記号の意味 にあるように、
has_attached_file :avatar,
styles: {
thumb: "120x"
},
default_url: "/images/:style/missing.png"
とすることでアスペクト比を維持したままheightを自動的に計算して変換してくれます。
動画(例えば.mp4)をリサイズする場合には、paperclipのprocessorを拡張する形で提供されている paperclip-av-transcoder と言うgemで実現できます。しかし、普通に
has_attached_file :movie,
styles: {
thumb: ["120x", 'mp4']
},
default_url: "/movies/:style/missing.mp4",
processors: [:transcoder]
とするとうまくいきません。これはpaperclip-av-transcoderでは内部でffmpeg(またはlibav)を使っていてオプションの指定方法が異なるためです。
次のようにすることで -vf "scale=120:-1"
の指定ができるようになるので、同様のことが実現できます。
has_attached_file :movie,
styles: {
thumb: {
format: 'mp4',
streaming: true,
convert_options: {
output: { vf: "scale=120:-1" }
}
},
},
default_url: "/movies/:style/missing.mp4",
processors: [:transcoder]