代码示例:

import struct
import os
from loguru import logger# 支持文件类型
# 用16进制字符串的目的是可以知道文件头是多少字节
# 各种文件头的长度不一样,少半2字符,长则8字符
def typeList():"""获取文件格式十六进制码表"""return {"68746D6C3E": 'html',# "d0cf11e0a1b11ae10000":'xls',"44656C69766572792D64": 'eml','ffd8ffe000104a464946': 'jpg','89504e470d0a1a0a0000': 'png','47494638396126026f01': 'gif','49492a00227105008037': 'tif','424d228c010000000000': 'bmp','424d8240090000000000': 'bmp','424d8e1b030000000000': 'bmp','41433130313500000000': 'dwg','3c21444f435459504520': 'html','3c21646f637479706520': 'htm','48544d4c207b0d0a0942': 'css','696b2e71623d696b2e71': 'js','7b5c727466315c616e73': 'rtf','38425053000100000000': 'psd','46726f6d3a203d3f6762': 'eml',# 'd0cf11e0a1b11ae10000':'doc',# 'd0cf11e0a1b11ae10000':'vsd','5374616E64617264204A': 'mdb','252150532D41646F6265': 'ps','255044462d312e350d0a': 'pdf','2e524d46000000120001': 'rmvb','464c5601050000000900': 'flv','00000020667479706d70': 'mp4','49443303000000002176': 'mp3','000001ba210001000180': 'mpg','3026b2758e66cf11a6d9': 'wmv','52494646e27807005741': 'wav','52494646d07d60074156': 'avi','4d546864000000060001': 'mid','504b0304140000080044': 'zip','504b03040a0000080000': 'zip',# '504b03040a0000000000':'zip','526172211a0700cf9073': 'rar','235468697320636f6e66': 'ini','504b03040a0000000000': 'jar','4d5a9000030000000400': 'exe','3c25402070616765206c': 'jsp','4d616e69666573742d56': 'mf','3c3f786d6c2076657273': 'xml','494e5345525420494e54': 'sql','7061636b616765207765': 'java','406563686f206f66660d': 'bat','1f8b0800000000000000': 'gz','6c6f67346a2e726f6f74': 'properties','cafebabe0000002e0041': 'class','49545346030000006000': 'chm','04000000010000001300': 'mxp','504b0304140006000800': 'docx','d0cf11e0a1b11ae10000': 'wps','6431303a637265617465': 'torrent',}# 字节码转16进制字符串
def bytes2hex(bytes):logger.info('字节码转16进制字符串-关键码转码……')num = len(bytes)hexstr = u""for i in range(num):t = u"%x" % bytes[i]if len(t) % 2:hexstr += u"0"hexstr += treturn hexstr.upper()# 获取文件类型
def filetype(filename):logger.info('读文件二进制码……')# 二进制读取,提取关键码with open(filename, 'rb') as f:bins = f.read(20)  # 提取20个字符bins = bytes2hex(bins)  # 转码bins = bins.lower()  # 小写logger.info(f"bins = {bins}")logger.info('获取文件格式十六进制码表……')tl = typeList()  # 文件类型ftype = 'unknown'logger.info('关键码比对中……')for hcode in tl.keys():lens = len(hcode)  # 需要的长度if bins[0:lens] == hcode:ftype = tl[hcode]breakif ftype == 'unknown':  # 全码未找到,优化处理,码表取5位验证bins = bins[0:5]for hcode in tl.keys():if len(hcode) > 5 and bins == hcode[0:5]:ftype = tl[hcode]breakreturn ftypedef test_ffprobe(origin_full_save_path):# testoutput = os.popen(f'ffprobe -print_format json  -show_streams {origin_full_save_path}')output_str = output.read()logger.info(f"res = {type(output_str)} | {output_str}")output_dic = eval(output_str)logger.info(f"res = {type(output_dic)} | {output_dic}")for key, val in output_dic.items():for streams_dic in val:codec_type = streams_dic.get('codec_type')codec_name = streams_dic.get('codec_name')logger.info(f"codec_name = {codec_name} | codec_type = {codec_type}")# testif __name__ == '__main__':# ftype = filetype('./cat.gif')# ftype = filetype('./1format.zip')# ftype = filetype('./30-zhen.mp3')# ftype = filetype('./test_file/aac_2_wav_audio_2EcdAD0379C1.wav')# ftype = filetype('./test_file/秦PLUS DM-i配音.mp3')# ftype = filetype('./test_file/mp4-2-mp3-wav-audio_1da96F2273c4.wav')# ftype = filetype('./test_file/苏州街11分钟.m4a')# logger.info(f"ftype = {ftype}")#test_ffprobe('./test_file/30-zhen.mp3')

需要使用ffprobe,需要安装ffmpeg配合使用

在 Mac OSX 上使用 Homebrew 安装 ffmpeg:

brew install ffmpegbrew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libass --with-libquvi --with-libvorbis --with-libvpx --with-opus --with-x265brew update && brew upgrade ffmpeg

将视频 MP4 转化为 GIF

ffmpeg -i small.mp4 small.gif

转化视频中的一部分为 GIF

ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif

从视频中第二秒开始,截取时长为3秒的片段转化为 gif

转化高质量 GIF

默认转化是中等质量模式,若要转化出高质量的 gif,可以修改比特率

ffmpeg -i small.mp4 -b 2048k small.gif

视频属性调整

缩放视频尺寸

ffmpeg -i big.mov -vf scale=360:-1  small.mov

注意 sacle 值必须是偶数,这里的 -1 表示保持长宽比,根据宽度值自适应高度。

如果要求压缩出来的视频尺寸长宽都保持为偶数,可以使用 -2

加倍速播放视频

ffmpeg -i input.mov -filter:v "setpts=0.5*PTS" output.mov

定义帧率 16fps:

ffmpeg -i input.mov -r 16 -filter:v "setpts=0.125*PTS" -an output.mov

慢倍速播放视频

ffmpeg -i input.mov -filter:v "setpts=2.0*PTS" output.mov

静音视频(移除视频中的音频)

ffmpeg -i input.mov -an mute-output.mov

-an 就是禁止音频输出

将 GIF 转化为 MP4

ffmpeg -f gif -i animation.gif animation.mp4

也可以将 gif 转为其他视频格式

ffmpeg -f gif -i animation.gif animation.mpegffmpeg -f gif -i animation.gif animation.webm

获取 GIF 的第一帧图片

使用 ImageMagick 可以方便第提取 gif 图片的第 N 帧图像。

安装 ImageMagick

brew install imagemagick

提取第一帧

convert 'animation.gif[0]' animation-first-frame.gif

通过 [0] 就可以提取出 gif 的第一帧图像。

GIF 转出来的 MP4 播放不了?

有些 GIF 转化出来的 MP4 不能被 Mac QuickTime Player.app 播放,需要添加 pixel formal 参数

ffmpeg -i input.gif -vf scale=420:-2,format=yuv420p out.mp4

使用 yunv420p 需要保证长宽为偶数,这里同时使用了 scale=420:-2

python ,ffprobe获取音频文件头信息,文件格式等相关推荐

  1. ffprobe查看媒体文件头信息工具

    一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...

  2. sublime 设置新建文件自动添加author(作者)等文件头信息

    很多时候, sublime 自带自动添加文件头信息, 但是并不是我们想要比如下面这样的: 新建一个python文件 自动添加的author 信息 == 上面并不是我想要的, 我想要下面这样的效果: = ...

  3. java音频解析_wav音频文件头动态解析--java语言

    之前有处理过一些相对较为不常见的音频格式,也睬过很多坑,这里做一下简单记录.后面可能随着接触音频类型的增多做进一步更新,像之前有记录过包含LIST数据块的wav格式录音就是调试过程中发现遗漏点. 在此 ...

  4. 根据文件头信息来判断文件类型

    常用的判断文件类型的方法 有 根据文件类型,文件后缀,这里有一种方法,根据文件头信息来判断文件类型. 我把多余的getAllFileType()  给注释掉了,可以根据使用来选择. 这个参考了,忘了地 ...

  5. 用ffmpeg修改MP4文件头信息,使其支持流式加载及播放

    经常有用户反映,有些网页中加载的mp4文件,有的可以加载一点就开始播放,有的就必须全部加载完才能播. 经核实,主要是头信息的数据顺序有关,用工具:mp4info.exe可以查看mp4文件的结构信息: ...

  6. python爬虫获取肯德基门店信息

    python爬虫获取肯德基门店信息 1.在谷歌浏览器中打开肯德基官网,进入餐厅查询页面 2.在搜索框中输入地区并按f12打开开发者工具 发现已经抓取到了一条Ajax请求,可以从中获取请求的url,以及 ...

  7. Python matplotlib获取openweather API天气信息,制作可视化图表和天气仪表盘

    使用Python matplotlib获取openweather API天气信息,制作可视化图表和天气仪表盘. Openweather网站:Сurrent weather and forecast - ...

  8. 用Python来获取DICOM数据TAG信息

    用Python来获取DICOM数据TAG信息 单刀直入 1 数据读进来 2 调函数 3 调万能函数 其他 by 今天不飞了 单刀直入 今天我也来个言简意赅,上代码 1 数据读进来 # import一波 ...

  9. Python下获取视频的旋转角度信息

    1. 描述 使用手机等电子产品录制的视频在电脑上播放的时候是正的,但是使用OpenCV库进行读取的时候却是另外的角度,这是因为OpenCV在读取视频数据的时候没有去考虑视频内部保存的TAG信息(其中包 ...

最新文章

  1. 自定义的无数据提示界面
  2. c语言判断一个月有多少天程序,【0320】C语言编写的小程序,算算自己已经活了多少天...
  3. tableau可视化数据分析60讲(十九)-tableau仪表板布局
  4. 报错 插入更新_自增主键,三类插入测验答案,在这里。
  5. 对话实录|华为云.通信云激活无限商业潜力
  6. c++ 编写函数返回两个值最小值_结合实例来分析SQL的窗口函数
  7. SQL Server 2012新增的内置函数尝试
  8. 局域网计算机不能共享常见问题
  9. (转) 数字加密货币全球资源汇总
  10. wxparse的使用php返回数组输出,小程序应用实践:wxParse多数据循环使用方法
  11. 遗传+粒子群 求解多配送中心车辆调度问题(python)
  12. EXCEL滚动条控件制作动态图表
  13. 如何保证缓存一致性?
  14. 同步线程和异步线程的区别
  15. 实现C#和Python高效率混合编程
  16. DHCP 实现动态 IP 上网简析
  17. windows10防火墙设置
  18. 人性化老人手机设计(二)
  19. 开始菜单下运行框命令大全
  20. jquery控制页面只刷新一次

热门文章

  1. 莆田系医生:达不到创收任务被炒
  2. DRF 序列化器的使用
  3. java简单实现银行业务
  4. 解决IMX6从 uboot调试usb start 命令无法识别U盘的问题
  5. 移动端网页返回主页功能php,移动端点击返回键,页面不刷新解决方案
  6. 我的世界java18w50a_我的世界Java版18w21a正式发布 海豚将不能穿上盔甲
  7. Vue中import与@import的区别及使用场景
  8. 为什么有些 985 的本科学生即使在大学里混得很水,在找工作时学历却那么管用?...
  9. pyhton学习实例demo
  10. 通过爬取微博评论,发现好看的小姐姐...