WebM 形式から MP4 に変換する
入力ファイルに WebM 形式のファイルを指定し、出力ファイルに拡張子 .mp4
のファイル名を指定する。
$ ffmpeg -i input.webm output.mp4
参考:
FFmpeg で WebM を MP4 に変換する | みかづきブログ
WebM を MP4 に変換する | あしたの Ubuntu
WebM 形式に変換する
動画を ffmpeg
コマンドで WebM 形式に変換する。
$ ffmpeg -i input.mp4 output.webm
ドキュメント:
VP9 Encoding Guide | FFmpeg Wiki [Official]
VP8 Encoding Guide | FFmpeg Wiki [Official]
VP9 ビットレート モードの詳細 | Google for Developers [公式]
VP8 Encode Parameter Guide | The WebM Project [Official]
参考:
FFmpeg を使って動画を WebM へ変換する手順 – Qiita
Mac + Homebrew 環境に FFmpeg を導入し、動画を .mp4 → .webm へ変換する方法 | 0017
WebM to MP4 conversion using FFmpeg – Stack Overflow
constant rate factor for different WebM qualities – Super User
H.264 でエンコードする
通常画質でエンコードする。
$ ffmpeg -i movie.avi \ -vcodec libx264 -preset medium -crf 23 \ -pix_fmt yuv420p -movflags +faststart output.mp4
高画質でエンコードする。
$ ffmpeg -i movie.avi \ -vcodec libx264 -preset slow -crf 21 \ -pix_fmt yuv420p -movflags +faststart output.mp4
ドキュメント:
H.264 Video Encoding Guide | FFmpeg Wiki [Official]
参考:
H.264 でエンコード | tech.ckme.co.jp
x264 の CRF 値はどれくらいが適切なのか? | もにっき
フレームレートを変換する
フレームを間引く
-r
オプションで出力のフレームレートを指定する。入力と出力の間で -r
オプションを指定すると、入力ファイルのフレームレートより小さい値の場合は、動画の再生時間を維持したままフレームが間引かれる。入力ファイルのフレームレートより大きい場合は効果がない。
$ ffmpeg -i movie.mp4 -r 30 movie_30fps.mp4
ドキュメント:
Changing Frame Rate | FFmpeg Wiki [Official]
Video Options | FFmpeg Documentation [Official]
参考:
動画のフレームレートを強制的に変更して出力したい | 人生は読めないブログ
Using FFmpeg to change framerate – Stack Overflow
change FPS while-loops exporting FFmpeg – Stack Overflow
Faster way to change framerate from 60FPS to 30 FPS? – reddit
ファイル形式を指定する
AVI ファイルを MP4 形式に変換する。
$ ffmpeg -i movie.avi -pix_fmt yuv420p movie.mp4
参考:
FFmpeg を利用した動画ファイルフォーマット変換 – Qiita
Encode with FFmpeg using AVI to MP4 – Unix & Linux Stack Exchange
convert from AVI to MP4 using FFmpeg – Stack Overflow
YUV420
一部のプレイヤーは YUV420 でないと再生できないため、-pix_fmt yuv420p
オプションを指定して、色情報を YUV420 でエンコードする必要がある。
オプション
-pix_fmt yuv420p
:色情報を YUV420 でエンコードする
参考:
Twitter に MP4 動画をアップロードするには yuv420p を使う必要がある (らしい) | kivantium 活動日記
FFmpeg で AVI を MP4 に変換すると Windows Media Player で再生できない? | urashita.com
再生をすぐに開始できるようにする
メタ情報 (Moov Atom) をファイルの先頭に移動して、ファストスタート (Fast Start) を有効にする。
$ ffmpeg -i movie.mp4 -c copy -movflags +faststart output.mp4
参考:
YouTube の MP4 ファストスタート (moov atom 先頭) とは?変換ツールも紹介 | アカスブログ
HTML5 の video タグで利用する MP4 の動画を作る時の Tips – Qiita
MP4 動画をプログレッシブダウンロード再生するには | 端くれプログラマの備忘録
Any downsides to always using the -movflags faststart parameter? – Super User
画質
参考:
保存用動画は CRF/固定品質モードでエンコードしよう | 翔星 Be ランド日記
Understanding Rate Control Modes (x264, x265, vpx) | Werner Robitza
CBR, CRF, and Changing Resolution using FFmpeg | OTTVerse
2-Pass Encoding vs. 1-Pass CRF – Stack Overflow
CRF / CQP is incompatible with 2-pass – Stack Overflow
CRF (Constant Rate Factor)
0
~51
の値を指定する。- 値が小さいほど高画質となる。
- デフォルト
- libx264:
23
- libx265:
28
- libx264:
動画:
CRF / Constant Rate Factor Comparison (Bozott)
ドキュメント:
H.264 Video Encoding Guide | FFmpeg Wiki
参考:
動画出力の品質レベルの最適値考察 (x264 CRF) | デジタルキャットの備忘録
CRF Guide – Constant Rate Factor in x264, x265 and libvpx | Werner Robitza
What is -crf used for in FFmpeg? – Super User
What does -crf mean in FFmpeg resize video file command? – Stack Overflow
How FFmpeg CRF works? – Stack Overflow
Will I get any visual benefit if I use CRF values below 17 in x264? – Super User
Multiple outputs with ffmpeg using Constant Rate Factor – Super User
How to estimate CRF for H.264 video target size – Stack Overflow
What is the right way to calculate 1080p 720p 360p 240p quality? – Super User
可逆/ロスレスエンコード (Lossless)
x264 形式で可逆エンコードを実行するには、CFR オプションに 0
を指定する。
$ ffmpeg -i movie.avi -vcodec libx264 -preset slow -cfr 0 movie.mp4
注意事項
可逆エンコードはビットレートが高いため、特に解像度が高い動画はリアルタイムに再生できず、主に中間保存形式としての用途に用いる。用途によっては、十分に品質が高い不可逆エンコードを用いる方が適切な場合がある。
参考:
x264 とそのライブラリを用いた FFmpeg / MEncoder の可逆エンコードに関する覚え書き #2 | 試験運用中な Linux 備忘録
x264 とそのライブラリを用いた FFmpeg / MEncoder の可逆エンコードに関する覚え書き #1 | 試験運用中な Linux 備忘録
VFR を CFR に変換する
オプション -vsync cfr
を付けて処理する。
$ ffmpeg -i input.mp4 -vsync cfr output.mp4
リポジトリ:
nssuperx/vfr2cfr: FFmpegを使って VFR 動画を CFR 動画に変換する – GitHub
参考:
FFmpeg で VFR の MP4 ファイルを CFR の MP4 ファイルに変換する方法 | PC 役立ち情報
How to convert VFR to CFR without messing up the timing – Super User
コーデック
使い分け
- H.264
- エンコードが比較的高速である。
- ビットレートが多少高くても、高画質を維持したい場合に使う。
- H.265
- エンコードに時間を掛けてでも圧縮したい場合に使う。
- 画質を多少犠牲にして圧縮率を高められる。
- VP9 / AV1
- 個人が使うにはエンコード時間が長過ぎる。
- プラットフォーマー向け
ドキュメント:
Codecs | FFmpeg Documentation [Official]
参考:
FFmpeg でよく使う例、コーデックをまとめてみた – Qiita
-c:v or -vcodec copy or -codec:v | FFmpeg User ML
再エンコードしない
映像を再エンコードせずにその他の処理を実行する場合は、オプション -vcodec copy
を指定する。
参考:
What’s the difference between FFmpeg’s “-vcodec copy” and “-sameq”? – Super User
偶数/奇数フレームのみを抜き出す
参考:
Drop every even or odd frames using FFmpeg? – Super User
UtVideo 形式
コード:
UtVideo フォーマットにエンコード (dashimaki360) – GitHub Gist
参考:
UtVideo Codec Suite の UtVideo T2 (UMxx) ファミリと FFmpeg | yumetodo の旅とプログラミングとかの記録