Python提取隱藏在圖片的TS檔案

前言

盜版影視網站m3u8串流影片常伴隨將ts片段偽裝 bmp 、png或 jpg 等圖片類型,上傳到免費圖床,達到白嫖圖床目的,但這也導致ts無法使用ffmpeg進行合併成.mp4檔案,因此,我們需要一種方法來移除圖片數據,保留影片部分。

思路

通過觀察正常 TS 檔案與偽裝為圖片的 TS 檔案的二進制數據,可以發現 TS 影片片段的二進制數據在開始不久後通常包含關鍵字 “FFmpeg Service01w”。這一特性主要來自於大多數影片切割操作使用 FFmpeg 工具的結果。

一個標準的 TS 檔案通常以 0x47 作為開頭,每個封包大小為 188 字節,因此每隔 188 字節就會出現一次 0x47。文章只說比較簡單,基於FFmpeg處理後TS檔案,我們可以從找到 “FFmpeg Service01w” 關鍵字的位置出發,向前回溯 25 個字節,即可準確定位到 TS 檔案的起始位置。當然,你也可以選擇其他方法,例如檢測 0x47每個封包大小為188字節,會再出現0x47的規律性,來切出完整TS檔案。

ts偽裝png二進制檔案
正常ts二進制檔案

實作

這邊使用python實作,其他程式語言也可以用同樣原理處理,原理就如思路所寫進行處理就可以。

import os

ts_file_path = 'music_18a544d252da4fb497e43e04f3c3cce10.jpeg' # 偽裝圖片ts檔案
replace_data = None
with open(ts_file_path,"rb") as f:
    data = f.read()
    # 判斷是否有PNG包頭
    if data.startswith(b'\211PNG\r\n\032\n'):
        # 尋找FFmpeg Service01w位置,並且向前取得檔案開頭
        index = data.find(b'FFmpeg\tService01w')
        if index>=25:
            replace_data = data[index-25:]
# 如果是有偽裝ts進行保存
if replace_data is not None:
    with open("{}.ts".format("/".join(os.path.splitext(ts_file_path)[:-1])), "wb") as f:
        f.write(replace_data)
    print("ts偽裝移除完成")
else:
    print("ts檔案沒有偽裝")

評論

  1. 有緣人
    9 個月前
    2024-5-14 1:40:19

    太神啦 感謝你 最近剛遇到這個問題

    • 博主
      有緣人
      9 個月前
      2024-5-14 7:59:18

      很高興可以幫助到您,後續有任何問題都可以提問喔

  2. 网友
    2 週前
    2025-1-25 5:15:35

    博主第二张图片不能正常显示了。

    • 博主
      网友
      2 週前
      2025-1-26 8:52:17

      感謝提醒 剛已經重新上傳

發怖評論 編輯評論


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