あれこれ備忘録@はてなブログ

勉強したことやニュースや出来事を備忘録として書いていきます

ffmpegを使って動画形式を変換したらファイルサイズが激減した

あるテレビ番組の動画をPCに取り込んだのだが、とてもファイルサイズが大きい。

ハイビジョンやフルハイビジョン、4Kに8Kの時代なので、1つの番組で数GBは今は当たり前なのかも知れない。

しかし、個人的にはそんなに綺麗な映像で無くてもサイズが多少小さくても、ある程度綺麗で内容が分かれば良い、というものを残して置きたかった。

ドラマもあるが、基本的にはドキュメンタリーや放送大学の講義などが中心なので、画質にはこだわりが無いのだ。

録画時に品質を落として保存し、メディアに書き込むときにさらに品質を落としている。

それでも2時間番組で1.99GBもあるのだ。

そこでffmpegを使って、動画形式を変換し、改めてエンコーディングしてみた。

これが元の動画の情報である。

Input #0, mpeg, from 'input.mpg':
  Duration: 01:54:04.77, start: 0.255589, bitrate: 2392 kb/s
    Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, smpte170m), 720x480 [SAR 32:27 DAR 16:9], max. 9571 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x80]: Audio: ac3, 48000 Hz, stereo, fltp, 256 kb/s

レコーダーからDVDに焼いたのでmpeg2形式である。

品質を落としているので画面サイズも720x480になっている。

これを以下のオプションで変換してみた。

ffmpeg -i input.mpg -vcodec hevc -r 30 -acodec aac -strict -2 -b:a 128k -ar 44100 output.mp4

ちょっと色々なページで情報を集めたのでオプション指定の仕方に古いものと新しい物が混ざっている。

本当はacオプションでチャンネル数を指定しなくてはいけない気もするが、できあがったものはステレオになっていたので良しとする。

とにかく動画のコーデックにH.265とも呼ばれている形式を、音声コーデックにはAACを指定してエンコードした。

H.265についての説明は以下を参考にした。

H.265 - Wikipedia

P08-もっと知りたい人のための「H.264」と「H.265」の違い : 富士通研究所

地デジやDVDに使われているMPEG-2に比べて4倍の圧縮性能があると言われている。

上のオプションで変換したところ、ファイルサイズが318MBまで小さくなった。

以下が変換後の動画の情報。

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf56.40.101
  Duration: 01:54:04.83, start: 0.023220, bitrate: 372 kb/s
    Stream #0:0(und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv), 720x480 [SAR 32:27 DAR 16:9], 231 kb/s, 30 fps, 30 tbr, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 133 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

良くわからないが、変換形式は指定通りだ。

動画のビットレートが相当小さくなっていて情報が失われているような気がする。

しかし、実際に動画を見てみた範囲では、多少、細かいところがつぶれているものの、さほど劣化を感じなかった。

あるシーンのスクリーンショットである。

変換前

f:id:t_massann:20170910181657p:plain

変換後

f:id:t_massann:20170910181807p:plain

個人的にはほとんど違いはわからない。

これでファイルサイズが1/6になるなら、十分満足できる。

残しておく動画はこの形式で変換しようかと思う。

こだわりがある人は、この指定方法では良くないと思う人もいるだろうが、個人的には不満はないのでこれで良いかなと思う。

注意が必要なのは、H.265は新しいコーデックなので、新しいGPU、取り分けCPU内臓のものの場合はかなり新しい世代のものでないと、ハードウェアでのエンコード、デコードはできない。

うちの環境では上の動画を変換するのに30分くらいかかった。

もっともスレッド数や優先度の設定をしておらず、他の作業ができる状態だったので、設定次第でもう少し早くなると思う。

再生もハードウェアの動画再生支援機能が効かないのでCPUに負担がかかる。

古いマシンでは再生するさいにカクつきなどが出るかも知れない。

スマホタブレットでも性能によってはちょっと厳しいことになる気がする。

再生を重視すれば、一つ前の世代のH.264の方が良いのだろう。

もう一つGoogleドライブにアップロードした場合、H.264であればストリーミング再生ができるが、H.265である場合はストリーミング再生ができないようだ。

GoogleがH.265の代替として勧めているVP9を使ったWebM形式ならストリーミングできるんだろうか?

もっと良い指定方法や変換ソフトがあったら教えて欲しいと思う。