name: video-slideshow
FFmpegで画像+音声からスライドショー動画を作成するスキル。Ken Burns効果(ズームイン/アウト)対応。
ffmpeg -y \
-loop 1 -t 10 -i image1.png \
-loop 1 -t 10 -i image2.png \
-loop 1 -t 10 -i image3.png \
-i audio.mp3 \
-filter_complex "[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
-map "[outv]" -map 3:a \
-c:v libx264 -pix_fmt yuv420p -r 30 \
-c:a aac -b:a 128k \
-shortest \
output.mp4
ffmpeg -y -loop 1 -i image.png \
-vf "zoompan=z='min(zoom+0.001,1.3)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=300:s=1024x1024:fps=30,format=yuv420p" \
-t 10 -c:v libx264 -pix_fmt yuv420p \
scene_zoomin.mp4
ffmpeg -y -loop 1 -i image.png \
-vf "zoompan=z='if(lte(zoom,1.0),1.3,max(1.0,zoom-0.001))':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=300:s=1024x1024:fps=30,format=yuv420p" \
-t 10 -c:v libx264 -pix_fmt yuv420p \
scene_zoomout.mp4
ffmpeg -y -i bgm.mp3 -i narration.mp3 \
-filter_complex "[0:a]volume=0.15,afade=t=out:st=49:d=3[bgm];[1:a]volume=1.0[narr];[bgm][narr]amix=inputs=2:duration=shortest[aout]" \
-map "[aout]" -c:a aac -b:a 128k \
mixed_audio.m4a
# concat_list.txt を作成
cat > concat_list.txt << 'EOF'
file 'scene1.mp4'
file 'scene2.mp4'
file 'scene3.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat_list.txt -c copy output.mp4
| パラメータ | 説明 |
|---|---|
zoompan | Ken Burns効果フィルター |
z='min(zoom+0.001,1.3)' | ズームイン(1.0→1.3倍) |
d=300 | フレーム数(10秒 × 30fps) |
s=1024x1024 | 出力解像度 |
volume=0.15 | BGM音量(15%) |
afade=t=out:st=49:d=3 | 49秒からフェードアウト |
pix_fmt yuv420p を忘れて再生できない動画ができる: FFmpegのデフォルトピクセルフォーマットはソースに依存するため、-pix_fmt yuv420p を明示しないとブラウザやスマホで再生できないMP4が生成されるd パラメータと -t の不一致: zoompan の d=300(フレーム数)と -t 10(秒数)が fps=30 と整合していないと、動画の長さや速度が意図と異なる。d = 秒数 x fps で計算するconcat -c copy は同一コーデック・解像度のファイルのみ対応。異なる場合は再エンコード(-c:v libx264)するか、事前に解像度を統一する