ICON of RYUUO.COM TradeMark

Linux ffmpeg

会員登録(SSL)
会員専用(SSL)


更新日: 2010.08.15
ffmpegの使用方法に関して



変換するべきファイルの形式を調べる

FFmpeg version SVN-r22990 (Fedora 13) を使用。また、内容に関しては以前からの継ぎ足しによる更新になっているのでは、古い内容の部分も存在しているものと思う。



$ ffmpeg -i sample.mpg    ( -i input_file のoption )
FFmpeg version SVN-r22990, Copyright (c) 2000-2010 the FFmpeg developers
  built on Apr 30 2010 04:58:37 with gcc 4.4.3 20100422 (Red Hat 4.4.3-18)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg \
  --incdir=/usr/include/ffmpeg --libdir=/usr/lib --mandir=/usr/share/man \
  --arch=i686 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 \
  -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 \
  -mtune=atom -fasynchronous-unwind-tables' --extra-version=rpmfusion \
  --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfaad \
  --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libschroedinger \
  --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 
  --enable-libxvid --enable-x11grab --enable-avfilter --enable-avfilter-lavf \
  --enable-postproc --enable-pthreads --disable-static --enable-shared \
  --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib \
  --cpu=i686 --enable-runtime-cpudetect


ここで、
Input #0, mpeg, from 'sample.mpg':に注目すると、
Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 704x480, 9351 kb/s, 29.97 fps(r)
mpeg2video.....codec
yuv420p.....raw videoを抽出し、組み替える。
704x480.....size
9351 kb/s.....-b bitrate { Set the video bitrate in bit/s (default = 200 kb/s).}
29.97.....-r fps { Set frame rate (Hz value, fraction or abbreviation), (default = 25).}
もっとも簡単便利な方法


$ ffmpeg -i sample.mpg -s 320x240 little_sample.mpg
Input #0, mpeg, from 'sample.mpg':
  Duration: 00:01:02.0, start: 0.257867, bitrate: 7451 kb/s
  Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 704x480, 9351 kb/s, 29.97 fps(r)
  Stream #0.1[0x80]: Audio: ac3, 48000 Hz, stereo, 256 kb/s

Output #0, mpeg, to 'little_sample.mpg':
  Stream #0.0: Video: mpeg1video, yuv420p, 320x240, q=2-31, 200 kb/s, 29.97 fps(c)
  Stream #0.1: Audio: mp2, 48000 Hz, stereo, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 1861 fps=133 q=6.5 Lsize=    2250kB time=62.1 bitrate= 297.0kbits/s    
video:1738kB audio:485kB global headers:0kB muxing overhead 1.188526%
$
Video部分が
Input#0のStream #0.0が Output #0のStream #0.0でmpeg2videoからmpeg1videoへと変換され、
                                             サイズが704x480から320x240へと変換されている。

また、Audioが
Input#0のStream #0.1が Output #0のStream #0.1でAudio: ac3, 48000 Hz, stereo, 256 kb/sから
                                   Audio: mp2, 48000 Hz, stereo, 64 kb/sへと変換されている。


以降、optionを変更させた時のOutput時の結果のみを表示させる。そして、変更させたファイルが
ご使用の動画プレーヤーの形式に対応しているかは、そのプレーヤーの特性による。

もっとも簡単便利なOptin -target



$ ffmpeg -i sample.mpg -target ntsc-vcd little_sample.mpg
------ 省略 -----
Output #0, vcd, to 'little_sample.mpg':
  Stream #0.0: Video: mpeg1video, yuv420p, 352x240, q=2-31, 1150 kb/s, 29.97 fps(c)
  Stream #0.1: Audio: mp2, 44100 Hz, stereo, 224 kb/s



$ ffmpeg -i sample.mpg -target ntsc-svcd little_sample.mpg
------ 省略 -----
Output #0, svcd, to 'little_sample.mpg':
  Stream #0.0: Video: mpeg2video, yuv420p, 480x480, q=2-31, 2040 kb/s, 29.97 fps(c)
  Stream #0.1: Audio: mp2, 44100 Hz, stereo, 224 kb/s



$ ffmpeg -i sample.mpg -target dvd little_sample.mpg
------ 省略 -----
Output #0, dvd, to 'little_sample.mpg':
  Stream #0.0: Video: mpeg2video, yuv420p, 720x480, q=2-31, 6000 kb/s, 29.97 fps(c)
  Stream #0.1: Audio: ac3, 48000 Hz, stereo, 448 kb/s



$ ffmpeg -i sample.mpg -target dv little_sample.mpg
------ 省略 -----
Output #0, dv, to 'little_sample.mpg':
  Stream #0.0: Video: dvvideo, yuv411p, 720x480, q=2-31, 200 kb/s, 29.97 fps(c)
  Stream #0.1: Audio: pcm_s16le, 48000 Hz, stereo, 1536 kb/s



