やりたいこと
僕はヨーヨーが好きでトリックを日々練習しています。ちなみに、今頑張って練習しているが以下のトリックです。
このトリック動画の一部を mov 形式で録画したものを個人の Notion (無料版) に添付しようと思ったら、5MB のサイズ制限のせいで添付できませんでした 😢 そこで Ruby と FFmpeg を使って mov 形式の動画を mp4 形式に圧縮・変換してみました。
方法
まず Homebrew で FFmpeg をインストールします (macOS 限定) 。そして Ruby で FFmpeg を便利に使うための Streamio FFMPEG (streamio-ffmpeg) をインストールします。
$ brew install ffmpeg
$ gem install streamio-ffmpeg
require 'streamio-ffmpeg'
movie_path = Pathname(Dir.home).join("Downloads/part_of_yuuki-s_tech_combo.mov")
movie = FFMPEG::Movie.new(movie_path.to_s)
# ファイルサイズは約 8.1MB。
movie.metadata[:format].slice(:filename, :size)
#=> {filename: "/Users/quanon/Downloads/part_of_yuuki-s_tech_combo.mov", size: "8132048"}
ffmpeg_options = %w(
-c:v libx264
-crf 25
-vf scale=-2:720
-c:a aac
-b:a 128k
-movflags +faststart
-map_metadata -1
).freeze
converted_movie_path = movie_path.dirname.join("#{movie_path.basename('.*')}.mp4")
converted_movie = movie.transcode(converted_movie_path.to_s, ffmpeg_options)
# ファイルサイズは約 4.9MB。
converted_movie.metadata[:format].slice(:filename, :size)
#=> {filename: "/Users/quanon/Downloads/part_of_yuuki-s_tech_combo.mp4", size: "4927732"}
FFMPEG::Movie#transcode の第 2 引数に色々なオプションを渡していますが、意味は以下の通りです。1
オプション | 説明 |
---|---|
-c:v libx264 | エンコーディングに H.264(x264)を使う。 |
-crf 25 | CRF (Constant Rate Factor) の値を指定して動画の出力品質を調整する。低いほど品質が上がる (0~51) 。 |
-vf scale=-2:720 | 動画を縦 720p にアスペクト比を維持しつつ縮小する。 |
-c:a aac | 音声のエンコーディングに AAC を使う。 |
-b:a 128k | 音声の平均ビットレートを 128kbps にする。 |
-movflags + faststart | MP4 の目次 (moov atom) をファイル先頭へ移動。プログレッシブダウンロード対応のため。 |
-map_metadata - 1 | 出力する動画ファイルのグローバルメタデータを全て削除する。 |
変換したおかげで Notion に無事に添付することができました!

バージョン情報
$ ruby -v
ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [arm64-darwin24]
$ ffmpeg -version
ffmpeg version 8.0 Copyright (c) 2000-2025 the FFmpeg developers
(略)
$ gem list | grep streamio-ffmpeg
streamio-ffmpeg (3.0.2)
参考
-
オプションとして hash を渡すこともできます。その場合は専用のパーサーが hash を実際のオプションに変換します。hash で指定可能なオプションについては FFMPEG::EncodingOptions の実装を参考にしてください。 ↩