どんどん音がずれる動画の問題を無料で解消する!


はじめに

この記事は CCC Advent Calendar 2018 14日目の記事です。
こちら2018年の記事のため、FFmpegやAudacityのバージョンが古いものになっています。
サイトの内容が異なる可能性もあるので、適宜現在の環境に合わせて、実施してください。
コマンド自体はあまり変わっていないと思われるので、そこらへんは心配しなくて大丈夫だと思います。
なにか別にもっといい方法があるよ!ってことがあればコメントまでお願いします!

前振り

あるときですね、動画を撮ったんですよ。
よっしゃ一杯撮れた!と満足ホクホク顔で自宅に帰って動画チェックしたら、動画が音ズレしていることに気が付いて項垂れました。
最初はもちろんちゃんと動画が音源が同期していて問題なかったのですが、次第に動画と音がずれ始めてしまったんです。
こりゃ困ったと思って、どうにかならんかなーと思って調べてたら、少し古めのページがあったので、win10でもできたよ的な報告として、この記事を作りました。一例として活用できれば幸いです。
Macについては未検証なのでだれかよろしく!

環境

一応載せときます。
OS: Windows10 64bit
CPU: Intel Core i7-7700
メモリ: 16GB
GPU: GeForce GTX 1060 6GB

使用する動画

今回は自分がbeatmania IIDX 26 Rootageにてライン録画したものとなります。
最近は録画ができる装置がゲーセンにおいてあるんですね。すごいです。

動画

動画を見ていただければわかると思うのですが、0:00と8:00で音が全然同期してないことが分かります。これを改善したいのです。

本題

細かい話はかなり端折ります。ツールの説明とかも上手くできないので省略します。

ffmpeg

今回の主役さんです。動画をいろいろしてくれる便利ツールさんですね。

インストール

https://www.ffmpeg.org/
このサイトからでかでかと書いてあるDownloadのボタンをクリック。

今回はGet the PackagesのWinロゴにカーソルを合わせて、Windows Buildsを選択します。

するとFFmpeg Buildsのページに飛ぶので、
Version 4.1、Windows 64-bit、staticを選択し、Download Buildをクリックします。

ZIPファイルがダウンロードされると思うので、これを解凍します。
したみたいな構成になっていると思うので、日本語が含まれていないディレクトリに配置しましょう。
Cドライブ直下がいいでしょう。

┳ ffmpeg-4.1-win64-static
┗━━━━┳ bin
     ┣ doc
     ┗ presets

アドレス的にはC:\ffmpeg-4.1-win64-staticみたいにすればいいと思います。
重要なのはbinディレクトリの場所です。予めbinディレクトリのアドレスをコピーするといいでしょう!
Windows(C:)>ffmpeg-4.1-win64-static>binのエリアを右クリックして「アドレスをテキストとしてコピー」的なものを選択しとけばOK。

環境変数

次は、厄介な環境変数の設定です。と言っても今回はとても簡単!
コントロールパネルを開いて、環境変数と検索。
システム環境変数を編集を選択して、詳細設定タブの下の方にある環境変数をクリック。
システム環境変数の一覧の中にPathがあるので、それを選択して、編集をクリック。
新規をクリックして、先ほどコピーしたアドレスを貼り付けます。
今まで開いたすべてのウィンドウのOKボタンをクリックして設定は完了です!
簡単!!!

映像と音を分解する

さて、ようやく本題です。
ffmpegはコマンドプロンプトを使って動かします。
Winボタンを押下して「cmd」と検索します。
今回使いたい動画は容量の関係上Dドライブ直下にあるencodesディレクトリ以下にあります。

使うコマンドは全然難しくないので、頑張りましょう。

デフォだとしたみたいな感じになっていると思うので、この状態のまま、d:と入力しましょう

C:\Users\あなたのパソコンの登録名>

すると、

D:\>

となるはずです。そしたら、cd encodesと入力してディレクトリを移動します。

D:\encodes>

となったはずです。

ここでffmpegがしっかりパスが通っているか確認しましょう。

ffmpegと入力して、ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developersみたいなものが現れていればパスが通っていることになります。
もし、出てこなければ、パスが通っていません。環境変数を再設定しましょう。

今回はEncode_174.mp4をつかってやります。

下のコマンドを入力することで、それぞれ、映像のみ、音源のみに分解することができます。

ffmpeg -i Encode_174.mp4 -vcodec copy -an Encode_174_mov.mp4
ffmpeg -i Encode_174.mp4 -acodec copy Encode_174_aud.aac