Optionは、
$ man ffmpeg 並びに
$ ffmpeg -formats  でも表示されるが、一様、最下部に表示している。

以下は個人的な記録



Hitachi(DZ-GX20 -s 704x480 -f mpeg2)で撮影した動画ファイル、並びに、
Olympus(CAMEDIA C-700 Ultra Zoom)による動画ファイルを使用した結果を載せた。


mpeg2-->縮小
$ ffmpeg -i sample.mpg -aspect 4:3 -s 320x240 little_sample.mpg
Output #0, mpeg, to 'little_sample.mpg':
  Stream #0.0: Video: mpeg1video, yuv420p, 320x240, q=2-31, 200 kb/s, 29.97 fps(c)
  Stream #0.1: Audio: mp2, 48000 Hz, stereo, 64 kb/s


変換されたファイルはwindowsでは問題無かったが、Linux(Java Applet)上では表示されない。
video codecをmjpagにし .movに変換する。

$ ffmpeg -i sample.mpg -vcodec mjpeg -y -aspect 4:3 -s 320x240 little_sample.mov

画像関係は問題なしだが、音が無い。audio codecをpcm_u8へ修正

$ ffmpeg -i sample.mpg -vcodec mjpeg -acodec pcm_u8 -y \ 
                                      -aspect 4:3 -s 320x240 little_sample.mov


Work Fine! 目的完了!



example 101).....mpeg2video(704x480)-》mpeg2video(340x240)acodec(mp2)
                                              -》mpeg1video(340x240)acodec(mp2)
$ ffmpeg -i sample.mpg
Input #0, mpeg, from 'sample.mpg':
  Duration: 00:01:02.0, start: 0.257867, bitrate: 7451 kb/s
  Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 704x480, 9351 kb/s, 29.97 fps(r)
  Stream #0.1[0x80]: Audio: ac3, 48000 Hz, stereo, 256 kb/s

$ ffmpeg -i sample.mpg -target ntsc-svcd -acodec mp2 -aspect 4:3 -s 340x240 ssa.mpg

$ ffmpeg -i ssa.mpg
Input #0, mpeg, from 'ssa.mpg':
  Duration: 00:01:02.0, start: 0.500000, bitrate: 2030 kb/s
  Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 340x240, 2516 kb/s, 29.97 fps(r)
  Stream #0.1[0x1c0]: Audio: mp2, 44100 Hz, stereo, 224 kb/s

$ ffmpeg -i ssa.mpg -target ntsc-vcd little_ssa.mpg
Input #0, mpeg, from 'little_ssa.mpg':
  Duration: 00:01:02.0, start: 0.440000, bitrate: 1391 kb/s
  Stream #0.0[0x1e0]: Video: mpeg1video, yuv420p, 352x240, 1150 kb/s, 29.97 fps(r)
  Stream #0.1[0x1c0]: Audio: mp2, 44100 Hz, stereo, 224 kb/




example 102).....CHANGE mpeg2video(704x480)
                       TO mjpeg(320x240)

ffmpeg -i sample.mpg -vcodec mjpeg -acodec pcm_u8 -y -aspect 4:3 -s 320x240 sam.mov



example 103).....CHANGE mpeg2video(704x480) aspec(16:9)
                                        TO mjpeg(320x240) and aspec(4:3)

ffmpeg -i sample.mpg -croptop 50 -cropbottom 50 -aspect 4:3 -s 320x240 little_sample.mpg


example 104).....size(320x240),vcodec(mjpeg), acodex(pcm_u8) 
                               TO size(320x240),vcodec(mpeg1video), acodex(mp2)

ffmpeg -i PB140002.MOV -target ntsc-vcd pb2.mpg
ffmpeg -i p1.mov -ab 64 p2.mov
ffmpeg -i p2.mov -target ntsc-vcd p1.mpg


example 105)..... Audio: aac, 22050 Hz 
                               TO Audio: mp3, 44100 H,

$ ffmpeg -i old.flv -y -ar 44100 -vcodec copy new.flv

$ ffmpeg -i old.flv
  Duration: 00:04:52.32, start: 0.000000, bitrate: 630 kb/s
    Stream #0.0: Video: h264, yuv420p, 640x360 [PAR 1:1 DAR 16:9], 580 kb/s, 29.92 tbr, 1k tbn, 59.94 tbc
    Stream #0.1: Audio: aac, 22050 Hz, mono, s16, 49 kb/s
$ ffmpeg -i new.flv
  Duration: 00:04:52.93, start: 0.000000, bitrate: 644 kb/s
    Stream #0.0: Video: h264, yuv420p, 640x360 [PAR 1:1 DAR 16:9], 580 kb/s, 29.92 tbr, 1k tbn, 59.94 tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 1 channels, s16, 64 kb/s




