2HDのフロッピーに動画を入れないか?

2020年12月4日:一部の環境で本ページの「前進する社会主義」の映像,ならびにAV1の動画が再生されない事象について追記しました. 2021年1月20日:mp4に対応していないブラウザ向けにmkvでの動画を再生できるよう追加しました。

この記事はTokyo City University Advent Calendar 2020の3日目の記事です!
昨日はたっくんさんの「2DDのフロッピーに“聴ける”音楽を入れてみる」でした!今日もフロッピーです


1970年,8インチという超巨大サイズで登場した"それ"は,10年後にはソニー*1の手によって,3.5インチまで小型化した.しかし,その小さすぎる容量によって今ではほとんど使われなくなった"それ"が,今蘇える‒‒‒


こんにちは.日夜何かしらと格闘しているらぴーとです.今日はフロッピーに動画を入れてみようということでやっていきたいと思います.


もくじ

1.基礎知識

まずはこれを見ましょう.

今の副総理兼財務大臣がフロッピー1枚で全部できるようにするって言ってたので動画も見れるようにしなければいけませんね(適当)
ということでまずはフロッピーについて知りましょう.下のニコニコ大百科が詳しいです.
dic.nicovideo.jp

1.44MBとはいうものの1.44×10242バイトでも1.44×10002バイトでもない1,440×1024=1,474,560バイトが2HDフロッピーディスクの1.44MB物理フォーマットで保存できるデータ量の限界である。(1.44MBフォーマットでは512byte保存できるセクターが2,880個存在する)。
しかし、OSのファイル管理(論理フォーマット)のために、FAT領域やルートディレクトリのための領域が必要なので、ファイルの容量として実際使用できるのは1,457,664バイトである(そのため数%容量が大きく実際は入らない動画もかなり存在する)。

1.46MB≃1.38MiBくらいです多分(Windows上だと1.38MBって表示されますね)
これがどれくらいの容量なのかっていうのを考えると,非圧縮音源の代表wavファイルだと,ビットレートが1411.2kbpsですから,およそ0.18MB/です.つまりだいたい8秒くらいですね(イントロクイズかな?)

しかしこれが圧縮音源の代表MP3になるとビットレートを256kbpsにすると0.032MB/sですので,45秒くらいまで聞くことができます(Bメロの途中かな)
大体7倍弱くらいにはなりましたね.

この圧縮という技術をいかに活用するかというのが重要になってきます.
ではここでアニメのOPの標準である90秒(1分30秒)を入れるのにはどれくらいのビットレート以下であればいいのかを考えてみましょう.

単純ですね.
1.46MBを90sで割って,さらに8(bits/B)を乗算してやると大体126kbpsって出てきます.
これの続きは第5章でやります.とりあえず126kbpsという数字を覚えておいてください.

2.フロッピーとフロッピーディスクドライブってどこで売ってるの?

ところでフロッピーディスクってまだ販売されているのでしょうか?
調べてみました!
がわかりませんでした!
まだどこかで売っていると良いですね!

って冗談はさておいて残念ながらもう生産されていないそうです.メルカリで1枚100円くらいでセット販売されてるんでそれとかおとなしく買いましょう.(どっかに売ってたら教えてください買いにいきます)
もしくは押し入れとかに眠っているかもしれませんよ

んで外付けフロッピーディスクドライブ自体はアキバのツクモ eX.とかで500円で売ってるんで買いましょう.最悪そこらへんのジャンクパーツ屋でも売ってそうですけど...

3. 動画を用意しよう!

どうにかこうにかして動画を用意しましょう
スクスタとかデレステとかのMVを持ってくるのも良いですね

4. ffmpegを用意しよう!

ここから2つのルートに分かれます.

4-1. とりあえずフロッピーに入ればいいやルート

ここから自分の環境に合わせてffmpegをダウンロードしてください.
ffmpeg.org ダウンロードした実行ファイルを変換元の動画と同じディレクトリに置く方が良いでしょう(人によるだろうけど)

4-2. フロッピーで360pが見たいんじゃルート

こちらのルートはコンパイルが必要となります.Linuxを使うのが多分簡単です. 下記を参照してコンパイルしてみてください,本当はArch Linuxとかが一番早いんですが,Debian系ディストロもそこまで手間ではありません. trac.ffmpeg.org

