本文主要介绍如何使用python的第三方库moviepy进行简单的视频编辑操作,比如: 拼接,裁剪,多轨合并。

文章目录

  • 场景描述
  • 准备工作
  • 解决方案
  • 重点参数说明
  • 源代码

场景描述

我们可以日常可以会有一些剪辑视频的需求,最常见的就是在上传视频平台前的视频剪辑。常见的剪辑需求会有:

  • 截取/裁剪:截取视频的某一个部分作为输出视频。
  • 拼接:将两个或多个视频首尾拼接,得到一个时间更长的视频。
  • 合并音轨:将一个或多个视频的声音合并到某个视频中,或者是在某个视频的某个时间节点插入其他视频的声音/音轨,比如乐器合奏视频。

准备工作

python中有强大的音视频编辑库ffmpeg,但是使用起来会比较复杂。如果我们需求比较简单(比如上面说的截取、拼接和音轨合并),我们可以使用封装了ffmpeg的另一个第三方库moviepy

所以,我们需要安装ffmpeg(moviepy需要使用),moviepy两个库,

  • ffmpeg可以在官网安装,并且将安装磁盘:\安装目录\ffmpeg\bin放到系统环境变量中(Win键+S然后搜索"编辑系统环境变量")
  • moviepy可以通过pip命令安装:pip install moviepy

解决方案

我们需要的操作在moviepy中都已经有对应的API,直接查看moviepy官方文档,然后调用对应的API即可,如下:

  • 导入视频:clip = VideoFileClip("D:/文件路径.mp4")
  • 导入音频(音频文件或视频文件的音轨):
    • audio_1 = AudioFileClip("D:/文件路径.mp4")
    • audio_2 = AudioFileClip("D:/文件路径.mp3")
  • 截取:video_clip_1 = clip.subclip(要截取的起始时间, 要截取的结束时间)
  • 合并:concated_video = concatenate_videoclips([video_clip_1, video_clip_2])
  • 直接合并两个视频的音轨:mixed_audio = CompositeAudioClip([video_clip_1.audio, audio_1, audio_2])
  • 在音轨的第n秒插入某个音频/音轨:mixed_audio = CompositeAudioClip([audio_1, audio_2.set_start(n)])
  • 将合并的音轨作为视频的音轨:concated_video = concated_video.set_audio(mixed_audio)
  • 导出视频:concated_video.write_videofile(output_filepath)

重点参数说明

导出视频文件的.write_videofile方法的具体参数如下:

write_videofile(self,filename,fps=None,codec=None,bitrate=None,audio=True,audio_fps=44100,preset='medium',audio_nbytes=4,audio_codec=None,audio_bitrate=None,audio_bufsize=2000,temp_audiofile=None,rewrite_audio=True,remove_temp=True,write_logfile=False,verbose=True,threads=None,ffmpeg_params=None,logger='bar',
)

以下是对部分常用参数的说明:

参数名称 参数作用
filename 导出的视频文件路径
fps 导出视频的帧率(每秒多少帧),默认值是None,会使用原视频的帧率
codec 视频的编码方式,会影响到画质,对于mp4,默认使用libx264,如果要提升mp4的画质可以传入mpeg4.avi要提高画质可以传入png
audio 输出的视频是否要有音频,False为不需要,True会输出我们插入视频中的音轨(如果我们没有处理会使用视频原有的音轨);如果是一个代表音频文件路径的字符串,则会将该音频文件作为输出视频的音频
audio_codec 音频编码方式,如果是导出的音频没有声音,比如windows上没有声音或者是windows上有声音但是Mac或者ios上没有声音,则可以考虑指定该参数为aac
audiofps 音频的码率,更多的码率可以得到更高音质的输出视频,但是视频的大小会更大,导出速度自然也会更慢

源代码

from moviepy.editor import *"""导入我们未处理的原始视频"""
raw_video_1 = VideoFileClip("D:/Downloads/video_1.mp4")
raw_video_2 = VideoFileClip("D:/Downloads/video_2.mp4")"""
裁剪视频
第一个视频截取从第7秒到70秒
第二个视频截取从第10秒到30秒
"""
cutted_video_1 = raw_video_1.subclip(7, 70)
cutted_video_2 = raw_video_2.subclip(10, 30)"""将第二个视频接在第一个视频后面, 生成最终的视频"""
concated_video = concatenate_videoclips([cutted_video_1, cutted_video_2])"""在合成视频原有的音频上, 在视频的第2秒的时候加上一段音频/背景音乐"""
audio_to_add = AudioFileClip("D:/Downloads/audio_to_add.mp4")
mix_audio = CompositeAudioClip([concated_video.audio, audio_to_add.set_start(2)])
concated_video.set_audio(mix_audio)"""导出视频"""
concated_video.write_videofile("D:/output/final_video.mp4")

快去试试吧,有任何问题可以在评论区留言~

