コンテンツにスキップ

FFmpeg

インストール (Windows)

Builds - CODEX FFMPEG @ gyan.dev

ffmpeg-release-full.7zをダウンロードする。(ffmpeg-release-essentials.7zは対応しているコーデックが少ない)

バージョン確認

1
$ ffmpeg -version

エンコーダー一覧

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ ffmpeg -encoders
ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Encoders:
 V..... = Video
 A..... = Audio
 S..... = Subtitle
 .F.... = Frame-level multithreading
 ..S... = Slice-level multithreading
 ...X.. = Codec is experimental
 ....B. = Supports draw_horiz_band
 .....D = Supports direct rendering method 1
 ------
# 略
 V..... libsvtav1            SVT-AV1(Scalable Video Technology for AV1) encoder (codec av1)
 V....D av1_nvenc            NVIDIA NVENC av1 encoder (codec av1)
# 略
 V....D libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
 V....D h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
# 略
 V....D libx265              libx265 H.265 / HEVC (codec hevc)
# 略
 V....D libvpx-vp9           libvpx VP9 (codec vp9)
# 略
 A....D aac                  AAC (Advanced Audio Coding)
# 略
 A....D libopus              libopus Opus (codec opus)

映像エンコーダと音声エンコーダの組み合わせの例

映像 音声 拡張子 ハードウェアエンコード 説明
av1_nvenc libopus .mkv ✅️ 圧縮率重視。
libsvtav1 libopus .mkv - 圧縮率重視。
libvpx-vp9 libopus .webm - -
h264_nvenc aac .mp4 ✅️ 互換性重視。
libx264 aac .mp4 - 互換性重視。

コマンドラインオプション

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ ffmpeg -i {inputFilePath} -c:v {encoder} {outputFilePath}

# 入力ファイル: input.avi
# ピクセルフォーマット: yuv420p
# 映像エンコーダー: av1_nvenc
# 映像ビットレート: 8Mbps
# 音声エンコーダー: libopus
# 音声ビットレート: 128kbps
# 出力ファイル: output.mkv
$ ffmpeg -i input.avi -pix_fmt yuv420p -c:v av1_nvenc -b:v 8M -c:a libopus -b:a 128k output.mkv

ビットレート値は以下を参考にした。

ライブ エンコーダの設定、ビットレート、解像度を選択する - YouTube ヘルプ

ピクセルフォーマットについては未指定だとエラーが出たので指定している。

1
$ ffmpeg -i input.avi -pix_fmt yuv420p -c:v av1_nvenc output.mkv

PowerShell を使ったエンコード時間計測

1
Measure-Command { ffmpeg -i input.avi -pix_fmt yuv420p -c:v av1_nvenc -b:v 8M -c:a libopus -b:a 64k output8.mkv }
画素数 再生時間[s] エンコード時間[s] エンコード時間比
1920x1080 60(1 分) 7.2 0.12
1920x1080 648(10 分 48 秒) 44.7 0.07

無劣化のカット

1
2
$ ffmpeg -ss {start} -to {end} -i {inputFilePath} -c copy {outputFilePath}
$ ffmpeg -ss 00:00:03.78 -to 00:14:40.65 -i input.avi -c copy trimmed.avi

出力先ファイルが既に存在する場合、上書き

-yオプションを使う。

1
$ ffmpeg -y -i {inputFilePath} {outputFilePath}

動画の情報

1
$ ffmpeg -i video.webm

動画から音声だけを切り出す

1
$ ffmpeg -i video.webm -vn -acodec copy audio.opus

動画から音声を無くす

1
$ ffmpeg -i video.webm -an -vcodec copy video_no_audio.webm

オプション

  • リサイズして出力させるにはscale={width}:{height}を指定する。(-1 を指定すると自動になる)
  • Nearest Neighbor(ニアレストネイバー)を使うには-sws_flags neighborを指定する。
  • アスペクト比を変更するには-aspect "x:y"を指定する。
1
$ ffmpeg -i input.avi -vf scale=-1:1080 -aspect "4:3" -sws_flags neighbor -pix_fmt yuv420p -c:v av1_nvenc -b:v 8M -c:a libopus -b:a 128k output.mkv

その他

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 640x480のゲーム画面をエンコードする
$ ffmpeg -i raw.avi -pix_fmt yuv420p -c:v av1_nvenc -b:v 256k -c:a libopus -b:a 64k output.mkv

# h264に変換する
$ ffmpeg -i video.mkv -c:v libx264 video.mp4

# 映像VP9、音声Opusでエンコードする
$ ffmpeg -i video.avi -pix_fmt yuv420p -c:v libvpx-vp9 -b:v 2M -c:a libopus -b:a 64k video.webm

# 映像AV1、音声Opusでエンコードする
$ ffmpeg -i video.avi -pix_fmt yuv420p -c:v libsvtav1 -b:v 256k -c:a libopus -b:a 64k video.mkv

# 映像AV1、無音でエンコードする
$ ffmpeg -i video.avi -pix_fmt yuv420p -c:v libsvtav1 -b:v 256k -an video.mkv

# 映像H264、音声AACでエンコードする
$ ffmpeg -i video.avi -pix_fmt yuv420p -c:v h264_nvenc -b:v 512k -c:a aac -b:a 64k output.mp4