ゆず日記

戦う Vimmer 兼 Dvorakユーザ 兼 Kinesisユーザ 兼 おぺらー が戦わないブログ

ffmpegでの変換とか何とか

ちょっと昔(と言っても半年くらい前)にメモってたものの纏め

Macでのインストール

例によってhomebrewで。

$ brew install ffmpeg

ヘルプ

お決まり。

$ ffmpeg -h

ちょっと長くて見づらいようであれば、ファイルに出力すれば良い。

$ ffmpeg -h > help.txt

動画ファイルの詳細確認

$ ffmpeg -i ./movie.mp4
ffmpeg version 1.0 Copyright (c) 2000-2012 the FFmpeg developers
  built on Dec 11 2012 22:23:46 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.0 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      51. 73.101 / 51. 73.101
  libavcodec     54. 59.100 / 54. 59.100
  libavformat    54. 29.104 / 54. 29.104
  libavdevice    54.  2.101 / 54.  2.101
  libavfilter     3. 17.100 /  3. 17.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './movie.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    creation_time   : 2012-06-22 03:16:35
    encoder         : HandBrake 0.9.6 2012022800
    genre           : Movie
    artist          : hoge
  Duration: 00:09:31.09, start: 0.000000, bitrate: 2042 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 512x384 [SAR 1:1 DAR 4:3], 1874 kb/s, 30 fps, 30 tbr, 90k tbn, 180k tbc
    Metadata:
      creation_time   : 2012-06-22 03:16:35
    Stream #0:1(jpn): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 164 kb/s
    Metadata:
      creation_time   : 2012-06-22 03:16:35

上記から動画にはlibx264, 音声にはlibfaacが使われていることが分かる。

動画ファイルから音声のみ抽出

基本フォーマットはコレ。

$ ffmgep -i <入力ファイルパス> -vn -acodec  copy <出力ファイルパス>

-vnで動画部分排除(-anなら音声部分排除)
codecの指定方法は、基本は -acodec <codec名>で指定するのだが、copyを利用すると、元のcodecをそのまま利用できる。

$ ffmpeg -i movie.mp4 -vn -acodec copy sound.m4a

着信音作成

元データが動画の場合には、-vnを付ける。
元データが音声の場合には、-vn不要。

$ ffmpeg -i movie.m4a -vn -acodec copy ringtone.m4a

# 着信音の拡張子へrename
$ mv ringtone.m4a ringtone.m4r

出力ファイルを直接*.m4rと指定しても、'Unable to find a suitable output format for '*.m4r' *.m4r: Invalid argument'と怒られるので、変換後にrenameする必要がある。

その後、iTunesへドロップすれば自動的に着信音としてライブラリ登録される。


-tオプションで時間指定

$ ffmpeg -i movie.mp4 -vn -acodec copy -t 00:00:40 sound.m4a  

これで40秒。

-ssオプションで開始時間指定

$ ffmpeg -i movie.mp4 -vn -acodec copy -ss 00:00:05 -t 00:00:40 sound.m4a

この場合、元データの5秒目から40秒間分(5〜45秒)が抽出される

別のcodecへ変換

まず先述のffmpeg -i で情報を調べる

$ ffmpeg -i ./movie.mp4
    Stream #0:1(jpn): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 164 kb/

codecを指定しつつ、情報に併せて音質を指定する。

# ステレオ, 44100Hz, 164kbのaudio.m4aを作成
$ ffmpeg -i ./movie.mp4 -vn -acodec <codec名> -ac 2 -ar 44100 -ab 164k audio.m4a

好みに応じて値を変更すると良い。