FFmpeg常用コマンド大全
最も実用的なFFmpegコマンドを厳選。フォーマット変換、編集、圧縮、字幕、配信などの一般的なシーンを網羅しています。
続きを読む →FFmpeg字幕処理の様々なテクニックを習得し、入門から精通まで
字幕ファイルには様々なフォーマットがあり、それぞれ異なる特徴と適用シーンがあります。FFmpegで字幕を処理する前に、一般的な字幕フォーマットについて理解しておきましょう。
SRT(SubRip Text)は最も普及しているシンプルな字幕フォーマットで、ほぼすべてのプレーヤーがサポートしています。純粋なテキストフォーマットで、番号、タイムライン、字幕内容で構成されています。
1
00:00:01,000 --> 00:00:04,000
これは1行目の字幕です
2
00:00:05,000 --> 00:00:08,000
これは2行目の字幕です
長所:フォーマットがシンプル、互換性が高い、編集が容易。短所:スタイル設定に対応していない。
ASS(Advanced SubStation Alpha)は最も機能が豊富な字幕フォーマットで、フォント、色、位置、アニメーション効果など、豊富なスタイル設定に対応しています。
[Script Info]
Title: サンプル字幕
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour
Style: Default, Arial, 24, &H00FFFFFF
[Events]
Format: Layer, Start, End, Style, Text
Dialogue: 0, 0:00:01.00, 0:00:04.00, Default, これは1行目の字幕です
長所:スタイルが豊富、エフェクトに対応、カスタマイズ性が高い。短所:フォーマットが複雑、一部のデバイスではサポートされていない。
VTT(WebVTT)はウェブ用に設計された字幕フォーマットで、HTML5のvideoタグが標準でサポートしています。フォーマットはSRTに似ていますが、いくつかの拡張機能があります。
WEBVTT
00:00:01.000 --> 00:00:04.000
これは1行目の字幕です
00:00:05.000 --> 00:00:08.000
これは2行目の字幕です
長所:ウェブ標準対応、軽量。短所:ブラウザによってサポート状況が異なる、スタイル機能が限定的。
ハードサブ(Hardsub)は字幕を動画画像に直接描画し、字幕が動画の一部となって消せなくなる方式です。長所は互換性が高く、どのプレーヤーでも表示できること。短所は削除できず、再エンコードが必要なことです。
subtitlesフィルターを使用してSRT字幕を追加します:
ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4
字幕ファイル名に特殊文字やパスが含まれる場合は、エスケープが必要です:
ffmpeg -i input.mp4 -vf "subtitles='sub\ title.srt'" output.mp4
ASS字幕はスタイル情報を保持できます。assフィルターを使用します:
ffmpeg -i input.mp4 -vf ass=subtitle.ass output.mp4
SRT字幕の場合、force_styleパラメータで字幕スタイルを設定できます:
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&H00FFFFFF&,OutlineColour=&H00000000&,Outline=2'" output.mp4
FontName:フォント名FontSize:フォントサイズPrimaryColour:メインカラー(文字色)OutlineColour:アウトラインカラーBackColour:背景色Outline:アウトラインの太さShadow:シャドウの深さBold:太字(-1=オン、0=オフ)Italic:斜体注意:色のフォーマットは&HAABBGGRR(Alpha、Blue、Green、Red)で、一般的なRGBの順序とは逆になっています。
Alignmentパラメータで字幕の位置を調整できます:
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='Alignment=6,MarginV=50'" output.mp4
Alignmentの値は1-9で、テンキーの位置に対応しています(6=右中央、2=下中央、8=上中央)。
ソフトサブ(Softsub)は字幕を独立したトラックとして動画ファイルに埋め込み、再生時にオン/オフや切り替えができる方式です。長所は柔軟で画質に影響しないこと。短所はプレーヤーのサポートが必要なことです。
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4
MKVはソフトサブのサポートが最も充実しており、直接コピーできます:
ffmpeg -i input.mkv -i subtitle.srt -c copy output.mkv
ffmpeg -i input.mp4 -i zh.srt -i en.srt -i jp.srt \
-c copy -c:s mov_text \
-metadata:s:s:0 language=chi -metadata:s:s:0 title="中国語" \
-metadata:s:s:1 language=eng -metadata:s:s:1 title="English" \
-metadata:s:s:2 language=jpn -metadata:s:s:2 title="日本語" \
output.mp4
ffmpeg -i input.mp4 -i zh.srt -i en.srt \
-c copy -c:s mov_text \
-disposition:s:0 default \
-disposition:s:1 none \
output.mp4
動画ファイルから字幕を抽出して編集やフォーマット変換に使用したい場合があります。FFmpegでこの作業を簡単に行えます。
まず動画内の字幕トラック情報を確認します:
ffmpeg -i input.mkv
字幕トラックの番号(通常は0:s:0、0:s:1など)を見つけて抽出します:
ffmpeg -i input.mkv -map 0:s:0 output.srt
字幕が元々ASSフォーマットの場合は、直接抽出します:
ffmpeg -i input.mkv -map 0:s:0 -c copy output.ass
ffmpeg -i input.mkv -map 0:s -c copy output_%d.srt
MP4内の字幕は通常mov_textフォーマットなので、SRTに変換する必要があります:
ffmpeg -i input.mp4 -map 0:s:0 output.srt
用途によって異なる字幕フォーマットが必要になりますが、FFmpegは各種字幕フォーマット間の変換に対応しています。
ffmpeg -i input.srt output.ass
ffmpeg -i input.srt output.vtt
ASS字幕をSRTに変換すると、スタイル情報は失われます:
ffmpeg -i input.ass output.srt
ffmpeg -i input.vtt output.srt
FFmpegでハードサブを追加する際、スタイル設定は非常に重要です。以下に主なスタイルパラメータを詳しく説明します。
FFmpeg字幕フィルターが使用するカラーフォーマットは&HAABBGGRRです。内訳は以下の通りです:
AA:Alpha透明度(00=完全透明、FF=完全不透明)BB:青成分GG:緑成分RR:赤成分順序は青緑赤(BGR)で、一般的な赤緑青(RGB)とは逆になっているので注意してください。
| 色 | カラー値 | 説明 |
|---|---|---|
| 白 | &H00FFFFFF& | デフォルトの文字色 |
| 黒 | &H00000000& | アウトライン/シャドウの色 |
| 赤 | &H000000FF& | 強調文字 |
| 黄 | &H0000FFFF& | 定番の字幕色 |
| 半透明黒背景 | &H80000000& | 50%透明度の黒背景 |
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='
FontName=Microsoft YaHei,
FontSize=24,
PrimaryColour=&H00FFFFFF&,
OutlineColour=&H00000000&,
BackColour=&H80000000&,
Bold=-1,
Italic=0,
Outline=2,
Shadow=1,
Alignment=2,
MarginV=40
'" output.mp4
ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4ffmpeg -i input.mp4 -vf ass=sub.ass output.mp4ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontName=SimHei'" output.mp4ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontSize=30'" output.mp4ffmpeg -i input.mkv -i sub.srt -c copy output.mkvffmpeg -i input.mp4 -i sub.srt -c copy -c:s mov_text output.mp4ffmpeg -i input.mkv -map 0:s:0 output.srtffmpeg -i input.mkv -map 0:s -c copy sub_%d.srtffmpeg -i input.srt output.assffmpeg -i input.srt output.vttffmpeg -i input.ass output.srt通常は字幕ファイルのエンコーディングの問題です。字幕ファイルがUTF-8エンコーディングであることを確認するか、文字セットを指定してください:
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:charenc=GBK" output.mp4
システムに指定したフォントがインストールされていることを確認してください。Linuxシステムの場合は、フォントファイルを~/.fontsディレクトリに配置するか、フォントパスを設定できます:
FFLIBFREETYPE_FONTPATH=/path/to/fonts ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4
itsoffsetパラメータで字幕の時間オフセットを調整できます:
ffmpeg -i input.mp4 -itsoffset 0.5 -i sub.srt -c:v copy -c:a copy -c:s mov_text output.mp4
FFmpegは強力な字幕処理機能を提供しており、ハードサブ・ソフトサブの追加から、字幕の抽出・フォーマット変換まで、簡単に実行できます。これらのコマンドを習得することで、動画処理の効率を大幅に向上させることができます。
コマンドラインに慣れていないユーザーは、各種グラフィカルな字幕処理ツールを使用することもできます。ただし、FFmpegの柔軟性と強力な機能は、今でもプロユーザーの第一選択肢となっています。
その他の役立つ記事とツール