出力結果の最後の方に

frame=34892 fps=4360 q=-1.0 Lsize=  884831kB time=00:09:41.51 bitrate=12464.9kbits/s speed=72.7x
video:884681kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.017009%

と出ると思うので、time=のあとの時間を記録しておきましょう。

Encode_174_mov.mp4のtimeは00:09:41.51
Encode_174_aud.aacのtimeは00:09:42.93
こんな感じで結果が出ました。

はい。音ズレが起こっている原因がなんとなくわかりましたね。
微妙に再生時間が違うんですよね。

じゃあ、これを補正していきます。

さて、どれくらい補正すればいいでしょうか。

以下の計算式で、どれくらい補正をかければいいかが分かります。

$\dfrac{\text{音源の長さ}[s]-\text{動画の長さ}[s]}{\text{音源の長さ}[s]}=\text{補正率}[\%]$

一応計算のためにすべて秒で表現しましょう。
00:09:41.51->581.51(s)
00:09:42.93->582.93(s)

では、差を出して、それをEncode_174_aud.aacのtimeで割ります。

$\dfrac{582.93[s]-581.51[s]}{582.93[s]}=0.2435...[\%]$

これだけ小さな誤差でも、大きなずれを生み出してしまいます。恐ろしいです。
人間は、0.1秒ずれた音くらいなら、別の音として知覚できるらしいので、1秒ほどのズレはかなり大きいものになりますね。

ここの計算は間違えないように気をつけましょう。
さて、これで、どれくらい再生速度を早くすればいいかが分かりました。今回は約0.244%だということが分かりました。

補正をしていきましょう。

Audacity

ここで登場超便利ツールAudacity
窓の杜からダウンロードできます
https://forest.watch.impress.co.jp/library/software/audacity/

インストールをして、開きます。
しかし、このままでは.aacファイルは開くことができません。現状だと対応していないからです。

これをどうにかします。
編集->設定を選択し、ライブラリに移動します。

そしたら、FFmpegライブラリのダウンロードを選択します。
するとブラウザが開いて英語祭りのページが開かれると思います。

こんな感じですね。
その中の Windows: See the FFmpeg installation sectionのところをクリックします。

こんな感じの英語のページに飛ばされます。
そしたら、1.Go to the external download pageをクリックしましょう。

またまた英語祭りです。
下側の
FFmpeg 2.2.2 Binary for Windows, compatible with Audacity 2.0.6 and later (please update, or use v0.6.2 below)
(Lame is right ABOVE, this is ffmpeg):
ffmpeg-win-2.2.2.exe - (SHA256 SUM here)

というところがあるので、その中のffmpeg-win-2.2.2.exeをクリックしましょう。そうするとダウンロードが開始されるので、それが終わったら、exeファイルを起動して、インストールしましょう。

これで完了です。aacファイルが読み込めるようになったと思います。

おそらくこんな感じになってるはずです。
FFmpegライブラリバージョン:のところに、なんか増えてると思います。

そしたら、OKをクリックして、設定ウィンドウを閉じます。
Ctrl+Aキーを押下して、オーディオを全選択します。
そして、エフェクト->スピードの変更を選択します。

こんな感じのウィンドウが開いたと思います。

変更率のところに先ほどの数値、0.244を変更率(%)のところに入力します。

こんな感じになります。

選択する長さの新しい長さを確認しましょう。
動画の長さ(00:09:41.51)と小数点以下1桁くらいまで合えばすごくいい感じです。
今回は完全に一致してますね、すごい。

OKを押したらこれで補正完了です。

そしたら書き出しましょう。

ファイル->Export->オーディオの書き出しを選択しましょう。
ファイルの種類はM4A(AAC)ファイル(FFmpeg)を選んで、保存します。
メタデータタグを編集は何も記入せずOKを押します。

書き出し終わりましたら、バックグラウンドに追いやったコマンドプロンプトを使います。

ffmpeg -i Encode_174_mov.mp4 -i Encode_174_aud.m4a -vcodec copy -acodec copy Encode_174_edited.mp4

このコマンドを入力すると、音ズレの消えた動画ができました!

動画

やったぜ!!!!

おわりに

最近だと、撮影機材も進化していて、大丈夫かもしれませんが、
もしも、撮影後に音ズレしてトラブったときにこの記事が役立てられれば幸いです。
何が起こるかわかりませんからね。
タダでできるというのも強みですからね!

では、ありがとうございました!

参考

もろここのを参考にしました!
ありがとうございます!