Mac で、異様にカクカクする動画を修正する

カクカク、というかもうブルブル震えていて、まともに再生できない動画。
 コマ落ちとかではなく、動いているものが震えながら戻るような動画、でも Windows では普通に再生できるような動画は、ハードウェアがどうこうとかじゃなく、動画ファイルのインターレースを疑ったほうがいい。  

mpv で インターレース解除

mpv には、デインターレースして再生してくれるオプションがある。

mpv --deinterlace=yes ファイルパス/動画ファイル

これでカクカクが直っているなら、原因はインターレースと断じていいことになる。
 時間はかかるが、ffmpeg でエンコードしなおして、インターレース解除するのがいいと思う。

ffmpeg でインターレース解除

ffmpeg は Homebrew でインストールできる。

brew install ffmpeg

デインターレースは以下のように書くらしい。

ffmpeg -i ファイルパス/input.mp4 -vf bwdif=0:-1:1 -c:v libx264 保存先/output.mp4

以下のサイトさまで学ばせていただきました。

🔗 Re:ゼロから始めるFFmpeg – 俺の外付けHDD

試してみると、ちゃんと修正される。
 2018 年にアップデートされた Mac mini など、Apple T2 のハードウェアエンコードが利用できる機種では、libx264 ではなく、-c:v hevc_videotoolbox とやれば HEVC で書き出せる。h264 の場合は -c:v h264_videotoolbox
 多少早いし、なによりファンが回らなくて最高。
 ただし、-v:b 1500k などとビットレートを決めてやらないと、仕上がりが汚くなる。

ffmpeg -i ファイルパス/input.mp4 -vf bwdif=0:-1:1 -c:v h264_videotoolbox -b:v ビットレート 保存先/output.mp4

適切なビットレートは、ffprobe -v quiet -i ファイルパス/input.mp4 -show_entries format=bit_rate で出てくる数字を参考にするのがいいと思う。

そもそもインターレースとは

昔、テレビがブラウン管だった時代。
 1 ドットずつなのか、1 ピクセルずつなのかわからないが、画面は左から右へ、上から順番に描画されていった。これを走査といい、一段目の走査が終わると、二段目の左端からまた走査を開始し、画面の一番下の段まで描画し終えてやっとフレームをひとつ動かせたことになっていた。

これじゃ時間がかかるというので、インターレース(飛ばし走査)というものが考案された。
 最初の一周は、一、三、五、七……と奇数段だけ描画し、偶数段を飛ばすのである。
 赤から青に変わる画面があったとして、奇数段だけ青、偶数段だけ赤のままというシマシマの画面になった場合、全体として紫っぽく見えるはずだ。
 二周目に偶数段が青く描画されて青一色になる。赤から、ふわっと紫になってから青くなるので、なんとなくフレームの遷移が滑らかになるのだと思う、たぶん。

このインターレースは、最初の段を 0 とするか、1 とするかが、あまり定まっていないようなのである。最初を間違うと、奇数として描画される段と偶数の段が、逆になってしまう。噛みあわなくなってしまうのだろう。当然、画面は乱れる。カクカクの原因はこの辺なのではないかと思われる。違うかもしれないけど。