<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT &#8211; polepolelife</title>
	<atom:link href="https://polepolelife.com/category/it/feed/" rel="self" type="application/rss+xml" />
	<link>https://polepolelife.com</link>
	<description>お勉強・読書などの情報をお送りします</description>
	<lastBuildDate>Tue, 21 Jul 2026 04:23:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.8</generator>
	<item>
		<title>ffmpeg を利用して英語MP3から＋英日字幕つき動画（MP4）を作る方法</title>
		<link>https://polepolelife.com/ffmpeg-mp4/</link>
					<comments>https://polepolelife.com/ffmpeg-mp4/#respond</comments>
		
		<dc:creator><![CDATA[david daichan]]></dc:creator>
		<pubDate>Sat, 24 Jan 2026 02:12:18 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<guid isPermaLink="false">https://polepolelife.com/?p=459</guid>

					<description><![CDATA[はじめに：英語の音声から「2カ国語字幕付き動画」を全自動生成する Pythonの強力なライブラリ群とコマンドラインツールを組み合わせると、日常の面倒な作業を驚くほど自動化できます。前回の記事では、AIを使って音声から字幕ファイル（SRT）を生成する手順を解説しましたが、今回はさらに一歩踏み込んで、「英語の音声ファイルから、英語と日本語のデュアル字幕（2カ国語字幕）が同期した動画（MP4）」を全自動で作り出す方法をご紹介します。 実は先日、個人的なプロジェクトで7時間にも及ぶ英語の長尺オーディオデータを処理する機会があったのですが、このスクリプトとFFmpegを組み合わせたおかげで、寝ている間にPCが完璧な字幕付き動画を完成させてくれました。手作業で字幕を合わせていたら、おそらく数週間はかかっていたでしょう。 今回はテストとして、私の愛読書である『「怠惰」なんて存在しない 終わりなき生産性競争から抜け出すための幸福論』（デヴォン・プライス著）の冒頭部分を自分で英語で音読し、MP3に録音したものを用意しました。私の拙い英語発音でもAIが正常に音声として認識し、綺麗な字幕動画になるのかを検証してみます。 💡 この記事はこんな人におすすめです 英語のポッドキャストや講演の音声から、学習用の字幕動画を作りたい人 Pythonを使って自動翻訳や動画編集の自動化（FFmpeg処理）を学びたい人 海外向けのYouTube動画に、多言語の字幕を焼き付けたい動画クリエイター この記事でできること（完成イメージ） この記事の手順を最後まで進めると、以下のような処理が自動で行えるようになります。 英語の音声データ（MP3）から、タイムスタンプ付きの英語字幕（SRT）を高精度で生成する 生成した英語字幕のテキストを抽出し、自動翻訳で日本語の字幕（SRT）を複製する FFmpegのフィルター機能を駆使して、「黒背景＋音声＋上部に英語字幕＋下部に日本語字幕」の動画（MP4）をエンコードする 前提環境と準備するファイル 項目 内容]]></description>
										<content:encoded><![CDATA[<style>
/* ツールチップ付き単語のスタイル /
.tooltip-term {
border-bottom: 2px dotted #ff9900;
cursor: help;
position: relative;
font-weight: bold;
color: #d17a00;
}
/ ツールチップ本体 /
.tooltip-term::after {
content: attr(data-tip);
position: absolute;
bottom: 140%;
left: 50%;
transform: translateX(-50%);
background-color: #333;
color: #fff;
padding: 8px 12px;
border-radius: 6px;
font-size: 13px;
white-space: nowrap;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s;
z-index: 100;
pointer-events: none;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
/ 吹き出しの矢印 /
.tooltip-term::before {
content: "";
position: absolute;
top: -10px;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #333 transparent transparent transparent;
opacity: 0;
visibility: hidden;
transition: opacity 0.3s;
}
/ ホバー時の表示 */
.tooltip-term:hover::after,
.tooltip-term:hover::before {
opacity: 1;
visibility: visible;
bottom: 110%;
}
</style>
<h2 class="wp-block-heading">はじめに：英語の音声から「2カ国語字幕付き動画」を全自動生成する</h2>
<p>Pythonの強力なライブラリ群とコマンドラインツールを組み合わせると、日常の面倒な作業を驚くほど自動化できます。前回の記事では、AIを使って音声から字幕ファイル（SRT）を生成する手順を解説しましたが、今回はさらに一歩踏み込んで、<strong>「英語の音声ファイルから、英語と日本語のデュアル字幕（2カ国語字幕）が同期した動画（MP4）」</strong>を全自動で作り出す方法をご紹介します。</p>
<p>実は先日、個人的なプロジェクトで7時間にも及ぶ英語の長尺オーディオデータを処理する機会があったのですが、このスクリプトと<span class="tooltip-term" data-tip="音声や動画のフォーマットを変換したり、加工したりするための強力なコマンドラインツール">FFmpeg</span>を組み合わせたおかげで、寝ている間にPCが完璧な字幕付き動画を完成させてくれました。手作業で字幕を合わせていたら、おそらく数週間はかかっていたでしょう。</p>
<p>今回はテストとして、私の愛読書である<a href="https://www.amazon.co.jp/dp/4799330268" target="_blank" rel="noopener">『「怠惰」なんて存在しない 終わりなき生産性競争から抜け出すための幸福論』（デヴォン・プライス著）</a>の冒頭部分を自分で英語で音読し、MP3に録音したものを用意しました。私の拙い英語発音でもAIが正常に音声として認識し、綺麗な字幕動画になるのかを検証してみます。</p>
<div class="wp-block-group" style="background-color: #f0f8ff; border: 2px solid #4ab4ff; border-radius: 8px; padding: 20px; margin-bottom: 30px;">
<h3 class="wp-block-heading" style="margin-top: 0; color: #0056b3;"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> この記事はこんな人におすすめです</h3>
<ul class="wp-block-list" style="margin-bottom: 0;">
<li>英語のポッドキャストや講演の音声から、学習用の字幕動画を作りたい人</li>
<li>Pythonを使って自動翻訳や動画編集の自動化（FFmpeg処理）を学びたい人</li>
<li>海外向けのYouTube動画に、多言語の字幕を焼き付けたい動画クリエイター</li>
</ul>
</div>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h2 class="wp-block-heading">この記事でできること（完成イメージ）</h2>
<p>この記事の手順を最後まで進めると、以下のような処理が自動で行えるようになります。</p>
<ul class="wp-block-list">
<li>英語の音声データ（MP3）から、タイムスタンプ付きの<strong>英語字幕（SRT）を高精度で生成する</strong></li>
<li>生成した英語字幕のテキストを抽出し、<strong>自動翻訳で日本語の字幕（SRT）を複製する</strong></li>
<li>FFmpegのフィルター機能を駆使して、<strong>「黒背景＋音声＋上部に英語字幕＋下部に日本語字幕」の動画（MP4）をエンコードする</strong></li>
</ul>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h2 class="wp-block-heading">前提環境と準備するファイル</h2>
<figure class="wp-block-table is-style-stripes">
<table class="has-fixed-layout">
<thead>
<tr>
<th>項目</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>OS</td>
<td>macOS / Linux / Windows (<span class="tooltip-term" data-tip="Windows Subsystem for Linux。Windows上でLinux環境を動かす仕組み">WSL</span>推奨)</td>
</tr>
<tr>
<td>Python</td>
<td>バージョン 3.9以上</td>
</tr>
<tr>
<td>必須ツール</td>
<td><strong>ffmpeg</strong> （aptコマンド等で簡単にインストール可能）</td>
</tr>
<tr>
<td>入力音声</td>
<td><code>LazinessDoesNotExist.mp3</code></p>
<p><span style="font-size: 0.8em; color: #666;">（今回は私が音読した約5分のテスト音声を使用します）</span></td>
</tr>
</tbody>
</table>
</figure>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h2 class="wp-block-heading">ステップ1：必要なツールのインストール</h2>
<p>まずは、動画処理の要となる「FFmpeg」と、AI音声認識や翻訳を行うための「Pythonライブラリ群」をインストールします。</p>
<h3 class="wp-block-heading">FFmpegのインストール（Ubuntu / WSL環境）</h3>
<p>ターミナルを開き、以下のコマンドを実行してFFmpegをインストールします。</p>
<pre class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem;"><code class="shiki nord" style="background-color: #2e3440ff; color: #d8dee9ff;"><span class="line"><span style="color: #88c0d0;">sudo</span><span style="color: #d8dee9ff;"> apt update</span></span>
<span class="line"><span style="color: #88c0d0;">sudo</span><span style="color: #d8dee9ff;"> apt install ffmpeg</span></span></code></pre>
<h3 class="wp-block-heading">Pythonライブラリのインストール</h3>
<p>次に、AIモデルと翻訳ツールをPython環境（必要に応じて仮想環境内で）にインストールします。</p>
<pre class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem;"><code class="shiki nord" style="background-color: #2e3440ff; color: #d8dee9ff;"><span class="line"><span style="color: #88c0d0;">pip</span><span style="color: #d8dee9ff;"> install openai-whisper pysrt googletrans==4.0.0rc1</span></span></code></pre>
<p>少しファイルサイズが大きいため、インストールには数分かかる場合があります。</p>
<p>※注意：<code>googletrans</code> は、Google翻訳の非公式APIを叩くライブラリです。安定して動作させるため、必ず末尾に <code>==4.0.0rc1</code> をつけてバージョンを指定してください（最新の仕様変更によるエラーを防ぐためです）。</p>
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="194" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/01/image-194-1024x194.png" alt="pip install実行中のターミナル画面" class="wp-image-463" srcset="https://polepolelife.com/wp-content/uploads/2026/01/image-194-1024x194.png 1024w, https://polepolelife.com/wp-content/uploads/2026/01/image-194-300x57.png 300w, https://polepolelife.com/wp-content/uploads/2026/01/image-194-768x145.png 768w, https://polepolelife.com/wp-content/uploads/2026/01/image-194-1536x291.png 1536w, https://polepolelife.com/wp-content/uploads/2026/01/image-194.png 1966w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<h3 class="wp-block-heading">各ライブラリの役割</h3>
<figure class="wp-block-table">
<table>
<thead>
<tr>
<th>ライブラリ名</th>
<th>目的と技術的背景</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>openai-whisper</strong></td>
<td>OpenAIが開発した超高精度な音声認識AIです。MP3の波形データを解析し、英語のテキストデータと時間情報（SRT）を生成します。</td>
</tr>
<tr>
<td><strong>pysrt</strong></td>
<td>SRT（字幕）ファイルをPython上でプログラムとして扱うためのライブラリです。字幕の表示時間をずらしたり、テキストだけを抽出したりできます。</td>
</tr>
<tr>
<td><strong>googletrans</strong></td>
<td>抽出した英語のテキストを、Google翻訳のエンジンを利用して日本語に一括翻訳します。</td>
</tr>
</tbody>
</table>
</figure>
<p><span style="font-size: 0.9em; color: #666;">（※余談ですが、もし「自分の声ではなくAIに音読させたい」場合は、<code>Piper</code>という高速なローカル音声合成CLIツールを使うのがおすすめです。今回は自前の録音データを使うので割愛します。）</span></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h2 class="wp-block-heading">ステップ2：英語MP3から英語SRTを作る（Whisper）</h2>
<p>まずは録音したMP3ファイルから、英語のベースとなる字幕ファイル（SRT）を生成します。Pythonのスクリプトを書かなくても、Whisperをインストールするとコマンドライン（<span class="tooltip-term" data-tip="Command Line Interface。黒い画面で文字を打ち込んでPCを操作すること">CLI</span>）から<span class="tooltip-term" data-tip="1行のコマンドだけで複雑な処理を実行すること">ワンライナー</span>で簡単に実行できます。</p>
<pre class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem;"><code class="shiki nord" style="background-color: #2e3440ff; color: #d8dee9ff;"><span class="line"><span style="color: #88c0d0;">whisper</span><span style="color: #d8dee9ff;"> LazinessDoesNotExist.mp3 --language en --model small --output_format srt</span></span></code></pre>
<p><strong>【コマンドの解説】</strong></p>
<ul class="wp-block-list">
<li><code>--language en</code> : 音声が英語であることを明示し、精度を上げます。</li>
<li><code>--model small</code> : 軽量かつ実用的な「small」モデルを指定します。ハイスペックなPCをお持ちなら「medium」や「large」にするとさらに精度が上がります。</li>
<li><code>--output_format srt</code> : 動画編集ソフトやFFmpegで読み込みやすい標準的な字幕フォーマット（SRT形式）で出力させます。</li>
</ul>
<p>自分で音読した5分程度のMP3であれば、処理は数分で終わります。なお、グラフィックボード（GPU）を搭載していないPCで実行すると、以下のようなエラー（警告）が出ますが、<strong>これは無視して全く問題ありません。</strong></p>
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="75" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/01/image-195-1024x75.png" alt="FP16サポートに関する警告画面" class="wp-image-466" srcset="https://polepolelife.com/wp-content/uploads/2026/01/image-195-1024x75.png 1024w, https://polepolelife.com/wp-content/uploads/2026/01/image-195-300x22.png 300w, https://polepolelife.com/wp-content/uploads/2026/01/image-195-768x56.png 768w, https://polepolelife.com/wp-content/uploads/2026/01/image-195-1536x112.png 1536w, https://polepolelife.com/wp-content/uploads/2026/01/image-195-2048x150.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<pre class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem;"><code class="shiki nord" style="background-color: #2e3440ff; color: #d8dee9ff;"><span class="line"><span style="color: #616e88;"># 表示される警告メッセージ</span></span>
<span class="line"><span>UserWarning: FP16 is not supported on CPU; using FP32 instead</span></span></code></pre>
<p>これは「高速なAI計算（FP16）に対応したGPUがないので、普通のCPU計算（FP32）で頑張りますね」という単なるお知らせです。</p>
<p>実行中、ターミナルにはAIが聞き取ったテキストがタイムスタンプと共に次々と表示されていきます。</p>
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="132" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/01/image-196-1024x132.png" alt="Whisperによる字幕生成の進捗画面" class="wp-image-469" srcset="https://polepolelife.com/wp-content/uploads/2026/01/image-196-1024x132.png 1024w, https://polepolelife.com/wp-content/uploads/2026/01/image-196-300x39.png 300w, https://polepolelife.com/wp-content/uploads/2026/01/image-196-768x99.png 768w, https://polepolelife.com/wp-content/uploads/2026/01/image-196-1536x197.png 1536w, https://polepolelife.com/wp-content/uploads/2026/01/image-196.png 1976w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p>処理が完了すると、同じフォルダ内に <code>LazinessDoesNotExist.srt</code> というファイルが生成されています。</p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h2 class="wp-block-heading">ステップ3：英語SRTから日本語SRTへ自動翻訳</h2>
<p>次に、先ほど生成した英語の字幕ファイルを読み込み、表示のタイミング（時間情報）はそのまま維持した状態で、テキスト部分だけを日本語に直訳するPythonスクリプトを作成します。</p>
<p>以下のコードをコピーし、<code>translate.py</code> という名前で保存してください。</p>
<pre class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem;"><code class="shiki nord" style="background-color: #2e3440ff; color: #d8dee9ff;"><span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">pysrt</span></span>
<span class="line"><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">googletrans</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">Translator</span></span>
<span class="line"><span></span></span>
<span class="line"><span style="color: #616e88;"># 1. Whisperで作った英語のSRTファイルを読み込む</span></span>
<span class="line"><span style="color: #d8dee9ff;">subs = pysrt.open(</span><span style="color: #a3be8c;">"LazinessDoesNotExist.srt"</span><span style="color: #d8dee9ff;">)</span></span>
<span class="line"><span style="color: #d8dee9ff;">translator = Translator()</span></span>
<span class="line"><span></span></span>
<span class="line"><span style="color: #616e88;"># 2. 字幕の各行（ブロック）を1つずつ取り出して処理</span></span>
<span class="line"><span style="color: #81a1c1;">for</span><span style="color: #d8dee9ff;"> sub </span><span style="color: #81a1c1;">in</span><span style="color: #d8dee9ff;"> subs:</span></span>
<span class="line"><span style="color: #d8dee9ff;">    </span><span style="color: #616e88;"># 英語(en)から日本語(ja)へ翻訳</span></span>
<span class="line"><span style="color: #d8dee9ff;">    ja = translator.translate(sub.text, src=</span><span style="color: #a3be8c;">"en"</span><span style="color: #d8dee9ff;">, dest=</span><span style="color: #a3be8c;">"ja"</span><span style="color: #d8dee9ff;">)</span></span>
<span class="line"><span style="color: #d8dee9ff;">    </span><span style="color: #616e88;"># 元の英語テキストを、翻訳された日本語テキストに上書き</span></span>
<span class="line"><span style="color: #d8dee9ff;">    sub.text = ja.text</span></span>
<span class="line"><span></span></span>
<span class="line"><span style="color: #616e88;"># 3. 日本語用の別ファイルとして保存する</span></span>
<span class="line"><span style="color: #d8dee9ff;">subs.save(</span><span style="color: #a3be8c;">"LazinessDoesNotExist_ja.srt"</span><span style="color: #d8dee9ff;">, encoding=</span><span style="color: #a3be8c;">"utf-8"</span><span style="color: #d8dee9ff;">)</span></span></code></pre>
<p>準備ができたら、ターミナルで以下のコマンドを実行します。</p>
<pre class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem;"><code class="shiki nord" style="background-color: #2e3440ff; color: #d8dee9ff;"><span class="line"><span style="color: #88c0d0;">python</span><span style="color: #d8dee9ff;"> translate.py</span></span></code></pre>
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="79" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/01/image-197-1024x79.png" alt="翻訳プロセス実行中の画面" class="wp-image-471" srcset="https://polepolelife.com/wp-content/uploads/2026/01/image-197-1024x79.png 1024w, https://polepolelife.com/wp-content/uploads/2026/01/image-197-300x23.png 300w, https://polepolelife.com/wp-content/uploads/2026/01/image-197-768x59.png 768w, https://polepolelife.com/wp-content/uploads/2026/01/image-197.png 1473w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<p>処理が完了すると、フォルダ内には以下の2つのファイルが揃います。</p>
<ul class="wp-block-list">
<li><code>LazinessDoesNotExist.srt</code>（オリジナルの英語字幕）</li>
<li><code>LazinessDoesNotExist_ja.srt</code>（直訳された日本語字幕）</li>
</ul>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<h2 class="wp-block-heading">ステップ4：FFmpegでデュアル字幕付き動画（MP4）をエンコードする</h2>
<p>いよいよクライマックスです。</p>
<p>音声ファイルと2つの字幕ファイルが揃ったので、これらを合体させて1つの動画ファイルを<span class="tooltip-term" data-tip="データを特定のフォーマット（今回はMP4動画）に変換・圧縮して書き出すこと">エンコード</span>します。FFmpegの強力な「フィルター複合機能（filter_complex）」を使います。</p>
<pre class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size: .875rem; font-family: Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; line-height: 1.25rem;"><code class="shiki nord" style="background-color: #2e3440ff; color: #d8dee9ff;"><span class="line"><span style="color: #88c0d0;">ffmpeg</span><span style="color: #d8dee9ff;"> -i LazinessDoesNotExist.mp3 &lt;/span></span>
<span class="line"><span style="color: #d8dee9ff;">-filter_complex &lt;/span></span>
<span class="line"><span style="color: #a3be8c;">"color=c=black:s=1920x1080:r=30[vbg]; &lt;/span></span>
<span class="line"><span style="color: #a3be8c;">[vbg]subtitles=LazinessDoesNotExist.srt:force_style='Alignment=6,MarginV=50,Fontsize=14'[vtop]; &lt;/span></span>
<span class="line"><span style="color: #a3be8c;">[vtop]subtitles=LazinessDoesNotExist_ja.srt:force_style='Alignment=2,MarginV=50,Fontsize=14'[vout]"</span><span style="color: #d8dee9ff;"> &lt;/span></span>
<span class="line"><span style="color: #d8dee9ff;">-map </span><span style="color: #a3be8c;">"[vout]"</span><span style="color: #d8dee9ff;"> -map 0:a -c:v libx264 -c:a aac -shortest output_small.mp4</span></span></code></pre>
<div class="wp-block-group" style="background-color: #f9f9f9; border-left: 4px solid #333; padding: 15px; margin-bottom: 20px;">
<p style="margin-top: 0; font-weight: bold;"><img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ちょっとマニアックなFFmpegコマンド解説</p>
<ul style="font-size: 0.9em;">
<li><code>color=c=black:s=1920x1080:r=30</code> : 真っ黒の背景画像を、フルHD画質（1920&#215;1080）の30フレームで自動生成します。映像ソースがないため、この黒背景を土台にします。</li>
<li><code>Alignment=6,MarginV=50</code> : 上部中央（Alignment=6）に配置し、画面端からの余白を50に設定します。ここに英語字幕（srt）を焼き付けます。</li>
<li><code>Alignment=2</code> : 下部中央（Alignment=2）に配置します。ここに日本語字幕（ja.srt）を焼き付けます。</li>
<li><code>-shortest</code> : 音声の長さに合わせて動画の生成を終了します（これがないと黒背景が永遠に出力され続けてしまいます）。</li>
</ul>
</div>
<h2 class="wp-block-heading">最終成果物：完成した動画がこちら！</h2>
<p>処理が終わると <code>output_small.mp4</code> という動画ファイルが生成されます。再生してみると……</p>
<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="528" src="https://d1ydh2vme4hpue.cloudfront.net/wp-content/uploads/2026/01/image-199-1024x528.png" alt="上部に英語、下部に日本語字幕が表示された完成動画のスクリーンショット" class="wp-image-494" srcset="https://polepolelife.com/wp-content/uploads/2026/01/image-199-1024x528.png 1024w, https://polepolelife.com/wp-content/uploads/2026/01/image-199-300x155.png 300w, https://polepolelife.com/wp-content/uploads/2026/01/image-199-768x396.png 768w, https://polepolelife.com/wp-content/uploads/2026/01/image-199.png 1252w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">上に英語、下に日本語。完璧に同期しています！</figcaption></figure>
<p><span style="background: linear-gradient(transparent 60%, #ffff66 60%);"><strong>見事に、上部に英語、下部に日本語が配置された2カ国語字幕動画が完成しました！</strong></span></p>
<p>自分の拙い発音の英語でも、Whisperは文脈を補完してかなり正確に文字起こししてくれました。本当は日本語の朗読データでも試してみたかったのですが、私の滑舌が悪いのか、はたまた日本語モデルの精度の問題か、あまり良い結果が得られなかったため今回は割愛します。</p>
<h2 class="wp-block-heading">最後に</h2>
<p>いかがでしたでしょうか。</p>
<p>映像データが全くなくても、<strong>「英語の音声ファイル（MP3）さえあれば、自動で高品位なデュアル字幕動画を生成できる」</strong>というFFmpegとPythonの強みがお分かりいただけたかと思います。</p>
<p>海外のITカンファレンスの音声や、英語学習用のポッドキャストなどを録音しておき、このスクリプトに放り込めば、あっという間に自分だけのオリジナル学習教材ができあがります。一度環境を構築してしまえば、コマンド一発で全自動処理されるので非常に快適です。</p>
<p>本記事が皆様の作業効率化、あるいは英語学習のお役に立てれば幸いです！</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fpolepolelife.com%2Fffmpeg-mp4%2F&amp;linkname=ffmpeg%20%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E8%8B%B1%E8%AA%9EMP3%E3%81%8B%E3%82%89%EF%BC%8B%E8%8B%B1%E6%97%A5%E5%AD%97%E5%B9%95%E3%81%A4%E3%81%8D%E5%8B%95%E7%94%BB%EF%BC%88MP4%EF%BC%89%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fpolepolelife.com%2Fffmpeg-mp4%2F&amp;linkname=ffmpeg%20%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E8%8B%B1%E8%AA%9EMP3%E3%81%8B%E3%82%89%EF%BC%8B%E8%8B%B1%E6%97%A5%E5%AD%97%E5%B9%95%E3%81%A4%E3%81%8D%E5%8B%95%E7%94%BB%EF%BC%88MP4%EF%BC%89%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fpolepolelife.com%2Fffmpeg-mp4%2F&amp;linkname=ffmpeg%20%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E8%8B%B1%E8%AA%9EMP3%E3%81%8B%E3%82%89%EF%BC%8B%E8%8B%B1%E6%97%A5%E5%AD%97%E5%B9%95%E3%81%A4%E3%81%8D%E5%8B%95%E7%94%BB%EF%BC%88MP4%EF%BC%89%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fpolepolelife.com%2Fffmpeg-mp4%2F&#038;title=ffmpeg%20%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E8%8B%B1%E8%AA%9EMP3%E3%81%8B%E3%82%89%EF%BC%8B%E8%8B%B1%E6%97%A5%E5%AD%97%E5%B9%95%E3%81%A4%E3%81%8D%E5%8B%95%E7%94%BB%EF%BC%88MP4%EF%BC%89%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95" data-a2a-url="https://polepolelife.com/ffmpeg-mp4/" data-a2a-title="ffmpeg を利用して英語MP3から＋英日字幕つき動画（MP4）を作る方法"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://polepolelife.com/ffmpeg-mp4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
