Tweet

ffmpeg で動画の速度変換

ニコニコ動画に試しに動画を上げてみようか,という気分になった. 昔撮影した,林道を走るビデオがあったので,こいつをネタにしようとする. が,走っているところを延々と見せられてもだれるだけである. それじゃ早回しにしてみよう,と思いつく.

で,手元にあるビデオ編集ソフト(ULEAD VIDEOSTUDIO 6)でそういう変換をさせてみようとするが…そんな機能はないようである.

というわけで,ffmpeg なんだけど

というわけで,ffmpeg でそういう機能が無いか,とオプションを探してみる. 一番近そうなのは

-r fps
Set frame rate (Hz value, fraction or abbreviation), (default = 25).

というやつである. というわけで,やってみる.

ffmpeg -r 48 -i imag0003.avi -vcodec copy -an foo.avi

が,これではうまくいかない. フレームレートの設定をいろいろ変えてみて試してみた結果,この -r オプションは入力をリサンプルするだけのもののようである. つまり

      → t
元     A   B   C   D   E   …
変換後   AAAABBBBCCCCDDDDEEEE…
欲しいもの ABCDE…

時間方向に対しての伸縮はせずに,その間の刻みを増減するだけのもののようである.

話は脱線するが,-r の値を元ビデオより小さな値にすると「コマ落とし」効果をかけることができる.

元   ABCDEF…
変換後 AACCEE…

ビデオカメラで撮影した動画を 8 ミリフィルム風のちょっとカクカクした感じにする,というようなことに使えるでしょう.

yuv 形式

で,ffmpeg のマニュアルを読むと「yuv 形式」なんてのがあるようである. とりあえず,画像部だけを yuv 形式で出力させる.

$ ffmpeg -i imag0003.avi imag0003.yuv

で,ファイル型式を調べてみると…

$ ffmpeg -i imag0003.yuv
…(略)…
picture size invalid (0x0)
[rawvideo @ 0x4226f0e0]Could not find codec parameters (Video: rawvideo, yuv420p)
imag0003.yuv: could not find codec parameters

ホントに生画像列データのみのようで,画面サイズやフレームレート情報も入っていないようである. ということは,

元動画と違うフレームレートを指定して形式変換すれば,速度変換ができる

ということになる. というわけで,試してみる.

$ ffmpeg -s 320x240 -r 26.608 -i imag0003.yuv -vcodec copy -an imag0003x2.avi

(元の imag0003.avi は 13.304 fps という中途半端なフレームレート)

で,生成された imag0003x2.avi を再生してみると…

見事2倍速になっている

というわけで,動画像はおっけー.

音声の速度変換

動画像のほうが2倍速になったのに音声がそのままでは「音ずれ」どころの騒ぎではない. というわけで,音声の方も早回しの速度変換をかけてみる.

まず,元動画から音声だけを抜き取る.

$ ffmpeg -i imag0003.avi imag0003.wav

ここでの変換ログを見ると,imag0003.wav は

  • サンプリング周波数 8000 Hz
  • モノラル
  • linear PCM

という形式になってます.

Linux での場合は

$ sox -r 16000 imag0003.wav imag0003x2.wav

と,sox コマンドで -r オプションで入力ファイルのサンプリング周波数をオーバライドさせることで速度変換をすることができます.

Windows 上では,OS 標準添付のサウンドレコーダが使えます.

  1. imag0003.wav を読み込ませる
  2. 「エフェクタ」−「再生速度を上げる」
  3. 「ファイル」−「名前を付けて保存」

で2倍速には変換できるようです.

動画像と音声のマージ

動画像と音声の2倍速変換ができたので,マージしてみます.

$ ffmpeg -i imag0003x2.avi -i imag0003x2.wav -vcodec copy -acodec copy imag0003x2av.avi

ここでは,この後編集ソフトでいじることを考えて,動画像も音声も無圧縮のままマージしています. ここで直に flv ファイルにしてしまいたい場合は

$ ffmpeg -i imag0003x2.avi -i imag0003x2.wav imag0003x2.flv

でできます.

また,慣れてきたら2倍速動画像ファイル (imag0002x2.avi) の生成を省略することもできるでしょう.

$ ffmpeg -r 26.608 -s 320x240 imag0003.yuv -i imag0003x2.wav \
-vcodec copy -acodec copy imag0003x2av.avi

というわけで

この後編集ソフトで文字を入れて,できた動画がこれ.

http://www.nicovideo.jp/watch/sm1476071


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-08 (木) 23:37:33 (3609d)