「編集アプリで1本作るのに30分。これを毎日5本、しかも顔出しなしで量産したい」——この記事は、まさにその段階でつまずいた人のためのものです。結論から言うと、縦型9:16への変換・字幕の焼き込み・BGM合成・無音カット・複数本の一括処理まで、ffmpeg 1本でパイプライン化できます。マウス操作ゼロ、1本あたり数十秒。編集アプリが「1本を丁寧に作る」道具なら、ffmpeg は「同じ工程を100本に複製する」道具です。
競合の技術ブログは「縦型変換だけ」「字幕焼き込みだけ」と単機能で分断されていて、素材から投稿用ファイルまでを1本の流れとして繋いだ解説がほとんどありません。この記事では、顔出しなしYouTube Shorts副業で実際に量産している人の視点から、動く実コマンドを最低8本、コピペで試せる形で並べます。学習コストや向かないケースも正直に書くので、導入すべきか自分で判断できるはずです。
まず結論:ffmpeg でShorts量産が成立する理由と、向かない場面
ffmpeg はコマンドラインの動画処理ツールです。GUIがないぶん取っつきにくいですが、「同じ処理を引数を変えて何百回でも正確に繰り返せる」点が量産と決定的に相性がいい。編集アプリはプレビューを見ながら1本ずつ仕上げる設計なので、100本作れば100回同じ操作を手でやることになります。ffmpeg はその100回をループ1行に畳み込めます。
一方で、向かない場面もはっきりしています。サムネの微妙なトリミング、カットのタイミングを耳で合わせる細かい編集、テロップアニメの凝った演出——こうした「1本ごとに人間の判断が要る作業」はアプリの方が速い。ffmpeg が強いのは、テンプレートが固まった後の「複製フェーズ」です。だから現実的な運用は「構成はアプリや台本で固め、量産だけffmpegに任せる」ハイブリッドになります。台本設計はAI台本プロンプトの実例集が参考になります。
| 項目 | 編集アプリ (CapCut等) | ffmpeg |
|---|---|---|
| 1本目の作りやすさ | ◎ プレビュー即確認 | △ コマンド調整が必要 |
| 100本の量産 | × 手作業100回 | ◎ ループ1行 |
| 細かい演出・アニメ | ◎ | △ 苦手 |
| 定型処理の速度 | △ | ◎ 数十秒/本 |
| 学習コスト | 低 | 中(数日) |
| ランニングコスト | 無料〜有料 | 完全無料 |
準備:インストールと「壊れない」検証コマンド
Windows なら公式ビルド配布元 gyan.dev の ffmpeg-release-full を落とし、bin フォルダを環境変数 PATH に通します。Mac は brew install ffmpeg、Ubuntu は sudo apt install ffmpeg です。字幕焼き込みには libass 同梱ビルドが必須なので、Windows は上記フルビルドを選んでください(最小ビルドだと subtitles フィルタで落ちます)。
インストール後、まず素材の中身を確認する癖をつけましょう。解像度・尺・回転メタデータを把握しないと変換設定を間違えます。
# バージョンとフィルタ対応の確認
ffmpeg -version
ffmpeg -filters | grep -E "subtitles|drawtext|ass"
# 素材の解像度・尺・回転情報を確認
ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height,r_frame_rate,duration \
-show_entries stream_tags=rotate \
-of default=noprint_wrappers=1 input.mp4
ffprobe で幅・高さが出ます。スマホ撮影素材は rotate=90 のメタデータで縦横が入れ替わって見えることがあるので要注意です。
コマンド①:横型16:9をShorts用の縦型9:16に変換する
Shorts の推奨解像度は 1080×1920(9:16)。横型素材を縦にする方法は2つあり、目的で使い分けます。
A. 上下を黒帯で埋める(レターボックス) — 元映像を全部見せたいとき。
ffmpeg -i input.mp4 -vf \
"scale=1080:-2:force_original_aspect_ratio=decrease,\
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black,setsar=1" \
-c:v libx264 -crf 20 -preset medium -c:a aac -b:a 128k output_vertical.mp4
scale=1080:-2 は幅1080に合わせ高さを自動計算(-2は2の倍数に丸める=エンコード要件)。pad で1080×1920のキャンバス中央に配置します。setsar=1 はピクセル比を正方形に固定し、再生環境での歪みを防ぐおまじないです。
B. 中央を切り抜いて全画面にする(クロップ) — 余白なしで迫力を出したいとき。被写体が中央にある素材向き。
ffmpeg -i input.mp4 -vf \
"scale=-2:1920,crop=1080:1920,setsar=1" \
-c:v libx264 -crf 20 -preset medium -c:a aac -b:a 128k output_crop.mp4
高さを1920に合わせて拡大し、中央から幅1080を切り出します。左右が見切れるので、テロップや重要被写体が端にある素材では A を選んでください。
回転メタデータの補正 — スマホ縦撮り素材が横向きに出る場合:
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output_rotated.mp4
transpose=1 が時計回り90度、transpose=2 が反時計回りです。
コマンド②:字幕を焼き込む(subtitles と drawtext の使い分け)
「焼き込み(ハードサブ)」は映像に字幕を直接描画する方式で、どの再生環境でも必ず表示され、Shorts のように字幕前提の視聴で効きます。反面、後からOFFにできないのが唯一の弱点です。
SRTファイルを焼き込む基本形:
ffmpeg -i output_vertical.mp4 -vf "subtitles=subs.srt" \
-c:v libx264 -crf 20 -c:a copy output_subbed.mp4
これだと小さくて読みにくいので、スタイルを force_style で指定します。Shorts はスマホ縦画面。フォントは大きめ、白文字+黒縁取り、下寄せが定番です。
ffmpeg -i output_vertical.mp4 -vf \
"subtitles=subs.srt:force_style='FontName=Yu Gothic UI,Fontsize=18,\
PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,\
Outline=3,Shadow=1,Alignment=2,MarginV=220'" \
-c:v libx264 -crf 20 -c:a copy output_styled.mp4
ここで重要なのが MarginV=220。Shorts は画面下部にタイトル・ボタン等のUIが重なります。字幕を下ギリギリに置くとUIに隠れるので、下から一定量(220px前後)持ち上げてセーフゾーン内に収めます。競合記事がほぼ触れていないShorts特化のポイントです。色は &HAABBGGRR の順(AA=透明度00で不透明)で、青緑赤の順なので注意。
固定テキスト(チャンネル名・冒頭フックなど)は drawtext が手軽:
ffmpeg -i output_vertical.mp4 -vf \
"drawtext=text='続きは概要欄':fontfile='C\:/Windows/Fonts/YuGothB.ttc':\
fontsize=54:fontcolor=white:borderw=4:bordercolor=black:\
x=(w-text_w)/2:y=h*0.12" \
-c:v libx264 -crf 20 -c:a copy output_hook.mp4
Windowsで drawtext を使う際、フォントパスのコロンは C\:/Windows/... とエスケープが必要です。ここでハマる人が多いので覚えておいてください。日本語を焼くには日本語対応フォント(Yu Gothic 等)の指定が必須です。
コマンド③④:音声合成・BGM・無音カット(顔出しなし量産の核)
顔出しなしShortsの多くは「フリー素材や画像+合成音声(TTS)+字幕」で作ります。TTSの選定は無料TTS比較2026を参照。ここではナレーション音声とBGMを音量調整して混ぜ、映像に載せる工程を1コマンドで行います。
ffmpeg -i video.mp4 -i narration.wav -i bgm.mp3 -filter_complex \
"[2:a]volume=0.15[bg];\
[1:a][bg]amix=inputs=2:duration=first:dropout_transition=2[aout]" \
-map 0:v -map "[aout]" -c:v copy -c:a aac -b:a 192k -shortest output_mixed.mp4
[2:a]volume=0.15 でBGM(3番目の入力)を15%まで下げ、ナレーションを埋もれさせません。amix で2音声を合成、-shortest で映像かナレーションの短い方に尺を合わせます。-map で「0番の映像」「合成した音声」を明示的に選ぶのがポイントです。
静止画1枚+音声でShortsを作る(スライド系・解説系で頻出):
ffmpeg -loop 1 -i image.png -i narration.wav -vf \
"scale=1080:1920:force_original_aspect_ratio=decrease,\
pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1" \
-c:v libx264 -tune stillimage -crf 20 -c:a aac -b:a 192k \
-pix_fmt yuv420p -shortest output_slide.mp4
-loop 1 で画像を静止動画化し、-shortest で音声の長さに合わせて自動終了。-pix_fmt yuv420p はプレイヤー互換性のため入れておくと安全です。
無音カットで尺を詰める(60秒制約への対応)
Shorts は原則60秒以内。TTSの不自然な間や録音の沈黙を自動で削ると、テンポが上がり尺も収まります。ffmpeg の silenceremove フィルタを使います。
ffmpeg -i input.mp4 -af \
"silenceremove=start_periods=1:start_duration=0.3:start_threshold=-40dB:\
stop_periods=-1:stop_duration=0.4:stop_threshold=-40dB" \
-c:v libx264 -crf 20 -c:a aac output_trimmed.mp4
stop_threshold=-40dB より静かな区間が 0.4秒以上続いたらカット、という設定です。閾値を厳しく(-50dB等)すると誤カットが増えるので、素材のノイズレベルに合わせて調整してください。映像と音声のズレが心配な場合は、この処理は音声だけに適用し後で結合する運用が安全です。
単純に指定秒数で切り出す(冒頭フック用クリップ量産など):
ffmpeg -ss 00:00:05 -i input.mp4 -t 58 -c:v libx264 -crf 20 -c:a aac clip.mp4
-ss(開始)を -i の前に置くと高速シーク、-t 58 で58秒だけ切り出します。
コマンド⑤⑥:複数分割と一括バッチ量産
長尺配信やまとめ動画から複数のShortsを機械的に切り出す使い方です。開始時刻の配列をループで回します(bash例)。
starts=("00:00:00" "00:01:00" "00:02:00")
i=1
for s in "${starts[@]}"; do
ffmpeg -ss "$s" -i source.mp4 -t 58 \
-vf "scale=-2:1920,crop=1080:1920,setsar=1" \
-c:v libx264 -crf 20 -c:a aac "short_$(printf '%02d' $i).mp4"
i=$((i+1))
done
出力を short_01.mp4 のように連番命名しておくと、後続の投稿工程で管理しやすくなります。命名規則を決めておくのが量産運用のコツです。
フォルダ内を一括処理するバッチ(量産の本命)
ここが編集アプリに対する最大の差です。input/ フォルダの全mp4を縦型変換+字幕焼き込みして output/ に吐く処理を、人間の操作ゼロで回します。
Windows バッチ(.bat):
@echo off
setlocal enabledelayedexpansion
if not exist output mkdir output
for %%f in (input\*.mp4) do (
echo Processing %%~nxf ...
ffmpeg -y -i "%%f" -vf "scale=1080:-2:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1,subtitles='input/%%~nf.srt':force_style='Fontsize=18,Outline=3,Alignment=2,MarginV=220'" -c:v libx264 -crf 20 -c:a aac "output\%%~nf_vertical.mp4"
)
echo All done.
%%~nf はファイル名(拡張子なし)で、同名の .srt を自動で拾って字幕を当てています。-y は上書き確認をスキップし完全自動化するための指定です。
Mac/Linux(.sh):
#!/usr/bin/env bash
mkdir -p output
for f in input/*.mp4; do
name=$(basename "$f" .mp4)
echo "Processing $name ..."
ffmpeg -y -i "$f" \
-vf "scale=1080:-2:force_original_aspect_ratio=decrease,\
pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1,\
subtitles=input/${name}.srt:force_style='Fontsize=18,Outline=3,Alignment=2,MarginV=220'" \
-c:v libx264 -crf 20 -c:a aac "output/${name}_vertical.mp4" \
|| echo "FAILED: $name" >> errors.log
done
|| echo ... >> errors.log で失敗したファイルだけをログに残す簡易エラーハンドリングを入れています。100本回して2本失敗しても、どれが失敗したか一目で分かります。これも競合記事が薄い実務ポイントです。
量産バッチ導入 5ステップ
input/に素材mp4と同名の.srt(字幕)を入れる- 上記スクリプトを保存(Windowsは
run.bat、Macはrun.sh) - Macは
chmod +x run.shで実行権限を付与 - ダブルクリック or
./run.shで実行、output/を確認 errors.logをチェックし、失敗分だけ素材を直して再実行
コマンド⑦⑧:GPU高速化と投稿前の最終最適化
CPUエンコード(libx264)は高品質ですが遅い。NVIDIA GPUがあるなら NVENC に切り替えると、100本の総処理時間が体感で数分の1になります。副業で毎日回すなら効きます。
ffmpeg -i input.mp4 -vf \
"scale=1080:-2:force_original_aspect_ratio=decrease,\
pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1" \
-c:v h264_nvenc -preset p5 -cq 23 -b:v 0 -c:a aac output_fast.mp4
-c:v h264_nvenc がGPUエンコーダ、-cq 23 が品質基準(数字を下げると高画質・大容量)。画質はlibx264のcrfにわずかに劣りますが、Shorts の視聴環境では差はほぼ分かりません。「品質最優先の1本はlibx264、量産はNVENC」が現実的な使い分けです。対応エンコーダは ffmpeg -encoders | grep nvenc で確認できます。
投稿前の最終最適化(YouTube推奨に合わせる)
アップロード前に音量を揃え(ラウドネス正規化)、互換性の高いコンテナに整えます。チャンネル内で音量バラつきがあると視聴維持率に響くので、量産時こそ正規化が効きます。
ffmpeg -i output_styled.mp4 -af "loudnorm=I=-14:TP=-1.5:LRA=11" \
-c:v copy -c:a aac -b:a 192k -movflags +faststart final_upload.mp4
loudnorm=I=-14 はYouTubeが基準とするラウドネス(-14 LUFS)に合わせる設定。-movflags +faststart はメタデータを先頭に移してアップロード後の処理を速くします。映像は再エンコード不要なので -c:v copy で一瞬で終わります。
出来上がったファイルは、投稿の自動化まで繋げると完全放置に近づきます。投稿工程はShorts自動投稿の方法で解説しています。ffmpeg(生成)→スケジューラ→API投稿、と繋げば「素材を置くだけ」の量産ラインになります。
投稿前チェックリスト
- [ ] 解像度が1080×1920(
ffprobeで確認) - [ ] 尺が60秒以内
- [ ] 字幕が下部UIに被っていない(MarginV調整済み)
- [ ] BGMがナレーションを邪魔していない
- [ ] 音量正規化(-14 LUFS)済み
- [ ]
+faststart付与済み - [ ] 日本語フォントが文字化けしていない
主要フィルタ・オプション早見表
現場で頻繁に使うものだけを絞りました。この表を手元に置けば、大半のShorts加工はコマンドを組み立てられます。
| 目的 | フィルタ / オプション | 要点 |
|---|---|---|
| リサイズ | scale=1080:-2 |
-2で2の倍数に自動調整 |
| 黒帯padding | pad=1080:1920:(ow-iw)/2:(oh-ih)/2 |
中央配置の定番式 |
| 中央クロップ | crop=1080:1920 |
全画面化・端が見切れる |
| 回転補正 | transpose=1 |
1=時計/2=反時計90度 |
| SRT字幕 | subtitles=x.srt:force_style=... |
libass必須 |
| 固定テキスト | drawtext=text=... |
フォントパス要エスケープ |
| 音量調整 | volume=0.15 |
BGMを下げる |
| 音声合成 | amix=inputs=2 |
ナレ+BGM |
| 無音カット | silenceremove=... |
尺短縮・テンポUP |
| 音量正規化 | loudnorm=I=-14 |
YouTube基準 |
| GPU高速化 | -c:v h264_nvenc |
量産で効く |
| ピクセル比固定 | setsar=1 |
歪み防止 |
よくある質問
ffmpegとCapCutなどの編集アプリ、どちらを使うべき?
量産フェーズはffmpeg、演出重視の1本はアプリ、が正解です。両方使うハイブリッドが最も現実的です。
構成やテロップ演出を試行錯誤する段階はプレビューできるアプリが圧倒的に速い。ですが、テンプレートが固まって「同じ処理を毎日5本」の段階に入ると、手作業のアプリはボトルネックになります。テンプレをffmpegコマンド化すれば、あとは素材を差し替えるだけで量産できます。
字幕が「文字化け」または「表示されない」原因は?
多くは日本語フォント未指定、libass非対応ビルド、SRTの文字コードのいずれかです。順に潰します。
force_style='FontName=Yu Gothic UI' で日本語フォントを明示し、Windowsは gyan.dev のフルビルドを使い(ffmpeg -filters に subtitles があるか確認)、SRTは UTF-8(BOMなし)で保存してください。この3点でほぼ解決します。
Shorts で字幕が下のボタンに隠れてしまうのはなぜ?
MarginV を大きくして字幕を上に持ち上げます。目安は200〜250pxです。
Shorts は画面下部にタイトル・いいね・コメント等のUIが重なります。subtitles=...:force_style='Alignment=2,MarginV=220' のように下マージンを確保すると、UIと干渉しないセーフゾーンに収まります。実機で一度確認して微調整するのが確実です。
BGMがうるさくてナレーションが聞こえないときは?
volume でBGMを10〜20%程度まで下げてから amix で合成してください。
[2:a]volume=0.15[bg];[1:a][bg]amix=inputs=2 のようにBGM側だけ音量を絞るのがコツです。それでも埋もれるなら sidechaincompress(ナレーション時にBGMを自動で下げるダッキング)を使う手もありますが、まずは固定音量で十分実用になります。
処理が遅い。100本回すと時間がかかりすぎるときは?
NVIDIA GPUがあれば -c:v h264_nvenc に替えるだけで数倍速くなります。-preset の見直しも有効です。
CPUの libx264 は -preset medium が標準ですが、量産では -preset veryfast で速度優先にする、あるいはNVENCへ切り替えるのが効きます。画質差はShorts視聴ではほぼ体感できません。夜間にバッチを回して朝に受け取る運用も現実的です。
音ズレが起きて映像と字幕・音声がずれるのはなぜ?
可変フレームレート素材が原因のことが多いです。-r 30 で固定フレームレート化すると直ります。
スマホやキャプチャ素材はVFR(可変フレームレート)のことがあり、これが音ズレの元凶です。ffmpeg -i in.mp4 -r 30 -c:v libx264 -c:a aac out.mp4 で30fps固定に変換してから加工すると安定します。silenceremove を映像込みで使う時も同様に固定fpsが安全です。
無料の商用利用は本当に大丈夫?ライセンスは?
ffmpeg本体はLGPL/GPLで商用利用可、収益化Shortsにも使えます。ただし素材・BGM・フォントの権利は別です。
ffmpegで加工すること自体に費用や許諾は不要です。注意すべきは入力する素材側で、フリー素材でも「商用可」「クレジット要否」を必ず確認してください。字幕フォントも商用利用可能なものを選ぶ必要があります。
まず何から始めればいい?最短の学習ルートは?
コマンド①(縦型変換)を1本試す→②字幕→⑥バッチ、の順が挫折しにくいです。数日で回せます。
いきなり全部を組まず、手持ちの横型mp4を1本、縦型に変換するところから始めてください。次に字幕を1本焼き込み、動いたらバッチ化してループに載せる。この順なら各ステップで成功体験が得られ、学習コストを最小化できます。プログラミング経験がなくてもコピペと置換で運用可能です。
エラーが出て止まる。どう調べればいい?
エラーメッセージの最終行を読むのが基本です。多くは入力パス誤り・フィルタ構文ミス・コーデック非対応です。
No such file はパス、No such filter はビルド非対応、Invalid argument はフィルタ構文の誤り(カンマ・コロンの位置)を疑います。まず -i の入力だけで再生できるか確認し、フィルタを1つずつ足して切り分けると原因が特定しやすいです。バッチには前述の errors.log を仕込んでおきましょう。
まとめ
ffmpeg は「1本を丁寧に作る」道具ではなく、「固まったテンプレを大量に複製する」道具です。だからこそ、顔出しなしYouTube副業の量産フェーズと決定的に相性がいい。この記事のコマンドを順に試せば、縦型変換→字幕焼き込み→音声合成→無音カット→一括バッチ→GPU高速化→投稿前最適化まで、素材を置くだけの量産ラインが組めます。
最初の数日は学習コストがかかり、細かい演出には向きません。そこはアプリや台本設計と役割分担し、ffmpeg には複製だけを任せる——このハイブリッドが、無理なく毎日投稿を続ける現実解です。まずはコマンド①を1本、今日試してみてください。動いた瞬間、量産のイメージが一気に具体化するはずです。