好书推荐:

  • 流畅的python
  • Python编程 从入门到实践 第2版
  • Python数据结构与算法分析 第2版

好课推荐:

  • 零基础学python
  • python核心技术与实战
  • python自动化办公实战

写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~

「Python|场景案例」如何拼接、裁剪、多轨合并两个或多个视频相关推荐

  1. python断点调试_「Python调试器」,快速定位各种疑难杂症!!!

    在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲 ...

  2. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

  3. 「创新场景50」年度最佳场景实践榜单重磅发布

    ▎我们认为当前数字化转型的最佳颗粒度是"场景". 数字化是什么?怎样开始?怎样做好? 一千个观众眼中有一千个哈姆雷特,看似很简单的问题却找不到标准答案. 在经济粗放发展阶段,市场红 ...

  4. 「Python 网络自动化」目录汇总

    目录 Netmiko NETCONF Nornir Paramiko Napalm NetBox TextFSM 其他 关于文章 关于我 Netmiko 「Python 网络自动化」Netmiko - ...

  5. 「Python|场景案例」如何获取音视频中声音片段的起止时间?

    本文主要介绍如何使用python的第三方库moviepy找出音视频中声音开始出现的位置以及声音结束的位置. 文章目录 场景描述 准备工作 解决方案 源代码 场景描述 假设我们有一段音频,音频开始有一段 ...

  6. 「Python|音视频处理|场景案例」如何使用ffmpeg下载m3u8视频到本地并保存成mp4

    本文主要介绍如何使用ffmpeg批量下载视频到本地并保存成指定格式. 文章目录 场景说明 解决方案 源代码 场景说明 当我们希望将网页上的视频下载到本地的时候,我们可能获取到的视频地址是指向.m3u8 ...

  7. 「Python|图像处理|场景案例」如何将彩色图片转成黑白的灰度图片?

    本文主要介绍如何使用python将彩色图片转换成黑白的灰度图片. 文章目录 场景描述 解决方案 具体代码 场景描述 假设我们现在有如下一张彩色图片: 我们希望将它转换成黑白图片,如下: 解决方案 将彩 ...

  8. 「Python|图像处理|场景案例」如何给图片添加水印

    本文主要介绍如何使用python的PIL库给图片增加水印 文章目录 背景说明 工具准备 处理步骤 源代码 处理效果展示 背景说明 当我们想给一些图片添加水印的时候,尤其是图片数量较多的时候,就可以使用 ...

  9. 「老域名案例」老域名做网站快速上排名及老域名选择方法

    「台州浸渗」cnzjsn.com老域名案例快速上排名 「台州浸渗」网站是小编最近一段时间才开始使用老域名来搭建网站,去做关键词排名,以前没有过多去关注老域名的价值.作为一个SEOer平时经常会逛一些论 ...

最新文章

  1. 导师对帮助研究生顺利完成学业提出了20条劝告:第一,不要有度假休息的打算.....
  2. Android——怎么引入okhttp3
  3. 详细介绍React模态框组件react-modal
  4. 删除word中所有的表格_如何在Word中删除表格
  5. 如何用Java创建不可变的Map
  6. datetime报错 sql脚本_SQLSERVER 中datetime 和 smalldatetime类型分析说明
  7. JavaGUI版本销售管理系统
  8. oracle 控制文件在哪里设置_oracle的controlfile控制文件
  9. 成功的捷径,学会这一点,赚钱很容易
  10. 20200727:力扣第31周双周赛题解
  11. 如何获得getElementById的length这个数值?
  12. autojs控制台美化
  13. 希捷服务器硬盘有什么用,NAS储存有什么用?配置什么硬盘?
  14. 【论文阅读】中医类药性分析:使用机器学习方法预测类药性
  15. arcgis实现cad图斑批量导入后,图斑颜色设置cad图层颜色保持一致
  16. pypy+uwsgi+dango+nginx 简单部署
  17. GPIO实现I2C从机的设计[1]
  18. word文档怎么把波浪线去掉_Word实战技巧:干掉波浪线,Word中红色波浪线如何去掉?...
  19. c语言signal函数详细说明
  20. Markdown的使用之一:表格和公式

热门文章

  1. 车道线检测相关算法介绍
  2. 【News】Scientists use AI to eavesdrop on dolphins
  3. 【有奖互动】3D内容平台开版啦,参与互动话题赢超值京东卡!
  4. FMX Windows下无边框窗口处理
  5. 和方舟rust一样的手游_《旷野之息》与《方舟》的结合体:《Towers》究竟是一款怎样的游戏?...
  6. PPTV逆袭问鼎视频业王座 体育韩剧综艺自制剧
  7. 【《中国工业经济》论文复刻】“一带一路”倡议与中国企业升级
  8. linux vim复制当前行,Vim 行选择复制和移动
  9. 《惢客创业日记》2019.04.20(周六)对于慈善原罪的思考
  10. Thinkpad 进水 键盘失灵