FFmpegは、動画形式変換、動画ダウンロードなどで大変助かります。
しかし、パラメータをたまに忘れてしまうのでここにばっと書いていきます。
2021/02/06 コーデック追加、項目を追加しました。
コーデックの変換
input.mp4を映像コーデックlibx264で、音声コーデックlibmp3lameでoutput.mp4に出力するとき
ffmpeg -i ./input.mp4 -vcodec libx264 -acodec libmp3lame output.mp4
映像のビットレートを変える
映像ビットレート変更は-vb [ビットレート(数字の後にk,m)]
- 600kbpsに下げるとき
ffmpeg -i ./input.mp4 -vb 600k output.mp4
音声のサンプリングレートを変える
音声のサンプリングレート変更は-ar [周波数(Hz単位)]
- 48000Hzに変更するとき
ffmpeg -i ./input.mp4 -vcodec copy -ar 48000 output.mp4
音声のビットレートを変える
音声のビットレート変更は-ab [ビットレート(数字の後にk,m)]
- 128kbpsに変更するとき
ffmpeg -i ./input.mp4 -vcodec copy -ab 128k output.mp4
ハードウェアアクセラレーションを使う
FFmpegは様々なハードウェアアクセラレーション機能を使うことができます。
Intel CPUの場合
Intel CPUの場合は、QSVというハードウェアアクセラレーションが使えます。
H.264はSandy Bridge以降、H.265とVP9はKaby Lake以降の世代でQSVを使うことができます。
通常に比べてエンコード速度がそこそこ上がります。
アクセラレーション名は qsv
です。
H.264,H.265は専用コーデックがあります。
NVIDIA GeForceの場合
GeForceを装着しているパソコンなら、CUDAコアを使ったアクセラレーションが使えます。
GeForce 8シリーズ以降なら使えるので、最近のGeForceは100%使えます。
アクセラレーション名は cuda
です。
H.264,H.265は専用コーデックがあります。
Windows Vista以降の場合
CPUに関係なく、Vista以降ならDXVA(DirectX Video Acceleration)が使えます。
アクセラレーション名は dxva2
です。
Linuxの場合
ほとんどの環境で「vaapi」(Video-Acceleraion API)が利用可能です。
QSVなどと同等のパフォーマンスが得られます。
アクセラレーション名は vaapi
です。
Twitterの動画をダウンロードする
例えば、以下のツイートの動画をダウンロードしたいとします。
https://twitter.com/SquidSky1/status/933593660779724801
まず、そこにアクセスしてから、F12キーを押してDev Toolsを開きます。
「Network」タブで、Allを選び「.m3u8」がつくリクエストを探します。
それを右クリックで、Copy▶Copy link addressでリンクをコピーします。
そうしたら、端末などで以下のように入力します。
ffmpeg -i [コピーしたURL] -movflags faststart -c copy -bsf:a aac_adtstoasc twitter.mp4
こうすると、カレントディレクトリにtwitter.mp4としてダウンロードされます。
動画を逆にする
逆再生をするのには、動画編集ソフトが必要かなと思うと思いますが、実はFFmpegでも処理できます。
-filter_complexオプションにreverse;areverse
をつけるだけです。
input.mp4を逆にしてoutput.mp4に保存する場合です。
ffmpeg -i ./input.mp4 -filter_complex "reverse;areverse" output.mp4
これで、逆再生になります。
ただし、メモリの消費が大きいので、8GBメモリの環境をおすすめします。
AACなのに、サイズが小さいのに、音質を良くする方法
Star.flacというファイルがあって、これをAAC 192kbpsに変換します。
普通は、192kbpsは音質が悪くなるんですが、FFmpegであるパラメータを指定すると、サイズが小さいのに高音質になります!
ffmpeg -i Star.flac -b:a 192k -aac_coder twoloop Star.m4a
これだけでいいんです!
「-aac_coder twoloop」がポイントです。
一般的なエンコーダは、twoloopがfastになっています。twoloopにすると、エンコーダの精度が上がります。なのに、ファイルサイズがあまり変わらない。
魅力的ですね。
おまけ2
主な映像コーデック一覧
これらは-vcodec
オプションなどで指定できます。
コーデック名 | 形式(拡張子) |
---|---|
libx264 | MPEG-4,H.264(.mp4) |
h264 | MPEG-4,H.264(.mp4) |
h264_qsv | H.264(Intel Quick Sync Video) |
h264_nvenc | H.264(NVIDIA CUDAアクセラレーション) |
h264_vaapi | H.264(vaapi) |
hevc | H.265(.mp4) |
hevc_qsv | H.265(Intel Quick Sync Video, Kaby Lake以降) |
hevc_nvenc | H.265(NVIDIA CUDAアクセラレーション) |
flv1 | Flashムービー(.flv) |
mjpeg | Motion JPEG(.jpeg) |
mjpeg_qsv | JPEG(Intel Quick Sync Video) |
mpeg1video | MPEG-1 Video(.mpg) |
mpeg2video | MPEG-2 Video(.m2ts、.vob) |
mpeg2_qsv | MPEG-2 Video(Intel Quick Sync Video) |
msvideo1 | Microsoft Video(.avi) |
vp3 | VP3(.avi、.mov、.mkv) |
vp6 | VP6(.avi、.mkv、.tc7) |
vp6a | VP6(Flash用、アルファチャンネル対応) (.flv) |
vp6f | VP6(Flash用) (.flv) |
vp7 | VP7(.avi) |
vp8 | VP8(.webm、.avi) |
vp9 | Google VP9 |
vp9_qsv | VP9 (Intel Quick Sync Video, Kaby Lake以降) |
wmv1 | Windows Media Player 7向け |
wmv2 | Windows Media Player 8向け |
wmv3 | Windows Media Player 9向け |
主な音声コーデック一覧
これらは-acodec
オプションなどで指定できます。
コーデック名 | 形式 |
---|---|
libmp3lame | MPEG audio layer 3 |
aac | Advanced Audio Coding |
alac | Apple Lossless |
flac | Free Lossless Audio Codec |
on2 | |
mp1 | MPEG audio layer 1 |
mp2 | MPEG audio layer 2 |
mp3 | MPEG audio layer 3 |
opus | Opus(webm) |
pcm_s16le | PCM 16bit(WAVファイル) |
pcm_s24le | PCM 24bit(WAVファイル) |
vorbis | Vorbis(OGGファイル) |
wmav1 | Windows Media Audio 1(WMAファイル) |
wmav2 | Windows Media Audio 2(WMAファイル) |
コメント
@yumetodoリンクをコピー このコメントを報告 0
@yohhoy(編集済み) リンクをコピー このコメントを報告 0
あれっ、opus in mp4って許可されるんでしたっけ・・・?
FFmpegでは Opus in MP4(ISOBMFF) に対応しているようですよ。
https://github.com/FFmpeg/FFmpeg/commit/0c4d2082961f23bb8d5b8f9e963bbecf4147d699
FFmpegサポートは実験的(experimental)ですし、仕様自体も非公式なものにはなりますが、事実上の標準とみなせるかと...