最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python結(jié)合FFmpeg實現(xiàn)將MP4視頻與SRT字幕無損合并

 更新時間:2026年01月19日 09:07:47   作者:weixin_46244623  
在日常視頻處理場景中,我們經(jīng)常需要將字幕(SRT)合并到視頻中,本文將介紹如何使用 Python 調(diào)用 FFmpeg將 MP4 視頻與 SRT 字幕無損合并為一個新視頻文件,感興趣的小伙伴可以了解下

在日常視頻處理場景中,我們經(jīng)常需要將字幕(SRT)合并到視頻中,尤其是從 B 站等平臺下載的視頻,字幕通常是單獨的 .srt 文件。

本文將介紹一種穩(wěn)定、可復(fù)用、支持中文編碼的方案:使用 Python 調(diào)用 FFmpeg,將 MP4 視頻與 SRT 字幕無損合并為一個新視頻文件。

一、實現(xiàn)目標

  • 合并 MP4 視頻 + SRT 字幕
  • 不重新編碼視頻 / 音頻(速度快、無損)
  • 正確處理 UTF-8 中文字幕
  • 設(shè)置字幕語言元數(shù)據(jù)(如 chi
  • 封裝為可復(fù)用的 Python 函數(shù)

二、環(huán)境準備

安裝 FFmpeg

Ubuntu / Debian

sudo apt install ffmpeg

macOS(Homebrew)

brew install ffmpeg

Windows

下載解壓后將 ffmpeg.exe 加入系統(tǒng) PATH

驗證是否安裝成功:

ffmpeg -version

Python 環(huán)境

  • Python 3.7+
  • 無需額外第三方庫(只使用標準庫)

三、核心思路說明

我們要做的事情本質(zhì)上就是執(zhí)行下面這條 FFmpeg 命令:

ffmpeg -sub_charenc UTF-8 \
-i input.mp4 \
-i subtitle.srt \
-c:v copy \
-c:a copy \
-c:s mov_text \
-metadata:s:s:0 language=chi \
output.mp4

關(guān)鍵點解釋:

參數(shù)作用
-sub_charenc UTF-8強制字幕編碼為 UTF-8(防止中文亂碼)
-c:v copy視頻流不重新編碼
-c:a copy音頻流不重新編碼
-c:s mov_textMP4 容器支持的字幕編碼
language=chi設(shè)置字幕語言為中文

四、完整 Python 實現(xiàn)代碼

import subprocess
import os
import sys

def validate_file(file_path, file_type="file"):
    """
    校驗文件是否存在
    :param file_path: 文件路徑
    :param file_type: 文件類型描述(用于錯誤提示)
    """
    if not os.path.exists(file_path):
        raise FileNotFoundError(f"{file_type} 不存在: {file_path}")
    print(f"{file_type} 校驗通過: {file_path}")
    return True


def merge_video_with_subtitles(video_path, srt_path, output_path):
    """
    使用 FFmpeg 將 MP4 視頻與 SRT 字幕合并
    不重新編碼視頻和音頻,支持 UTF-8 中文字幕
    """

    # 1. 校驗輸入文件是否存在
    validate_file(video_path, "視頻文件")
    validate_file(srt_path, "字幕文件")

    # 2. 構(gòu)建 FFmpeg 命令
    ffmpeg_cmd = [
        "ffmpeg",

        # 輸入視頻文件
        "-i", video_path,

        # 輸入字幕文件
        "-i", srt_path,

        # 視頻流直接拷貝,不重新編碼
        "-c:v", "copy",

        # 音頻流直接拷貝,不重新編碼
        "-c:a", "copy",

        # 將 SRT 轉(zhuǎn)換為 MP4 支持的 mov_text 字幕格式
        "-c:s", "mov_text",

        # 設(shè)置字幕語言元數(shù)據(jù)為中文
        "-metadata:s:s:0", "language=chi",

        # 輸出文件
        output_path
    ]

    # 3. 強制指定字幕編碼為 UTF-8,防止中文亂碼
    ffmpeg_cmd.insert(3, "-sub_charenc")
    ffmpeg_cmd.insert(4, "UTF-8")

    try:
        # 4. 執(zhí)行 FFmpeg 命令
        result = subprocess.run(
            ffmpeg_cmd,
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True
        )
        print(f"字幕合并成功,輸出文件: {output_path}")

    except subprocess.CalledProcessError as e:
        # FFmpeg 執(zhí)行失敗時輸出錯誤信息
        print("FFmpeg 執(zhí)行失敗:")
        print(e.stderr)
        raise

    except Exception as e:
        # 其他異常
        print(f"執(zhí)行過程中發(fā)生錯誤: {e}")
        raise


def main():
    """
    主函數(shù),定義輸入輸出路徑
    """

    # 視頻文件路徑
    video_path = r"SSYouTube.online_Gesture Drawing Practice _ 20 and 40 sec. poses_1080p.mp4"

    # 字幕文件路徑
    srt_path = r"SSYouTube.online_Gesture Drawing Practice _ 20 and 40 sec. poses_1080p.srt"

    # 輸出視頻路徑
    output_path = "output.mp4"

    # 合并視頻與字幕
    merge_video_with_subtitles(video_path, srt_path, output_path)


if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        print(f"程序異常退出: {e}")
        sys.exit(1)

五、代碼結(jié)構(gòu)解析

文件校驗(防止低級錯誤)

validate_file(video_path, "video")
validate_file(srt_path, "subtitle")
  • 避免 FFmpeg 報錯才發(fā)現(xiàn)文件不存在
  • 提前失敗,錯誤更友好

為什么使用subprocess.run

優(yōu)點:

  • 可控參數(shù)列表(避免 shell 注入)
  • 可捕獲 stdout / stderr
  • 出錯自動拋異常(check=True

為什么選擇mov_text

  • MP4 容器 不支持直接嵌入 SRT
  • mov_text 是 MP4 官方支持的字幕格式
  • 各大播放器(VLC、QuickTime、手機)兼容性好

六、常見問題與解決方案

中文字幕亂碼

一定要加:

-sub_charenc UTF-8

并確保 .srt 本身是 UTF-8 編碼。

想把字幕“燒錄”到畫面中

那就不能用 -c:v copy,需要使用:

-vf subtitles=xxx.srt

這是 硬字幕,不可關(guān)閉,且會重新編碼(速度慢)。

以上就是Python結(jié)合FFmpeg實現(xiàn)將MP4視頻與SRT字幕無損合并的詳細內(nèi)容,更多關(guān)于Python FFmpeg視頻字幕合并的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python爬取小姐姐圖片(beautifulsoup法)

    使用Python爬取小姐姐圖片(beautifulsoup法)

    這篇文章主要介紹了Python爬取小姐姐圖片(beautifulsoup法),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • tensorflow tf.train.batch之數(shù)據(jù)批量讀取方式

    tensorflow tf.train.batch之數(shù)據(jù)批量讀取方式

    今天小編就為大家分享一篇tensorflow tf.train.batch之數(shù)據(jù)批量讀取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python通過字典dict判斷指定鍵值是否存在的方法

    python通過字典dict判斷指定鍵值是否存在的方法

    這篇文章主要介紹了python通過字典dict判斷指定鍵值是否存在的方法,實例分析了Python中使用has_key及in判斷指定鍵值是否存在的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • Python模擬登錄12306的方法

    Python模擬登錄12306的方法

    這篇文章主要介紹了Python模擬登錄12306的方法,是非常實用的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • Python實現(xiàn)帶參數(shù)與不帶參數(shù)的多重繼承示例

    Python實現(xiàn)帶參數(shù)與不帶參數(shù)的多重繼承示例

    這篇文章主要介紹了Python實現(xiàn)帶參數(shù)與不帶參數(shù)的多重繼承,結(jié)合具體實例形式對比分析了Python實現(xiàn)帶參數(shù)與不帶參數(shù)的多重繼承相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 實時獲取Python的print輸出流方法

    實時獲取Python的print輸出流方法

    今天小編就為大家分享一篇實時獲取Python的print輸出流方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python pymodbus模塊的具體使用

    python pymodbus模塊的具體使用

    pymodbus是一個Python實現(xiàn)的Modbus協(xié)議庫,支持TCP和RTU通信模式,支持讀寫線圈、離散輸入、保持寄存器等數(shù)據(jù)類型,具有一定的參考價值,感興趣的可以了解一下
    2025-09-09
  • Python 十大特性

    Python 十大特性

    這篇文章主要給大家分享的是Python十大特性,Python 編程語言是世界上發(fā)展最快的編程語言。這一高級通用編程語言提供了廣泛的實際應(yīng)用,并且是一種非常流行的認證,下面我們就來看看它都有哪些特性吧
    2022-01-01
  • Python繪制折線圖可視化神器pyecharts案例

    Python繪制折線圖可視化神器pyecharts案例

    這篇文章主要介紹了Python繪制折線圖可視化神器pyecharts,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Nginx搭建HTTPS服務(wù)器和強制使用HTTPS訪問的方法

    Nginx搭建HTTPS服務(wù)器和強制使用HTTPS訪問的方法

    這篇文章主要介紹了Nginx搭建HTTPS服務(wù)器和強制使用HTTPS訪問的方法,即從HTTP跳轉(zhuǎn)到HTTPS,需要的朋友可以參考下
    2015-08-08

最新評論

平顶山市| 彭泽县| 府谷县| 油尖旺区| 资溪县| 靖西县| 广西| 奈曼旗| 桦川县| 十堰市| 玉屏| 太谷县| 盐池县| 石狮市| 达尔| 沧源| 阿拉善左旗| 建湖县| 新巴尔虎右旗| 贡嘎县| 镇江市| 麻城市| 鸡西市| 曲松县| 乌拉特中旗| 忻城县| 广宗县| 霍邱县| 沂源县| 旺苍县| 德阳市| 安塞县| 辽源市| 南投县| 邓州市| 兴文县| 阳山县| 陆良县| 邛崃市| 湘潭县| 永济市|