ffmpegの基本的な使い方
こんにちは。研究開発部の高野と申します。今回は、主に初心者向けに、
映像音声の加工ツール ffmpeg の 基本的なコマンド例を 記載させて頂きます。
インストール
[MAC]
下記サイト等よりバイナリをダウンロードします。
https://evermeet.cx/ffmpeg
※7zの解凍ツールは、下記等をご参照ください。
https://itunes.apple.com/jp/app/the-unarchiver/id425424353?mt=12&ign-mpt=uo%3D4
[Windows]
以下のサイト等より、プラットホームに合わせてバイナリをダウンロードします
https://ffmpeg.zeranoe.com/builds
(”Linking”はStaticを選択してください)
バイナリを適切なディレクトリに格納し、環境変数pathを、ffmpegバイナリの格納ディレクトリに設定します
1. コマンドの基本構文
ffmpeg 入力オプション -i 入力ファイル名 出力オプション 出力ファイル名
2. 動画の特定の範囲を切り出す
例:
ffmpeg -ss 3.3 -i input.mp4 -t 6.7 output.mp4
-ss 開始位置 単位:秒(少数点可)
-t 切り出す長さ
元映像 (15秒)
出力映像(3.3秒から10秒まで)
3. 動画の特定の領域をカットする(クロップ)
例:
ffmpeg -i input.mp4 -vf crop="in_w/2:in_h/2:in_w/4:in_h/4" output.mp4
-vf crop=”w:h:x:y” の順で
w,h: 切り出す幅/高さ
x,y: 切り出す位置 を指定します
in_w: “入力ファイルの幅”として使えるラベル
in_h: “入力ファイルの高さ”として使えるラベル
出力映像(元映像は2.と同じ)
4. 映像と音声を結合
例:
ffmpeg -i input.mp4 -i music.m4a -map 0:0 -map 1:0 -codec copy -shortest mix.mp4
出力映像(元映像は2.と同じ)
5. 再生速度変更
例1:2倍速
ffmpeg -i input.mp4 -vf setpts=PTS/2.0 -af atempo=2.0 output_x2.0.mp4
出力映像(元映像は4.の出力映像)
例2:0.5倍速
ffmpeg -i input.mp4 -vf setpts=PTS/0.5 -af atempo=0.5 output_x0.5.mp4
出力映像(元映像は4.の出力映像)
例3:16倍速
ffmpeg -i input.mp4 -vf setpts=PTS/16.0 -af atempo=2.0,atempo=2.0,atempo=2.0,atempo=2.0 output_x16.mp4
setpts=PTS/映像の速度倍率
atempo=音声の速度倍率
2倍速以上は、音声のatempoオプションを”,”で重ねることで実現します。
出力映像(元映像は4.の出力映像)
6.ファイル連結
例:
ffmpeg -i mix_speed2.0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i mix_speed0.5.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
出力映像(元映像は5.の2倍速/0.5倍速映像)
7. 動画からGIFアニメを作成する
例:
ffmpeg -i input.mp4 -an -r 15 -pix_fmt rgb24 -f gif -s 320x180 output.gif
-r: フレームレート
-s: サイズ
出力映像(GIF)
8. サムネイルを取り出す
例:
ffmpeg -ss 10.0 -i input.mp4 -r 1 -vframes 1 -f image2 thumbnail.png
-ss 取り出す位置(単位:秒)
(出力イメージ)
9. サムネイルから動画作成
例:
ffmpeg -f image2 -r 30 -loop 1 -t 10 -i input.png output.mp4
-t: ファイル長(単位:秒)
-r: フレームレート
出力映像:省略
10. 映像のみのファイルに無音ソースを付与する
例:
ffmpeg -i videoonly.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -shortest -vcodec copy -acodec aac output.mp4
-shortest: 出力の長さが入力ファイルのうち最も短い長さに設定されます。
出力映像:省略
11. 映像にテキストを重ねる
例1:
ffmpeg -i input.mp4 -filter_complex "drawtext=fontfile=/Library/Fonts/Arial.ttf:text='Text String':fontsize=72:fontcolor=white: x=100: y=100:" output.mp4
fontfile:フォントファイルのパス
# MACでは下記フォルダ配下に存在します。
/System/Library/Fonts/
/Library/Fonts/
~/Library/Fonts/
# Windowsの場合、C:\Windows\Fonts配下に格納されている場合が多いようです。
注意: コマンド実施時、fontfile=’C\:\\Windows\\Fonts\\arial.ttf’ のようにエスケープ文字を追加してください。
text: 文字列
fontsize: フォントサイズ
fontcolor: 文字色
x,y: テキスト位置
出力映像(元映像は2.と同じ)
例2:
ffmpeg -i input.mp4 -filter_complex "drawtext=fontfile=/Library/Fonts/Arial.ttf:textfile=/tmp/message.txt:fontsize=72:fontcolor=white: x=(main_w-tw)/2: y=(main_h-th)/2" output.mp4
main_h, main_h: 入力映像サイズの幅、高さ
tw, th: 「描画テキストの幅、高さ」として使えるラベル
textfile: テキストファイルのパス
12. テロップを入れる
例:
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/Library/Fonts/Arial.ttf: fontsize=72: fontcolor=white: x=main_w-mod(n*((main_w+tw)/150)\,main_w+tw): y=(h-th)/2:text='AAABBBCCCDDDEEEFFFGGG'" output.mp4
n: フレーム番号
フレーム番号に適切なオフセットを掛けることで、毎文字位置をずらします。
本例では、画面左から文字列が出現し、
右へ向かって、5秒(150フレーム)で、画面を移動するループ動作としました。
13. タイムスタンプを映像に出力する
例:タイムスタンプを表示
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/Library/Fonts/Arial.ttf:x=(main_w-tw)/2:y=(main_h-th*2):fontsize=72:fontcolor=blue:text='%{pts\\:hms}'" output.mp4
出力映像:
例:タイムコードを表示
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/Library/Fonts/Arial.ttf: timecode='00\:00\:00\:00': r=30: x=(main_w-tw)/2: y=(main_h-th)/4: fontsize=60: fontcolor=white" output.mp4
出力映像:
[注意]
※11,12,13の内容(動画上へのテキスト描画)は、ffmpegのバイナリがlibfreetypeとリンクされていない場合実施できません
ffmpegコマンドを引数なしで実行時に表示されるオプションリストに –enable-fontconfig, –enable-libfreetype があれば実施できます。(本記事記載のバイナリはリンク済です)