flv ファイル変換

flv ファイルとは,Flash Video で使用されている動画のファイル形式です.

flv ファイルの入手法

とにかく,何らかの方法で変換元となる flv ファイルを入手します.

FFmpeg

FFmpeg とは,動画ファイルの変換ツールです.

Linux の場合は,ディストリビューション本体には含まれずに有志によるバイナリが提供されている場合が多いようです. 例えば debian では,

deb http://www.debian-multimedia.org (リリース名: etch など) main

の行を /etc/apt/sources.list に追加し,apt-get や aptitude でインストールできます.

Windows の場合も一時配布元からのバイナリ提供がないので,ffmpeg を利用しているツールから抜き出して使うと良いでしょう. 携帯動画変換君などに同梱されているそうです.

なお,FFmpeg には mp3, mpeg2, ac3 など特許権が設定されている codec が内蔵されています. 業(事業)として配布する際にはこれらのライセンスを処理する必要があると思われます. また,FFmpeg 自体のライセンスは LGPL (コンパイルオプションによっては GPL)なので,バイナリ配布に際してはソースコードの開示が必要です.

FFmpeg コマンドラインオプション

主なものはここらへんを参照のこと.

UNIX ユーザの場合

入力ファイルは -i オプションで指定し,出力ファイルはフラグなしで指定する

ということに注意しましょう. UNIX コマンドの慣習とは違うので,入力ファイルを上書きしてしまいそうになってしまうことがあります.

flv ファイル形式

動画ファイルなので,動画像と音声が含まれているはずです. 入手した flv ファイルを foo.flv として

ffmpeg -i foo.flv

と実行してみましょう. Windows の場合はコマンドプロンプト(CMD.EXE)上で実行します. ffmpeg.exe ファイルをダブルクリックしてもダメなので注意.

で,実行すると,以下のような出力が得られます.

$ ffmpeg -i foo.flv
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
  configuration: --prefix=/usr --libdir=${prefix}/lib --shlibdir=${prefix}/lib 
--incdir=${prefix}/include/ffmpeg --enable-shared --enable-libmp3lame 
--enable-gpl --enable-libfaad --mandir=${prefix}/share/man --enable-libvorbis 
--enable-pthreads --enable-libfaac --enable-libxvid --enable-pp 
--enable-libamr-nb --enable-libamr-wb --enable-x11grab --enable-libogg 
--enable-libgsm --enable-libx264 --enable-liba52 --enable-libtheora 
--extra-cflags=-Wall -g -fPIC -DPIC --cc=ccache cc --enable-swscaler
  libavutil version: 49.5.0
  libavcodec version: 51.44.0
  libavformat version: 51.13.3
  built on Sep 17 2007 15:29:56, gcc: 4.2.1 (Debian 4.2.1-5)

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 
(1000/1) -> 29.92 (359/12)
Input #0, flv, from 'foo.flv':
  Duration: 00:03:49.4, start: 0.000000, bitrate: 128 kb/s
  Stream #0.0: Video: vp6f, yuv420p, 512x384, 29.92 fps(r)
  Stream #0.1: Audio: mp3, 44100 Hz, stereo, 128 kb/s
Must supply at least one output file
$

最初の方の --enable-なんちゃら…の部分は,FFmpeg をコンパイルしたときの設定なので,無視して構いません.

Input #0, flv, from 'foo.flv':
  Duration: 00:03:49.4, start: 0.000000, bitrate: 128 kb/s
  Stream #0.0: Video: vp6f, yuv420p, 512x384, 29.92 fps(r)
  Stream #0.1: Audio: mp3, 44100 Hz, stereo, 128 kb/s

の部分に注目してみましょう. 動画像としては vp6f 形式,音声としては mp3 形式で格納されていることがわかります. つまり,ファイルの構造はこのようになっているようです.

+- flv ファイル ------+
|+-動画像-+ +-音声---+|
||vp6f形式| |mp3 形式||
|+--------+ +--------+|
+---------------------+

音声を抜き出し mp3 プレーヤで楽しみたい

前置きはこのぐらいにして,実践に移りましょう.

まずは

flv ファイルの音声部分だけを取り出して携帯音楽プレーヤで聴きたい

という場合.

変換元ファイルを foo.flv,出力ファイルを foo.mp3 とすると

ffmpeg -i foo.flv -vn -acodec copy foo.mp3

で,mp3 オーディオファイルに変換できます.

引数の説明をすると

-i foo.flv
変換元ファイルの指定
-vn
出力に動画像を含めない
-acodec copy
音声 codec は変換元のものをそのまま出力
foo.mp3
出力ファイル名

となります.

ここで注意するのは

-acodec copy 音声 codec は変換元のものをそのまま出力

のところです. 再エンコード処理をしていないので

  • 変換元ファイルの音声の品質がキープされます
  • 変換処理が高速です
  • flv ファイルに格納されている音声 codec が mp3 でない場合は正常に動作しません

DVD-Video ディスクを作りたい

DVD-R に焼いて DVD プレーヤで再生したい場合.

ffmpeg -i foo.flv -target ntsc-dvd foo.mpg

新しく出てきた引数ですが

-target ntsc-dvd
ntsc-dvd 向けに変換

です.

この場合は,

動画像
MPEG2 video
音声
AC3 (Dolby Digital)

の MPEG2 ファイルに変換されるので,再エンコードがかかります.

気がついた点としては,まず,MPEG2 video のエンコードは FFmpeg ではあまり凝ったエンコードはしないようです (I frame と P frame のみ使用).

あと,古いオーサリングツール(.mpg ファイルを .vob に変換するプログラム)の場合,AC3 音声に対応していない場合があります. 注意.

本日のツッコミ


コメントスパム避け.「八〇八六」を半角数字で:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-10-27 (土) 06:00:09 (6048d)