<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>影片處理 on KnightLi的博客</title>
        <link>https://knightli.com/zh-tw/tags/%E5%BD%B1%E7%89%87%E8%99%95%E7%90%86/</link>
        <description>Recent content in 影片處理 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Thu, 02 Apr 2026 23:14:03 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/%E5%BD%B1%E7%89%87%E8%99%95%E7%90%86/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>FFmpeg 的 `-map` 參數詳解：精準選擇影片、音訊與字幕串流</title>
        <link>https://knightli.com/zh-tw/2026/04/02/ffmpeg-map-parameter-guide/</link>
        <pubDate>Thu, 02 Apr 2026 23:14:03 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/04/02/ffmpeg-map-parameter-guide/</guid>
        <description>&lt;p&gt;在多音軌、多字幕的影片處理中，&lt;code&gt;-map&lt;/code&gt; 是 FFmpeg 最關鍵也最容易用錯的參數之一。&lt;/p&gt;
&lt;p&gt;如果你不明確指定 &lt;code&gt;-map&lt;/code&gt;，FFmpeg 會依預設規則自動挑選串流，結果常常不是你要的。像是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;匯出後字幕不見&lt;/li&gt;
&lt;li&gt;選錯音軌語言&lt;/li&gt;
&lt;li&gt;混入不需要的資料串流&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這篇文章用最常見的情境，講清楚 &lt;code&gt;-map&lt;/code&gt; 怎麼用。&lt;/p&gt;
&lt;h2 id=&#34;先理解什麼是串流&#34;&gt;先理解什麼是「串流」
&lt;/h2&gt;&lt;p&gt;一個容器檔（例如 &lt;code&gt;mp4&lt;/code&gt;、&lt;code&gt;mkv&lt;/code&gt;）通常不只一個內容串流（stream），常見包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;影片串流（&lt;code&gt;v&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;音訊串流（&lt;code&gt;a&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;字幕串流（&lt;code&gt;s&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;附件/資料串流（如字型、封面、章節等）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你可以先用 &lt;code&gt;ffprobe&lt;/code&gt; 看清檔案裡有哪些串流：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffprobe -hide_banner input.mkv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;-map-的基本語法&#34;&gt;&lt;code&gt;-map&lt;/code&gt; 的基本語法
&lt;/h2&gt;&lt;p&gt;最常見寫法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-map input_index[:stream_type][:stream_index]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0:v&lt;/code&gt;：第 1 個輸入檔的所有影片串流&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0:a:0&lt;/code&gt;：第 1 個輸入檔的第 1 條音訊串流&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1:s:1&lt;/code&gt;：第 2 個輸入檔的第 2 條字幕串流&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;說明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;input_index&lt;/code&gt; 從 &lt;code&gt;0&lt;/code&gt; 開始，對應 &lt;code&gt;-i&lt;/code&gt; 的順序&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stream_index&lt;/code&gt; 也從 &lt;code&gt;0&lt;/code&gt; 開始&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;實戰範例&#34;&gt;實戰範例
&lt;/h2&gt;&lt;h3 id=&#34;1-影片來自-a音訊來自-b&#34;&gt;1) 影片來自 A，音訊來自 B
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i english.mp4 -i french.mp3 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -map 0:v:0 -map 1:a:0 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -c:v copy -c:a aac &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  french.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;含義：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;取 &lt;code&gt;english.mp4&lt;/code&gt; 的第 1 條影片串流&lt;/li&gt;
&lt;li&gt;取 &lt;code&gt;french.mp3&lt;/code&gt; 的第 1 條音訊串流&lt;/li&gt;
&lt;li&gt;合併輸出成 &lt;code&gt;french.mp4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-保留第一個輸入的全部串流再額外加一條音軌&#34;&gt;2) 保留第一個輸入的全部串流，再額外加一條音軌
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i english.mp4 -i french.mp3 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -map &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -map 1:a:0 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -c copy &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  english-french.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;含義：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-map 0&lt;/code&gt; 先帶上第一個輸入檔的所有串流&lt;/li&gt;
&lt;li&gt;再追加第二個輸入的第 1 條音訊串流&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;兩個很實用的進階技巧&#34;&gt;兩個很實用的進階技巧
&lt;/h2&gt;&lt;h3 id=&#34;1-負映射排除不需要的串流&#34;&gt;1) 負映射：排除不需要的串流
&lt;/h3&gt;&lt;p&gt;例如保留第一個輸入的全部串流，但去掉第 2 條音訊串流：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i input.mkv -map &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -map -0:a:1 -c copy output.mkv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-可選映射串流不存在也不中斷&#34;&gt;2) 可選映射：串流不存在也不中斷
&lt;/h3&gt;&lt;p&gt;有些檔案可能沒有字幕，這時可用 &lt;code&gt;?&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i input.mp4 -map 0:v -map 0:a -map 0:s? -c copy output.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;0:s?&lt;/code&gt; 表示「有字幕就映射，沒有就跳過，不報錯」。&lt;/p&gt;
&lt;h2 id=&#34;常見坑位&#34;&gt;常見坑位
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;一旦使用 &lt;code&gt;-map&lt;/code&gt;，FFmpeg 就不再自動選流，必須把要的串流都寫出來。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c copy&lt;/code&gt; 只是封裝複製，不做轉碼；若目標容器不支援某編碼，仍會失敗。&lt;/li&gt;
&lt;li&gt;多輸入時最容易錯的是輸入序號，序號只看 &lt;code&gt;-i&lt;/code&gt; 的先後順序。&lt;/li&gt;
&lt;li&gt;要做穩定腳本時，先 &lt;code&gt;ffprobe&lt;/code&gt; 再生成 &lt;code&gt;-map&lt;/code&gt;，通常比手寫更穩。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;總結&#34;&gt;總結
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;-map&lt;/code&gt; 的核心就一句話：明確告訴 FFmpeg，「從哪個輸入，拿哪類串流，拿第幾條」。&lt;/p&gt;
&lt;p&gt;掌握之後，你就能穩定處理多音軌、多字幕、跨檔合成等複雜場景，避免「輸出不對卻不知道原因」的情況。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
