FFmpeg でオーディオファイルの音量を調整する

Windows 10 に付属する標準の音楽プレイヤーは曲ごとに再生時の音量を設定することができないようなので、 FFmpeg を使って MP3 や AAC の音量を調整した。

ここで使用した FFmpeg のバージョンは N-93565-g0ad0533e91 (2019/2)。

ffmpeg -i INPUT -c:v copy -filter:a "volume=-6dB" OUTPUT

オプションの詳細は次の通り。

  • -i INPUT …… 入力ファイル
  • -c:v copy …… 映像パートはコピーする
  • -filter:a "volume=-6dB" …… 音声にフィルタを適用する
    • 音量は -6dB のようにも調整できるし、 0.5 など [0, 1] の値を設定することもできる。デシベル値を設定する場合は B が大文字でないといけないことに注意
  • OUTPUT …… 出力ファイル

macOS Mojave をクリーンインストールした

Catalina から Mojave にダウングレードするため macOS Mojave をクリーンインストールした。

この Mac にプリインストールされていた OS は Mojave だったので、Mac の起動直後に shift + option + command + R キーを押し、プリインストールされていたバージョンに最も近い OS をインストールした。OS のインストール自体は 1 時間足らずで完了。

データの復元は Time Machine バックアップで難なくできた。400 GB ほどのデータで 5 時間ほどかかった。

Homebrew を macOS Mojave にインストール

Homebrew のサイトに記述されている次のコマンドを実行すると、インストールされるファイルやディレクトリの一覧が表示される。

% ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
==> The following new directories will be created:
/usr/local/bin
/usr/local/etc
/usr/local/include
/usr/local/lib
/usr/local/sbin
/usr/local/share
/usr/local/var
/usr/local/opt
/usr/local/share/zsh
/usr/local/share/zsh/site-functions
/usr/local/var/homebrew
/usr/local/var/homebrew/linked
/usr/local/Cellar
/usr/local/Caskroom
/usr/local/Homebrew
/usr/local/Frameworks
==> The Xcode Command Line Tools will be installed.
Homebrew でインストールしたパッケージ
brew install rbenv ruby-build readline
brew install ffmpeg
brew install imagemagick
brew install dnsmasq
brew install unar

Node.js のインストール

Node.js は最新の推奨バージョン 12.14.1 をインストーラからインストールした。

MuseScore プラグイン API

サンプル

Score

プロパティ/メソッド 説明
newCursor() : Cursor
nstaves : Number 譜表の数

Cursor

プロパティ/メソッド 説明
staffIdx : Number 譜表のインデックスを参照または設定する
voice : Number 声部のインデックスを参照または設定する [0, 4)
segment : ?
element : Element カーソル位置の要素を取得する
rewind (position : Number) : void カーソル位置を指定の場所に巻き戻す
next () : void カーソルを次の位置に進める

Element

プロパティ/メソッド 説明
type : ElementType 要素の型を取得する
notes : Note[] コードに含まれる音符のリスト。低い順
ElementType
説明
Element.CHORD コード(音符)
Element.REST 休符

Note

プロパティ/メソッド 説明
type : Number
name : String
parent : Object
selected : Boolean
visible : Boolean
small : Boolean
offsetX : Number
offsetY : Number
z : Number
lineType : ?
line : Number
direction : ?
velocity : Number ベロシティを参照もしくは設定
veloOffset : Number 相対ベロシティを参照もしくは設定

ブラウザ版 YouTube プレイヤーの表示を改善する

操作ボタン

.ypt-chrome-bottom プログレスバー、再生、ボリューム、設定等のボタンがある部分。次のようにして動画の外に持っていける。

#info {
    margin-top: 40px !important;
}
.html5-video-player {
    overflow: visible;
    z-index: 100;
}
.ytp-chrome-bottom {
    z-index: 999;
    bottom: auto;
    top: 100%;
    opacity: 1 !important;
    background: #444;
}
.ytp-gradient-bottom {
    display: none;
}

