0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ruby と FFmpeg で mov 形式の動画を mp4 形式に圧縮・変換する

Last updated at Posted at 2025-10-05

やりたいこと

僕はヨーヨーが好きでトリックを日々練習しています。ちなみに、今頑張って練習しているが以下のトリックです。

このトリック動画の一部を 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 に無事に添付することができました!

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)

参考

  1. オプションとして hash を渡すこともできます。その場合は専用のパーサーが hash を実際のオプションに変換します。hash で指定可能なオプションについては FFMPEG::EncodingOptions の実装を参考にしてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?