動画編集を扱うので一番簡単なのは ffmpeg を使うことです。
macOSへのインストール
$ brew install ffmpeg
ffmpegのインストールはものすごい時間がかかります。正確な時間は計測していませんが、MacBook Proでも20分くらい。インストールというよりダウンロードしてからビルドしている感じがします。
ffmpegを使って動画編集する
動画の情報を取得する
ffprobe -show_streams /PATH/sample.mov
フォーマットを指定して出力したい場合 -print_format json
を指定します。
ffprobe -show_streams -print_format json /PATH/sample.mov
を実行すると下記のJSONが得られる。本当にJSONフォーマットなのか?と思わなくもないが……
{ Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/PATH/input.mov': Metadata: major_brand : qt minor_version : 0 compatible_brands: qt creation_time : 2020-03-30T12:49:57.000000Z com.apple.quicktime.location.ISO6709: LOCATION com.apple.quicktime.make: Apple com.apple.quicktime.model: iPhone 11 Pro com.apple.quicktime.software: 13.3.1 com.apple.quicktime.creationdate: 2020-03-30T21:49:57+0900 Duration: 00:00:02.07, start: 0.000000, bitrate: 7497 kb/s Stream #0:0(und): Video: hevc (Main) (hvc1 / 0x31637668), yuv420p(tv, bt709), 1920x1080, 7308 kb/s, 29.98 fps, 29.97 tbr, 600 tbn, 600 tbc (default) Metadata: creation_time : 2020-03-30T12:49:57.000000Z handler_name : Core Media Video encoder : HEVC Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 135 kb/s (default) Metadata: creation_time : 2020-03-30T12:49:57.000000Z handler_name : Core Media Audio Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2020-03-30T12:49:57.000000Z handler_name : Core Media Metadata Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default) Metadata: creation_time : 2020-03-30T12:49:57.000000Z handler_name : Core Media Metadata Stream #0:4(und): Data: none (mebx / 0x7862656D), 17 kb/s (default) Metadata: creation_time : 2020-03-30T12:49:57.000000Z handler_name : Core Media Metadata Unsupported codec with id 0 for input stream 2 Unsupported codec with id 0 for input stream 3 Unsupported codec with id 0 for input stream 4 "streams": [ { "index": 0, "codec_name": "hevc", "codec_long_name": "H.265 / HEVC (High Efficiency Video Coding)", "profile": "Main", // ... (中略) "tags": { "creation_time": "2020-03-30T12:49:57.000000Z", "language": "und", "handler_name": "Core Media Metadata" } } ] }
動画フォーマットを変換する
movをgitに変換する。
ffmpeg -i /PATH/input.mov /PATH/output.gif
mp4に変換したい場合は下記のように拡張子を変更します。
ffmpeg -i /PATH/input.mov /PATH/output.mp4
動画のサムネイル画像を取得する
ffmpeg -ss 1 -i /PATH/input.mov -vframes 1 /PATH/output.jpg
サムネイルフィルタを利用してもサムネイルが画像を取得することができる。
ffmpeg -i /PATH/input.mov -vf thumbnail -frames:v 1 /PATH/output.jpg
クロップ領域を切り出して動画を生成する
横幅320px、高さ480px、切り出すx座標、切り出すy座標とする場合。
ffmpeg -i /PATH/input.mov -vf crop=320:480:200:100 /PATH/output.mp4
動画をリサイズしたい
横幅320px、高さ480pxの動画にリサイズしたい場合。
ffmpeg -i /PATH/input.mov -s 320x480 /PATH/output.mp4
アスペクト比を保持したまま 横幅320pxの動画にリサイズする場合。
ffmpeg -i /PATH/input.mov -vf scale=320:-1 /PATH/output.mp4
アスペクト比を保持したまま 縦幅480pxの動画にリサイズする場合。
ffmpeg -i /PATH/input.mov -vf scale=-1:480 /PATH/output.mp4
動画にウォーターマーク(ロゴ)をつける
ロゴを用意した。
ffmpeg -i /PATH/input.mov -i /PATH/logo1.png -filter_complex overlay /PATH/output.mp4
実行すると、こうなる。パラメータを与えない場合は左上固定になるのだと思われる。
動画をクロッピングしてからウォーターマークをつける
ffmpeg -i /PATH/input.mov -i /PATH/logo1.png \ -filter_complex "[0]crop=320:480:200:100[a];[a][1]overlay" /PATH/output.mp4
動画に複数のウォーターマーク(ロゴ)をつける
このふたつのウォーターマークをつけたい。


ffmpeg -i /PATH/input.mov -i /PATH/logo1.png -i /PATH/logo2.png \ -filter_complex "[0:v][1:v]overlay=0:0[b];[b][2:v]overlay=0:100" /PATH/output.mp4
クロッピングしたあとに複数のウォーターマーク(ロゴ)をつける
ffmpeg -i /PATH/input.mov -i /PATH/logo1.png -i /PATH/logo2.png \ -filter_complex "[0:v]crop=320:480:200:100[a];[a][1:v]overlay=0:0[b];[b][2:v]overlay=0:100" /PATH/output.mp4
動作確認環境
- macOS Catalina 10.15.5
- ffmpeg v4.2.3
ffmpegのバージョン(とプラグイン?)は下記の通り。
ffmpeg version 4.2.3 Copyright (c) 2000-2020 the FFmpeg developers built with Apple clang version 11.0.3 (clang-1103.0.32.59) configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.3 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags=-fno-stack-check --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack libavutil 56. 31.100 / 56. 31.100 libavcodec 58. 54.100 / 58. 54.100 libavformat 58. 29.100 / 58. 29.100 libavdevice 58. 8.100 / 58. 8.100 libavfilter 7. 57.100 / 7. 57.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 5.100 / 5. 5.100 libswresample 3. 5.100 / 3. 5.100 libpostproc 55. 5.100 / 55. 5.100