FFmpeg
インストール (Windows)
Builds - CODEX FFMPEG @ gyan.dev
ffmpeg-release-full.7z
をダウンロードする。(ffmpeg-release-essentials.7z
は対応しているコーデックが少ない)
バージョン確認
エンコーダー一覧
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 |
- |
互換性重視。 |
コマンドラインオプション
| $ 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 ヘルプ
ピクセルフォーマットについては未指定だとエラーが出たので指定している。
| $ ffmpeg -i input.avi -pix_fmt yuv420p -c:v av1_nvenc output.mkv
|
PowerShell を使ったエンコード時間計測
| 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 |
無劣化のカット
| $ 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
オプションを使う。
| $ ffmpeg -y -i {inputFilePath} {outputFilePath}
|
動画の情報
動画から音声だけを切り出す
| $ ffmpeg -i video.webm -vn -acodec copy audio.opus
|
動画から音声を無くす
| $ ffmpeg -i video.webm -an -vcodec copy video_no_audio.webm
|
オプション
- リサイズして出力させるには
scale={width}:{height}
を指定する。(-1 を指定すると自動になる)
- Nearest Neighbor(ニアレストネイバー)を使うには
-sws_flags neighbor
を指定する。
- アスペクト比を変更するには
-aspect "x:y"
を指定する。
| $ 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
|