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 があれば実施できます。(本記事記載のバイナリはリンク済です)