2010年05月29日

携帯動画変換君で、WebM(VP8)動画


2010/11/17 追記
libvpx v0.9.5になって、エンコードオプションが変更されました。
変更後の設定サンプルはこちらをどうぞ。
携帯動画変換君で、WebM(VP8)動画 v0.9.5


当サイトのFFmpeg rev.23359より、WebM(VP8)動画のエンコードに対応しました。

今後、YouTubeでもWebM(VP8)が採用されるらしいので、新しい物好きの方はお試しください。

2010/05/30 追記
FFmpeg rev.23371より、libvpxは(L)GPLと互換性がないとのことで、今後libvpxをリンクしたFFmpegは配布できないことになりました。
ということで、当サイトのFFmpeg rev.23359限定となります。

2010/06/05 追記
と思ったら、rev.23482からlibvpx入りのFFmpegが再配布できるようになりました。


WebMの音声はVorbisのみです。
-acodecは省略、または、-acodec libvorbisのみ指定可能です。

各数値は、ffpresetを参考にして携帯動画変換君用に書き換えていますので、お好みで修正してご利用ください。

[Item1]
Title=WebM/VP8動画 360p 768kbps 29.97fps 音声 128kbps 44.1kHz
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec libvpx -s 640x360 -r 29.97 -g 120 -level 216 -profile 0 -qmax 51 -qmin 1 -rc_buf_aggressivity 0.95 -vb 768k -aq 4 -ac 2 -ar 44100 -threads 3 "<%OutputFile%>.webm""

[Item2]
Title=WebM/VP8動画 720p 2Mbps 29.97fps 音声 128kbps 44.1kHz
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec libvpx -s 1280x720 -r 29.97 -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -token_partitions 4 -vb 2M -aq 4 -ac 2 -ar 44100 -threads 3 "<%OutputFile%>.webm""

[Item3]
Title=WebM/VP8動画 720p 2Mbps 59.94fps 音声 128kbps 44.1kHz
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec libvpx -s 1280x720 -r 59.94 -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -token_partitions 4 -vb 2M -aq 4 -ac 2 -ar 44100 -threads 3 "<%OutputFile%>.webm""

[Item4]
Title=WebM/VP8動画 1080p 2Mbps 29.97fps 音声 128kbps 44.1kHz
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec libvpx -s 1920x1080 -r 29.97 -g 120 -level 216 -profile 1 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -token_partitions 4 -vb 2M -aq 4 -ac 2 -ar 44100 -threads 3 "<%OutputFile%>.webm""

[Item5]
Title=WebM/VP8動画 1080p 2Mbps 59.94fps 音声 128kbps 44.1kHz
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vcodec libvpx -s 1920x1080 -r 59.94 -g 120 -level 216 -profile 1 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -token_partitions 4 -vb 2M -aq 4 -ac 2 -ar 44100 -threads 3 "<%OutputFile%>.webm""


【補足】
エンコード速度が遅くて耐えられないという場合。
「-level 216」を「-level 300」にすると画質は悪くなりますが、エンコードは速くなります。

2011/04/13 追記
Vorbis音声の、Quality(-aq)とNominal Bitrate(-ar)の関係は、Wikipediaをご覧ください。
http://en.wikipedia.org/wiki/Vorbis
posted by あべちん at 04:05 | Comment(4) | TrackBack(0) | 携帯動画変換君

「Please use vf=pad」と言われたのでlibavfilterを使ってみました


FFmpeg rev.23043からlibavfilterがマージされて、padding関連のオプションはlibavfilterを使うようになりました。
当サイトでは、rev.23359からlibavfilterに対応しています。

-padtop 60 -padbottom 60
などとすると、
Please use vf=pad
とメッセージが返ってきます。

Pleaseとか言いながら強制です。困ったもんです。

困っている方が少なからずいらっしゃるようなので、
pad=width:height:x:y:color
crop=x:y:width:height
scale=width:height
を試してみました。

詳しくは、以下のページを参照してください。
オプションは、-vfilterから-vfに変更されています。
http://ffmpeg.org/libavfilter.html

2010/10/02 追記
FFmpeg rev.25184以降、cropの書式が変わりました。
width:heightとx:yが前後入れ替わり、widthまたはheightのサイズが変わらない場合でも、サイズを明示する必要があります。
crop=width:height:x:y


posted by あべちん at 02:21 | Comment(9) | TrackBack(0) | 携帯動画変換君

2010年01月07日

x264のエンコードでエラー(Error while opening encoder for output stream #0.0)


FFmpegでx264のエンコードをする場合、オプションに「-vcodec libx264」を指定しますが、以下のようなエラーが出てエンコードできないことがあります。

Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height

この場合、以下のオプションを追加すれば解決できます。

-g 150 -qcomp 0.7 -qmin 10 -qmax 51 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286


このエラーの原因は、libx264側でFFmpegのデフォルト値を判定し、一定の条件を満たすとエラーで終了するようになっているためです。

判定の対象となるFFmpegのデフォルト値は、以下の9つです。

(1) -me_range 0
(2) -qdiff 3
(3) -g 12
(4) -qmin 2
(5) -qmax 31
(6) -qcomp 0.5
(7) -i_qfactor 0.8
(8) -b_qfactor 1.25
(9) -partitions 指定なし、かつ -subq 8

(1)〜(9)のうち、5つ以上デフォルト値の場合にエラーで終了します。

(7)については、x264に渡す時に
1 / i_qfactor = 1 / 0.8 = 1.25
となっており、x264側ではデフォルト値が1.25として判定されます。

FFmpegのエラーメッセージが、「bit_rate, rate, width or height」となっているため、ビットレートや画面のサイズが間違っているのかと勘違いしやすいですね。

x264の各オプションの意味について知りたい方は、以下のサイトをご覧ください。
x264 ffmpeg mapping and options guide
posted by あべちん at 11:25 | Comment(39) | TrackBack(0) | 携帯動画変換君