今回はこれに従ってやっていきます.(なんか古いっぽいけどまあ動くからヨシ!)

Windowsの人はWindows Subsystem for Linux(WSL)を使うのが手っ取り早いんじゃないでしょうか.下記がお勧めです(がWSL2だったり結構変わったりするのでそこらへんは頑張って)

qiita.com 今回はCompile FFmpeg for Ubuntu, Debian, or Mintに沿ってやっていきます. まずは

mkdir -p ~/ffmpeg_sources ~/bin

をします.次に,

sudo apt update -qq && sudo apt -y install \
  autoconf \
  automake \
  build-essential \
  cmake \
  git-core \
  libass-dev \
  libfreetype6-dev \
  libgnutls28-dev \
  libsdl2-dev \
  libtool \
  libva-dev \
  libvdpau-dev \
  libvorbis-dev \
  libxcb1-dev \
  libxcb-shm0-dev \
  libxcb-xfixes0-dev \
  pkg-config \
  texinfo \
  wget \
  yasm \
  zlib1g-dev

を実行します.次からは,

sudo apt-get install nasm

(ryというようにGuideに従って進めていってください(投げやり) 最後は

cd ~/ffmpeg_sources && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
...(省略)...
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r

を実行すればコンパイルが完了します.

ERROR: gnutls not found using pkg-config

と僕の環境では出てしまいましたが,なんかよくわかんないけど

sudo apt install libunistring-dev

をインストールしたら上も普通に通りました(結構時間かかった)1

5.動画をエンコードしてみよう!

ffmpegの基本のコマンドライン引数はこんな感じです

ffmpeg -i input.mp4 -c:v hoge -vf scale=width:-1,fps=30 -strict -2 -c:a moge -b:v 100k -b:a 24k output.mp4

てなわけで解説します.

  • -i input.mp4
    • 入力ファイルです
  • -c:v hoge
    • ここでビデオの圧縮方法(コーデック)を指定します.この場合hogeというコーデックを指定しています.
  • -vf scale=width:-1,fps=30
    • scale=横幅:縦幅.どちらかを-1にするとアスペクト比から勝手にやってくれます.fpsfpsです.
  • -c:a moge
    • ここでオーディオの圧縮方法を指定します.この場合はmogeを指定しています。
  • -b:v 100k
    • ビデオのビットレートを指定しています.数字に接頭辞(k,M)が使えます.この場合だと100kbpsです
  • -b:a 24k
    • オーディオのビットレートを指定しています.数字に接頭辞(k,M)が使えます.この場合だと24kbpsです
  • output.mp4
    • 出力するファイル名です
5-1. とりあえずフロッピーに入ればいいやルート

とりあえずコマンドライン

ffmpeg -codecs >codecs.txt

ってやればコーデック一覧が見れるのでそれを見t
...え?見ても何がなんだか?訳がわからないよwww
ってことでコチラのページにコーデックがまとまっていますので見てみてください.

qiita.com

まあ適当なのを指定すればOKです.v:cはh264 or hevcじゃないかなぁ(GeForce使ってる人は_nvencを付けるとcudaを使ってめっちゃ高速でやってくれます)
a:c はまあ...AACとか色々試してみればいいんじゃないでしょうか(投げやり)

5-2. フロッピーでまともに360pが見たいんじゃルート

正直言ってブロックノイズが酷すぎてH.264とかだとまともに360pが再生できません.
そこで今回用いるのがAV1と呼ばれるフリーなコーデックです.

ja.wikipedia.org

んまあ詳細は見てもらうとして今までこんなコンパイルをしてきたのはこれとHE-AACを使えるようにするためです.
上のHEVC(H.265)はライセンスとかでアレですけど,AV1は基本フリーに使うことができます.(HE-AACもライセンスはry)
AV1は-c:v libaom-av1と指定することでエンコードできます. (ただめっちゃ遅いので,一緒に-cpu-used 5オプションを付けることをお勧めします.)

さあAV1でエンコードするのです,そして幸せになりましょう.

両ルート共通の事項

先程アニメのOPなら126kbpsと言いましたね。結局126kbpsの中であれば理論上どんなとり方をしても-b:v-b:aの合計が126kbps以内であれば1.44MBに落ち付きます。なので、「よい音が欲しいんじゃ」って場合なら-b:aを上げたり、逆に「俺は脳内で再生されるが」って場合なら-an(オーディオなし)とかできます。
そこらは個人のセンスです。

6.各ビデオコーデックの比較

ほんへ
注意!!
フルスクリーンにした上で、各動画の画質を720pにすることを強くお勧めします

その1
スクスタのMVを拝借しています。
(サン◯イズさんと角◯とラン◯ィスさんすみません...あとブ◯ロードさんと木◯ごめんなさイエッタイガ-!)

ビデオ: ソース@640x360 2.2Mbps 60fps
H.264@640x360 100kbps 12fps
HEVC@640x360 100kbps 12fps
AV1@640x360 100kbps 12fps(1 Pass)

オーディオ
HE-AAC v2 22kbpsをAAC 128kbpsに変換

まあ見る限りHEVC or AV1ですが,今世界はAV1を軸に動いているのでみなさんffmpegコンパイルしましょう(暴論)(あと三船栞子を推せ)

その2
あおかなの2nd OPもエンコしてみました.こっちはソース,HEVC(H.265),AOM AV1 1 Pass,AOM AV1 2 Passの比較です.
HEVCは-preset slower,AV1はどちらとも-cpu-used 5にしてあります.


Video ソース:640x360 12fps 1063kbps (H.264)
HEVC:640x360 12fps 83kbps
AOM AV1:640x360 12fps 83kbps (1 Pass, 2 Passとも)

Audio HE-AAC v2 24kbpsをAAC 128kbpsに再エンコード

あきらかに1 Passより2 Passの方が良くなっている気がする
HEVCとAV1は...良くわかりません()
...ところで蒼の彼方のフォーリズム High Resolutionが12/25に発売されるらしいので買ってあげてください(ステマ)(宣伝したから許して)
(広告に金出しすぎて潰れたのは忘れてねえからな今度こそ頼むぞ)

sprite.tokyo

7. さいごに

最後がクソ適当になってしまいましたが...
時代の進歩によってフロッピーにもまともに動画が入る時代になりました.
これから先ももっと活動の幅を広げていけるはずです! フロッピー1枚で何でもできる時代が近いです
なのでみなさんもフロッピーを...あ,つかわない...ソウデスヨネ-...

BADEND

以上Tokyo City University Advent Calendar 2020の3日目の記事でした...
Windows 98で再生したかったのですが、流石にAV1はキツそうです...(HEVCならいけるかもね)
あと今までの話はあくまで理論上の話です、ffmpegのバージョンだったりでサイズだったりは変わる可能性もありますのでご注意を...
明日はましまさんの「フロピとかPCDPとかThinkPadを推す何か」です.明日もFloppy,みんなHappy!

追記(2020年12月4日)

Windows 10でのMicrosoft Chromium Edgeなど一部の環境でブラウザ上でAV1が再生できない環境があることを確認しました(自分がぶち当った)
↓のMicrosoft Storeのリンクなどから「AV1 Video Extension」をインストールしてください
www.microsoft.com
多分再生できる...はず...
もし駄目だったらDMでもリプでも下さい.
追記ここまで

おまけその1

どなたかのOpusに対抗してみました。
一応HE-AAC v2@33kbpsで聞くとこんな感じだよっていう疑似再現です(そのまま垂れ流すとライセンスがね...) f:id:rapit_4kou:20201202024450p:plain
ちなみにここから「공격전이다」と入力すると入手できます。

ついでにNK-POPでの僕の推しの曲、前進する社会主義もどうぞ。
Video:AOM AV1 @36kbps→AV1 @500kbps
Audio:HE-AAC v2 @16kbps→AAC @128kbps

“動画を再生できない場合、ブラウザでvideoタグがサポートされていないかもしれません。”

親愛なる指導者金正恩同志の共和国では、先進技術の発展によりフロッピーで動画が再生できる!

おまけその2

みなさんも楽しいフロッピーライフを!


  1. “The option --pkg-config-flags="--static" is what causes this.., not clear on value of that option"らしいんだけどよくわからん

*1:1!2!3! 1!2!3! 1!2!3! 1!2!3! ... 1,2,3でゲームが変わる