1.下载及安装

在ffmpeg官网https://ffmpeg.zeranoe.com/builds/可以下载到需要的版本,然后解压到D盘,添加环境变量(如D:\ffmpeg\bin)



在cmd输入ffmpeg,出现如图现象,即为安装成功

2.使用

#视频处理
def file_name(path_file):
for i in range(len(path_file)):#找到不含地址的文件名
if(path_file[-i-1]=='\\'):
name = path_file[-i:]
break
return name
class video():
def __init__(self):
print('(1)视频合并\n(2)视频剪辑\n(3)视频格式转换\n(4)提取音频')
print('(5)视频拆分成帧图片\n(6)帧图片合成视频')
b = eval(input('请选择:\n'))
if(b==1):
self.video_convert()
elif(b==2):
self.video_clip()
elif(b==3):
self.video_format_conversion()
elif(b==4):
print('请输入视频的存储路径:')
video = input(r'')
cmd = 'ffmpeg -i {} -f mp3 -vn output.mp3'.format(video)
subprocess.call(cmd,shell=True)
print('提取完成!')
elif(b==5):
self.video_frame_photo()
elif(b==6):
self.frame_photo_video()
else:
print('输入有误!')
#视频合并
def video_convert(self):
print('请输入视频个数:')
num = eval(input())
filelist = open('filelist.txt','w')
for i in range(num):
print('请输入视频%d的存储路径:'%(i+1))
a = input(r'')
filelist.write("file '"+ a +"'\n")
filelist.close()
cmd = 'ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4'
subprocess.call(cmd,shell=True)
print('合并完成!')
#视频格式转换
def time(self,file_path):
cap = cv2.VideoCapture(file_path)
# get方法参数按顺序对应下表(从0开始编号)
rate = cap.get(5) # 帧速率
FrameNumber = cap.get(7) # 视频文件的帧数
duration = FrameNumber/rate/60 # 帧速率/视频总帧数 是时间,除以60之后单位是分钟
minutes = int(duration)
seconds = int((duration - minutes) * 60)
return str(minutes) + ':' + str(seconds)
def video_format_conversion(self):
while True:
print('请输入视频路径:')
video = input()
#print('请输入需要转换的视频格式:')
style = 'mp4'#input()
time = self.time(video)
cmd = 'ffmpeg -i {} -ss 00:00:00 -c copy -to {} {}.{}'.format(video,time,file_name(video),style)
subprocess.call(cmd,shell=True)
print('转换完成!')
#视频剪辑
def video_clip(self):
print('请输入视频路径:')
video = input()
print('请输入开始时间:')
start = input()
print('请输入结束时间:')
end = input()
cmd = 'ffmpeg -i {} -ss {} -c copy -to {} output.mp4'.format(video,start,end)
subprocess.call(cmd,shell=True)
print('剪辑完成!')
#视频拆分成帧图片
def video_frame_photo():
print('请输入视频的存放路径:')
videos_path = input(r'') #视频的存放路径
print('请输入帧图片的存放路径:')
frames_save_path = input(r'') #视频切分成帧之后图片的保存路径
print('每几帧中保存1帧?')
time_interval = eval(input()) #每1帧保存一次
vidcap = cv2.VideoCapture(videos_path)
success, image = vidcap.read()
count = 0
while success:
success, image = vidcap.read()
count = count + 1
if count % time_interval == 0:
cv2.imencode('.jpg', image)[1].tofile(frames_save_path + "frame%d.jpg" % count)
print('拆分完成!')
#帧图片合成视频
def frame_photo_video(size):
print('请输入帧图片存放路径:')
path = input(r'')#帧存放路径
print('请输入合成视频的存放路径:')
save_path = input(r'') #合成视频存放的路径
print('请输入帧率:')
fps = eval(input())
filelist = os.listdir(path) # 获取该目录下的所有文件名
size = Image.open(save_path+filelist[0]).size
i = 1
while True:
if os.path.isdir(save_path + 'exp-video{}.mp4'.format(i)) == True:
i = i + 1
else:
break
file_path = save_path + 'exp-video{}.mp4'.format(i)
fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X') # 不同视频编码对应不同视频格式(例:'I','4','2','0' 对应avi格式)
video = cv2.VideoWriter(file_path, fourcc, fps, size)
for item in filelist:
if item.endswith('.jpg') or item.endswith('.png'): # 判断图片后缀是否是.png
item = path + '/' + item
img = cv2.imread(item) # 使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
video.write(img) # 把图片写进视频

此外,还有一些其他功能:

4.其它功能

提取无声视频

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4

合并两个音频

ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 output.mp3

提取字幕:

ffmpeg -i input.mkv -vn -an -codec:s:0 srt subtitle.srt

添加字幕:

ffmpeg -i input.mkv -vf subtitles=subtitle.srt output.mp4

音视频合并:

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4