example 105)  YUVに変換 ... HDDの容量を非常に使う(注意)

$ ffmpeg -i pengin.flv pengin.yuv
$ ffmpeg -s 320x240 -i pengin.yuv p.mpg ... 同じサイズに変更してある。
この過程での、容量表示
-rw-rw-r-- 1    684032 2010-08-15 21:25 p.mpg
-rw-r--r-- 1   1596294 2010-07-31 22:24 pengin.flv
-rw-rw-r-- 1  56678400 2010-08-15 21:14 pengin.yuv






最終的に、
$ ffmpeg -i sample.mpg
のコマンドで、出力された動画ファイルの内容を確認することをお勧め致します。中には、サイズの書き忘れで、aspec rateを取得出来ずに動画プレーヤーで再生できない動画ファイルも存在しています。



ffmpegのbitrate変更

bitrate変更による、動画ファイルの挙動の実験





ffmpeg bitrateを変更することによる動画を表示してみる。また、sizeは一定にし、Streamの
#0.1(audio)については変更させていない。これら動画ファイルをappletで表示させた。applet
でのsizeは480x260としてある。linux また、windowsにしろ、Gstreamer libraryをinstallし
ておかなければ表示されないので、動画ページに進み、faqを参照してください。
特に、CPUとbitrateとの間には微妙な関係が存在している。開発用に使用しているパソコンCPUは
Xeon(core2)であり、開発用のPCでは以下の動画のすべてのTimeDrag,and VolumeDragのSeekが働く
が、Cerelon(2.4GHz)のパソコンでは Time and Volume DragSeek がbitrateに影響を受ける。
Windows上でのbrowserの種類により異なりが多く存在していたが、Linux上のFirefox, chrome, 
opera for linuxでは、それほどの差は見られなかった。


$ ffmpeg -i imf.flv
  Duration: 00:04:52.93, start: 0.000000, bitrate: 644(580+64 ... VideoとAudioのbitrateを足したもの) kb/s
    Stream #0.0: Video: h264, yuv420p, 640x360 [PAR 1:1 DAR 16:9], 580 kb/s, 29.92 tbr, 1k tbn, 59.94 tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 1 channels, s16, 64 kb/s

http://media.ryuuo.com/WebYuumo?movId=bbb000&size=m


$ ffmpeg -i imf.flv -f flv -b 580k -s 450x253 imfb580s450.flv
$ ffmpeg -i imfb580s450.flv
  Duration: 00:04:52.96, start: 0.000000, bitrate: 644 kb/s ... ( 580kb/s + 64kb/s )
    Stream #0.0: Video: flv, yuv420p, 450x253, 580 kb/s, 59.75 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 1 channels, s16, 64 kb/s

http://media.ryuuo.com/WebYuumo?movId=test580

$ ffmpeg -i imf.flv -f flv -b 400k -s 450x253 imfb400s450.flv
$ ffmpeg -i imfb400s450.flv
  Duration: 00:04:52.96, start: 0.000000, bitrate: 464(400+64) kb/s
    Stream #0.0: Video: flv, yuv420p, 450x253, 400 kb/s, 59.75 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 1 channels, s16, 64 kb/s

http://media.ryuuo.com/WebYuumo?movId=test400

$ ffmpeg -i imf.flv -f flv -b 300k -s 450x253 imfb300s450.flv
$ ffmpeg -i imfb300s450.flv
  Duration: 00:04:52.96, start: 0.000000, bitrate: 364 kb/s
    Stream #0.0: Video: flv, yuv420p, 450x253, 300 kb/s, 59.75 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 1 channels, s16, 64 kb/s

http://media.ryuuo.com/WebYuumo?movId=test300

$ ffmpeg -i imf.flv -f flv -b 200k -s 450x253 imfb200s450.flv
  Duration: 00:04:52.96, start: 0.000000, bitrate: 264(200+64) kb/s
    Stream #0.0: Video: flv, yuv420p, 450x253, 200 kb/s, 59.75 tbr, 1k tbn, 1k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, 1 channels, s16, 64 kb/s

http://media.ryuuo.com/WebYuumo?movId=test200

$ ls -l
-rw-rw-r-- 1   23383484 2010-08-14 22:25 imf.flv
-rw-rw-r-- 1   10137413 2010-08-29 06:53 imfb200s450.flv
-rw-rw-r-- 1   13595480 2010-08-29 08:02 imfb300s450.flv
-rw-rw-r-- 1   17103228 2010-08-29 06:49 imfb400s450.flv
-rw-rw-r-- 1   23430620 2010-08-29 08:08 imfb580s450.flv






IMAGE
動画:アンデス音楽
余計な事かも?しれませんが、Gstreamer-Javaを利用しての動画です。当社で開発中のプログラムを利用しています。


IMAGE
OpenOffice

ワード・表計算の世界標準を目指すオープン・オフィス:無償での提供