ffmpeg
メモです。
画像のフェードイン・フェードアウト
最初(0秒)から 3 秒でフェードイン、開始から 60 秒後から 3 秒でフェードアウト
ffmpeg -i in.mp4 -vf "fade=t=in:st=0:d=3,fade=t=out:st=60:d=3" out.mp4
音声のフェードイン・フェードアウト
最初(0秒)から 3 秒間でフェードイン、61秒から 3 秒でフェードアウト
ffmpeg -i in.mp4 -af "afade=t=in:st=0:d=3,afade=t=out:st=61:d=3" -c:v copy out.mp4
時間指定
ffmpeg -i input -af "afade=t=in:start_time=00\\:00\\:00:d=3" -c:v copy output
フェードアウトの場合は “t=in” のところを “t=out” で。
リサイズ
動画の横幅(width)を 1280 にする。高さ(height)はアスペクト比を維持して自動で設定する
ffmpeg -i in.mp4 -vf scale=1280:-1 out.mp4
動画に文字入れ
これは縦動画(x1280動画)
ffmpeg -i in.mp4 -filter_complex "drawtext=fontfile=/System/Library/Fonts/Supplemental/Bradley\ Hand\ Bold.ttf:text='@ten_forward':fontcolor=#C0DCC0:fontsize=16:x=600:y=1250" out.mp4
1280×720(HD)に文字入れ
ffmpeg -i in.mp4 -filter_complex "drawtext=fontfile=/System/Library/Fonts/Supplemental/Bradley\ Hand\ Bold.ttf:text='@ten_forward':fontcolor=#C0FFFF:fontsize=16:x=1150:y=680" out.mp4
4k動画に文字入れ(横)
ffmpeg -i in.mp4 -filter_complex "drawtext=fontfile=/System/Library/Fonts/Supplemental/Bradley\ Hand\ Bold.ttf:text='@ten_forward':fontcolor=#C0FFFF:fontsize=32:x=3600:y=2100" out.mp4
音を消す
ffmpeg -i in.mp4 -vcodec copy -an out.mp4
QuickTimeと互換性がないと言われた
-acodec copy -vcodec libx264 -pix_fmt yuv420p
AMDGPUを使った変換
Advanced Media Framework SDK を使った h264 エンコード
ffmpeg -hwaccel auto -i in.mp4 -c:v h264_amf -c:a copy out.mp4
MacBook のハードウェアエンコード
h264
ffmpeg -i in.mp4 -c:v h264_videotoolbox out.mp4
hevc(より容量が小さくなる)
ffmpeg -i in.mp4 -c:v hevc_videotoolbox out.mp4
固定レートでより容量を節約
ffmpeg -i in.mp4 -c:v hevc_videotoolbox -b:v 3.5M -tag:v hvc1 -c:a aac -b:a 128k -movflags +faststart out.mp4
Pixel 動画ブーストの動画の編集(AMDハードウェアエンコード)
こうやるといけた。“-pix_fmt yuv420p” がないとエラーになる。
progl ffmpeg -i PXL_20250228_060952574.VB-02.MAIN.mp4 -c:v h264_amf -c:a copy -crf 32 -pix_fmt yuv420p -ss 00:01:42 -to 00:02:27 out.mp4
倍速
ffmpeg -i in.mp4 -vf setpts=PTS/2.0 -af atempo=2.0 out.mp4
音ズレ
QuickTime では問題ないのに、なぜか他で再生するとずれることがあった。
VFR(可変フレームレート)からCFR(固定フレームレート)に変えると良いみたい。
30fps
ffmpeg -i in.mp4 -r 29.97 out.mp4
こんな感じでも良い模様。
ffmpeg -i in.mp4 -r 60 -vsync cfr out.mp4
回転
transpose=2 で左90度、transpoze=1で右90度
ffmpeg -i in.mp4 -vf transpose=2 -metadata:s:v:0 rotate=0 out.mp4
音声の調整(特定の周波数を上下)
ffmpeg -i in.m4a -vn -af "equalizer=f=1000:width_type=h:width=200:g=5" out.m4a
1000Hzから幅200Hzで5db上げる
ffmpeg -i in.m4a -vn -af "equalizer=f=300:width_type=h:width=200:g=-15" out.m4a
低いほうを下げる。こもった感じの音をクリアな感じにできるかも
台形補正
ffmpeg -i in.mp4 -vf "perspective=x0=396:y0=0:x1=1686:y1=190:x2=644:y2=2356:x3=1960:y3=2210,setdar=744/1133" out.mp4
x0などの座標は次の順序。
x0,y0 ---- x1,y1 | | | | x2,y2 ---- x3,y3
setdar で縦横比を決めている。“744/1133” は縦動画で iPad mini 7 の画面いっぱいのサイズ。
特定の時間を画像として保存
ffmpeg -ss 00:00:00 -i hana.mp4 -vframes 1 frame.png
次のようなhtmlをブラウザーで開くと、マウスオーバーで座標ゲット
<img src="frame.png" onmousemove="document.getElementById('pos').innerText=`x: ${event.offsetX}, y: ${event.offsetY}`">
<div id="pos"></div>
特定の領域を黒い長方形で覆う
ffmpeg -i input.mp4 -vf "\ drawbox=x=100:y=100:w=300:h=200:color=black:t=fill" output.mp4
座標(x,y)から幅w×高さhの範囲をぼかす(Blur)
(試してない)
ffmpeg -i input.mp4 -vf "\ [0:v]crop=w:h:x:y,boxblur=10[fg];\ [0:v][fg]overlay=x:y" output.mp4
低解像度にスケールダウン→アップで粗いモザイク
(試してない)
ffmpeg -i input.mp4 -vf "\ [0:v]crop=300:200:100:100,scale=iw/10:ih/10,scale=300:200:flags=neighbor[fg];\ [0:v][fg]overlay=100:100" output.mp4