python用ffmpeg进行视频处理的更多相关文章

  1. 用Python和FFmpeg查找大码率的视频文件

    用Python和FFmpeg查找大码率的视频文件 本文使用Python2.7, 这个工作分两步 遍历目录下的视频文件 用ffprobe获取是视频文件的码率信息 用ffprobe 获取json格式的视频 ...

  2. python+ffmpeg切割视频

    什么是ffmpeg 1.1 简介 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包 ...

  3. python使用zlib库压缩图片,使用ffmpeg压缩视频

    python压缩图片.视频 图片压缩使用zlib库 视频压缩使用工具ffmpeg # ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -p ...

  4. NET 2.0(C#)调用ffmpeg处理视频的方法

    另外:ffmpeg的net封装库 http://www.intuitive.sk/fflib/ NET 2.0 调用FFMPEG,并异步读取输出信息的代码...public void ConvertV ...

  5. 神工鬼斧惟肖惟妙,M1 mac系统深度学习框架Pytorch的二次元动漫动画风格迁移滤镜AnimeGANv2+Ffmpeg(图片+视频)快速实践

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_201 前段时间,业界鼎鼎有名的动漫风格转化滤镜库AnimeGAN发布了最新的v2版本,一时间街谈巷议,风头无两.提起二次元,目前国 ...

  6. ffmpeg为视频添加时间戳 - 手动编译ffmpeg

    FFMPEG给视频加时间戳水印 项目中需要给视频添加时间戳,理所当然最好用的办法是ffmpeg.在找到正确的做法前,还被网上的答案timecode给水了一下(水的不轻,在这里转了2天),大概是这样写的 ...

  7. 利用FFmpeg生成视频缩略图 2.1.6

    利用FFmpeg生成视频缩略图 1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/build ...

  8. C# 利用ffmpeg 对视频转换系类操作 (1) 基本分析

    最近公司做一个项目,开发一个视频站点.项目需求中有很多视频转换的需求,如:格式转换(flv,Mp4),视频水印,视频截图,视频合成,获取视频的基本信息(时间戳,视频大小等).经过网络的收集资料以及自己 ...

  9. 使用ffmpeg 对视频截图,和视频转换格式

    //执行CMD命令方法 public static void CmdProcess(string command)//调用CMD        {            //实例化一个进程类      ...

随机推荐

  1. Linux—权限管理

    Linux 权限管理 1.权限简介 Linux权限是操作系统用来限制对资源访问的机制,权限一般分为读.写.执行.系统中每个文件都拥有特定的权限:属主.属组以及其他人,通过这样的机制来限制哪些用户或用户 ...

  2. postgresql使用group by进行数据去重-2022新项目

    一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...

  3. 【MySQL】从入门到精通8-SQL数据库编程

    上期:[MySQL]从入门到精通7-设计多对多数据库 第零章:Mac用户看这里: mac终端写MySQL和windows基本相同,除了配置环境变量和启动有些许不同以外. 先配置环境变量,在终端输入vi ...

  4. BI如何配置“花生壳”,看这一篇就够了

    花生壳作为一款免费的内网穿透软件,在软件行业备受青睐.在做好产品的同时,如何让客户轻松看到,也是非常有必要的.本篇将带领大家使用"花生壳"软件完成BI数据分析的配置.第一步:下载安 ...

  5. 简单创建一个SpringCloud2021.0.3项目(二)

    目录 1. 项目说明 1. 版本 2. 用到组件 3. 功能 2. 上一篇教程 3. 创建公共模块Common 4. 网关Gateway 1. 创建Security 2. Security登陆配置 3 ...

  6. C++工厂方法模式讲解和代码示例

    在C++中使用模式 使用示例: 工厂方法模式在 C++ 代码中得到了广泛使用. 当你需要在代码中提供高层次的灵活性时, 该模式会非常实用. 识别方法: 工厂方法可通过构建方法来识别, 它会创建具体类的 ...

  7. shell脚本自动化部署Zabbix4.2(修改脚本替换版本)

    #!/bin/bash # 检查操作系统版本,该脚本只能运行在 Centos 7.x 系统上 cat /etc/redhat-release |grep -i centos |grep '7.[[:d ...

  8. 在 Windows 搭建 SVN 服务

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16671311.html 最近公司给配了台新电脑,配置 ...

  9. 利用ldt_struct 与 modify_ldt 系统调用实现任意地址读写

    利用ldt_struct 与 modify_ldt 系统调用实现任意地址读写 ldt_struct与modify_ldt系统调用的介绍 ldt_struct ldt是局部段描述符表,里面存放的是进程的 ...

  10. Gitea 与 Drone 集成实践:完全基于 Docker 搭建的轻量级 CI/CD 系统

    Drone 是一个使用 Go 语言编写的自助式的持续集成平台,和 Gitea 一样可以完全基于容器部署,轻松扩展流水线规模.开发者只需要将持续集成过程通过简单的 YAML 语法写入 Gitea 仓库目 ...