†ぽんこつビデオ工房†

ffmpegの使用例

作成開始日 2017.07.13
最終更新日 2019.05.06




●ffmpegのフレームレート指定 (2019.03.07)

フレームレートは「-r」オプションで指定するが、小数指定は避け《分数指定》とすること。

  -r 29.97
 ○ -r 30000/1001

ことの起こりは、ショート作品を1クール分(12本)バインドしようとしたとき。
欠番をネットで拾ったファイルで補ったのだが、
フレームレート違いでワーニング出まくり(TV録画分は29.97fps、ネットは25fps)
もちろん、再生するとタイミングがおかしくなる

じゃあ、フレームレートを揃えればいいじゃない、と-r 29.97で変換したのだが、
今度はtbnが変な値を示して、ワーニングこそ消えたが、正常再生不可能。
で、ネット情報に従って-r 30000/1001のように分数指定にしたら、
tbnがまともな数値になり、正常再生可能に。
どうも、計算誤差が効いてくるらしんだが…従って整数値ならば問題ないのだが…
ともかく、これで正常にバインドできるようなる。

で、も一つ忘れてはいけないのは、音声のサンプリングレートの統一。
TV録画分は48kHzだが、ネット動画は44.1kのものもある(の方が多い?)。
そのままバインドすると、当然音ズレが発生する。

	ffmpe -i inp.mp4 -s 720x480 -r 30000/1001 -ar 48000 out.mp4

みたいな形でフォーマットを統一すると良いようだ


●mpeg4 (ff-mpeg4) コーデックとlibxvid (Xvid) コーデック (2018.07.22)

VOBから無劣化原盤を作る場合は-vcodec mpeg4 -qscale 0が適している。
可変q値でファイルサイズを所定の大きさに収めるときは-vcodec libxvid -qmin/-qmaxが適している。

ともに所謂《mpeg4》だが、「libxvid」の方が互換性・汎用性はずっと高い。
「ff-mpeg4」に対応していないプレイヤーはけっこうある(特にDPF)。
が、それ以上に重要な違いは、可変q値で変換した場合の振る舞い。
たとえば、以下のような変換をする場合(q値を4〜8の間とする);

ffmpeg -i inp.vob -vcodec ○○○○ -qmin 4 -qmax 8 -b 1200k out.mp4
○○○○が「libxvid」だと、q値の範囲はかなり厳密に守られるが、変換速度は遅い(「mpeg4」の半速)。
○○○○が「mpeg4」だと、変換速度は速いが、q値はしばしば指定外の値を取る(2とか1.8とか31とか)。
一方、「mpeg4」では2pass変換も正常に機能するが、「libxvid」で2passを指定するとq=0固定変換になってしまう。

つまり、「libxvid」は1passでもビットレートの最適化割り当てをきちんと行っており、
「mpeg4」の2pass変換に近い処理を行っているのではないか?
それゆえ、変換時間が倍掛かり、2pass変換は正常に行えない−−と考えるとスッキリする。
「mpeg4」で2pass変換するなら、「libxvid」で可変q値変換する方が手間が掛からない、というカンジ。

なお、「libxvid」でq値が指定範囲内に収まらないような場合には、ビットレートにしわ寄せが行くようになっている。
ゆえに、「mpeg4」の2pass変換ほど正確にファイルサイズを予測することはできない(だいたいいい感じに収まるけど)。


●スレッドを減らしてCPU負荷率を下げる (2018.07.18)

デフォルトで使用すると、CPU負荷率が100%に張り付く。
他のアプリにも影響が出るし、何よりファンが高速回転をし始めて爆音状態になる。
ちなみに、2コア/4スレッドのCPUだと、6スレッド立つ(CPUスレッド数×1.5)。
そこで、明示的に「-thread」オプションを指定して、スレッド数を減らすとよい。
「-thread 2」とすると、CPU使用率が約50%となり、騒音もかなり軽減される。
もちろん、変換速度は相応に落ちるが(半速よりは速い)、爆音よりは遥かにマシ。


●音量 volume

従来の音量「-vol」オプションは無視されるようになったようだ。代わりに「-af volume=<xx>」とする。
⇒「-vol」オプションが残っているバージョンもあるようだ(但し非推奨)。
<xx>の部分が倍率で、半分なら「0.5」、2倍ならば「2」とすればよい。また、倍率指定ではなく絶対値指定(dB)も可能。

-af volume=<xx> 相対倍率(0.5とか1.5とか4とか言った値)
-af volume=<xx>dB 絶対音圧(10dBくらいが実用上限かな?基準の取り方が良く判らない)
-af volume=±<xx>dB  相対音圧(現在値からの増減幅を指定)
-af dynaudnorm 標準化(radikoのラジオ録音と同程度;平均化ではない)

まあ、ネットで拾った動画ファイルの音量適正化程度ならば、-af dynaudnormが便利かと…と思ったが、実はdynaudnormは再生時にかなり大きな負荷が掛かることが判った。非力なプレイヤーを使う場合は、指定しない方が良い。

ffmpeg -i inp.mp4 -vcodec copy -af volume=2 out.mp4
ffmpeg -i inp.mp4 -vcodec copy -af volume=6dB out.mp4
ffmpeg -i inp.mp4 -vcodec copy -af volume=+3dB out.mp4
ffmpeg -i inp.mp4 -vcodec copy -af dynaudnorm out.mp4

-vol -af volume= 倍率
64 0.25 1/4
128 0.5 半分
256 1 標準
512 2 2倍
1024 4 4倍


●Windows Meで動作するffmpeg (2018.05.11)

現在、WinMeで動作するffmepgを入手するのはかなり難しいようだ。 10年以上前のffmpegのバイナリを単体で入手するのは、ほぼ不可能だろう。 が、他のアプリケーションに同梱されている場合は別。 「携帯動画変換君」v.0.34同梱版(2005年)がWinMeでも動作した(要同梱DLL×2本)。 バージョンはr22137で、h.264→mpg変換を確認。 ただし、変換速度(fps)は表示されないし、細かなオプションも少し異なるらしい。


【ぽんこつビデオ工房目次】 【ホーム】