FFMPEG视频切片TS文件添加PNG文件头伪图片上传

在这个图床泛滥的时代,不能白白浪费那么那么那么多免费的图床!总想着做点什么,想来想去,只想把我好多好多无处可放的视频传上去,可是图床它并不能上传视频。
思来想去,图床只能上传图片嘛?为什么它知道我是图片?我想!并不是!看来看去,噢,原来只要把文件头改成图片HEAD头就OK,我说它是图片它就是图片!
图片改头换面伪装大法现在开始~

前期准备

FFmpeg 并配置环境变量(不会的话百度一下 你知道~

FFmpeg 官网下载

来源:默认网盘

python 环境 (自行安装,不会的话,百度一下噢~

Python 官网下载

来源:默认网盘

FFMPEG视频切片TS文件添加PNG文件头伪图片上传

整体步奏

1.  MP4视频文件转换单TS文件

2.  对单TS文件切割成多个TS切片文件并生成M3U8文件

3.  TS文件进行 "偷天换日 改头换面" 伪图片处理

4.  上传任意图床取 "PNG" 文件地址

最后预览视频

国外图床 测试可正常播放
(视频质量过高,且国外CDN,速度加载较慢,国内图床无敌!)

开始 Start

Python 脚本博主已经写好,一键处理,方便至简!!!!

FFMPEG视频切片TS文件添加PNG文件头伪图片上传

代码片段

标准mp4视频转TS文件

# Mp4 文件名字 不需要加 .mp4 后缀

vName = 'SaiBoPengKe'

cmd_str = f'ffmpeg -y -i {vName}.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb {vName}.ts'

subprocess.run(cmd_str, encoding="utf-8", shell=True)

print(f'标准 Mp4 转换到 TS 成功!')

TS单文件切片

filePath = f'./{vName}'

if os.path.exists(filePath) == False:

    os.makedirs(filePath)

cmd_str = f'ffmpeg -i {vName}.ts -c copy -map 0 -f segment -segment_list ./{vName}/index.m3u8 -segment_time 2 ./{vName}/output%03d.ts'

subprocess.run(cmd_str, encoding="utf-8", shell=True)

print(f'TS 切片 成功!')

TS切片文件批量重命名为PNG

file_list = os.listdir(filePath)

for i in file_list:

    if i.endswith(".ts"):

        new_name = i.replace(".ts", ".png")

        os.rename(f'{filePath}/' + i, f'{filePath}/' + new_name)

print("TS重命名为PNG 成功!")

TS切片 偷天换日 改头换面 添加PNG文件头

file_list = os.listdir(filePath)

rewritePath = f'{filePath}Png/'

if os.path.exists(rewritePath) == False:

    os.makedirs(rewritePath)

for i in file_list:

    if i.endswith(".png"):

        copyfile("PNG", f'{rewritePath}/' + i)

    else:

        copyfile(f'{filePath}/' + i, f'{rewritePath}/' + i)

file_list = os.listdir(rewritePath)

for i in file_list:

    if i.endswith(".png"):

        bin_file = open(f'{filePath}/' + i, 'rb'# 打开二进制文件

        # 合并文件

        with open(f'{rewritePath}/' + i, 'ab') as f:

            f.write(bin_file.read())

            bin_file.close()

print("PNG元数据转PNG-TS 成功!")

os.remove(f'{vName}.ts')

shutil.rmtree(filePath)

print("临时文件删除成功")

这里需要一个 PNG 文件头,可自己自定义,上传后伪图片文件可显示
博主提供一个做好的

FFMPEG视频切片TS文件添加PNG文件头伪图片上传

PNG头部HEAD数据16进制

89504E470D0A1A0A0000000D494844520000007C0000007508060000008C118576000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000011049444154785EEDD10101000008C320FB97BE411815B8855238A6704CE198C23185630AC7148E29

PNG头文件下载

来源:蓝奏云网盘

代码整合脚本

# utf-8

import subprocess

import os

import shutil

from shutil import copyfile

 

# Mp4 文件名字

vName = 'sbpk'

# 标准mp4TS格式------------------------------------------------------------------------------

cmd_str = f'ffmpeg -y -i {vName}.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb {vName}.ts'

subprocess.run(cmd_str, encoding="utf-8", shell=True)

print(f'标准 Mp4 转换到 TS 成功!')

 

 

# TS切片------------------------------------------------------------------------------

filePath = f'./{vName}'

if os.path.exists(filePath) == False:

    os.makedirs(filePath)

cmd_str = f'ffmpeg -i {vName}.ts -c copy -map 0 -f segment -segment_list ./{vName}/index.m3u8 -segment_time 2 ./{vName}/output%03d.ts'

subprocess.run(cmd_str, encoding="utf-8", shell=True)

print(f'TS 切片 成功!')

 

 

# TS重命名为PNG------------------------------------------------------------------------------

file_list = os.listdir(filePath)

for i in file_list:

    if i.endswith(".ts"):

        new_name = i.replace(".ts", ".png")

        os.rename(f'{filePath}/' + i, f'{filePath}/' + new_name)

print("TS重命名为PNG 成功!")

 

 

# PNG文件添加PNG文件头------------------------------------------------------------------------------

file_list = os.listdir(filePath)

rewritePath = f'{filePath}Png/'

if os.path.exists(rewritePath) == False:

    os.makedirs(rewritePath)

for i in file_list:

    if i.endswith(".png"):

        copyfile("PNG", f'{rewritePath}/' + i)

    else:

        copyfile(f'{filePath}/' + i, f'{rewritePath}/' + i)

file_list = os.listdir(rewritePath)

for i in file_list:

    if i.endswith(".png"):

        bin_file = open(f'{filePath}/' + i, 'rb'# 打开二进制文件

        # 合并文件

        with open(f'{rewritePath}/' + i, 'ab') as f:

            f.write(bin_file.read())

            bin_file.close()

print("PNG元数据转PNG-TS 成功!")

os.remove(f'{vName}.ts')

shutil.rmtree(filePath)

print("临时文件删除成功")

我刚测试成功,立马发文,快去试试吧~