動画上に出てくる広告

画面下に持っていく。

.ytp-ad-overlay-slot {
    position: fixed !important;
    bottom: 0 !important;
    top: auto;
}

ルックアップテーブル(LUT)を作成して写真や動画に適用する

アクションカメラ Osmo Action の D-Cinelike カラーモードで撮影された素材に、iOS 写真アプリの「ビビッド」補正をかけたら超いい感じの色になったのでそれを静止画でも使ってみたくなった。

D-Cinelike は後から色補正をしやすくするため広いダイナミックレンジを持ち、そのためコントラストや彩度が低いカラーモードで、他のカメラでは Log という名前が付いていることが多い。

LUT について

ルックアップテーブル(Lookup table; LUT)は取りうる入力に対する出力を羅列した写像のデータで、計算機上で複雑な演算を何度も行う必要があるときに効率化をするものである。

とりわけ画像処理の分野では画像の色補正に使用される。特に動画像の場合は補正対象のピクセルがフレーム数分必要になるため古くからよく使用されていたようだ。静止画では「フィルタ」として Instagram によって一般にも普及した(Instagram のフィルタは画面の領域によっても色が変化する)。

静止画では Adobe の策定した Cube LUT という形式の LUT ファイルが Adobe Photoshop や Affinity Photo など主要な画像処理ソフトウェアで使用できる。.cube という拡張子を持つ。

LUT を作成する

LUT を作成するためのプログラムは次の場所に用意した。lutsrc64.png に色調補正を行なった画像を mklut64 に読み込ませると Cube LUT ファイルを生成する。

iPhone に取り込んだ lutsrc64.png を写真アプリで「ビビッド」フィルタを適用し、PC に持ってきて mklut64 を実行して LUT(Vivid.cube)を作成した。

Affinity Photo を使用して LUT を適用する

まず超いい感じの色にするために Raw 画像からコントラストと彩度を抑え、できるだけ明るいところから暗いところまで万遍なく情報を残した画像を出力する。そしたら Affinity Photo に読み込もう。

ここで現像ソフトの設定で出力画像を 16 bit/channel にすること。8 bit ではトーンジャンプを起こしてしまう。

f:id:scientre:20190925223855j:plain

続いてレイヤーパネルの [調整] > [LUT...] を選び LUT 調整レイヤーを作成する。LUT の設定パネルで先ほど作成した Vivid.cube を読み込む。

f:id:scientre:20190925223906j:plain

これだけでも雰囲気のよい画像になったが、明るさが時間によって変化する動画に比べて静止画ではつまらない感じになってしまったので調整したものが次の画像。

f:id:scientre:20190915120349j:plain

カメラでの撮って出し画像も比較のために載せておく(EOS RP + EF28-105mm F3.5-4.5 II USM、ピクチャースタイル スタンダード)。

f:id:scientre:20190915120351j:plain

DaVinci Resolve を使用して LUT を適用する

Vook さんのこちらの記事を参照。

FFmpeg を使用して LUT を適用する

FFmpeg で 3D LUT を適用するには -vf (-filter:v) オプションを使用する。

% ffmpeg -i INPUT.mp4 \
   -vf lut3d="LUT.cube" \
   -pix_fmt yuv420p \
   -b:v 5M \
   -map_metadata 0 \
   OUTPUT.mp4

この例では LUT の適用以外に次の設定を行っている。

  • -pix_fmt yuv420p …… ピクセルフォーマットの指定。FFmpeg デフォルトの YUV444 では出力サイズが大きくなるのと一部のプレイヤー(Windows Media Player)で再生できないので、最終的な出力として一般的な YUV420 を指定している
  • -b:v 5M …… 映像のビットレートiPhone で撮影したときのビットレートが 5 Mbps くらい
  • -map_metadata 0 …… 撮影日時などのメタデータを出力ファイルに引き継ぐ