当前位置: 首页 > news >正文

Python+ffmpeg实现字幕视频合并

背景

我想给自己的视频添加字幕,但是市面上比较好的软件都不太对我口味,要么贵,要么就是学习版不给力。兜兜转转,我决定用多款开源软件分步实现,当然,也可以去白piao某些软件的字幕功能。

驱动力

ffmpeg -i video.mp4 -vf subtitles=srt_file.srt output.mp4

d6bebf4be0064ef4be71d80607988284.png

成果

于是我写了一个脚本 

import osdef start_question():print('\033[38;2;0;255;0m' + '请确认已下载ffmpeg,并已将其的bin文件夹添加至环境变量' + '\033[0m')print("您可以在此获取 https://www.gyan.dev/ffmpeg/builds/")confirm1 = input("Y/N?[Y]")if confirm1 == "N":input("[回车退出]")return Falseprint('\033[38;2;0;255;0m' + '请确认您已知晓本程序的基本原理:' + '\033[0m')print('\033[38;2;255;0;0m' + 'ffmpeg -i video.mp4 -vf subtitles=srt_file.srt output.mp4' + '\033[0m')confirm2 = input("Y/N?[Y]")if confirm2 == "N":input("[回车退出]")return Falsereturn Truedef out_mp4_file():print("您可以使用相对路径,三条路径均不能包含中文字符!")mp4_file = input('\033[36m' + "请输入mp4文件路径:" + '\033[0m')srt_file = input('\033[36m' + "请输入srt文件路径:" + '\033[0m')out_file = input('\033[36m' + "请输入输出文件路径:" + '\033[0m')if mp4_file and srt_file and out_file:os.system("ffmpeg -i {0} -vf subtitles={1} {2}".format(mp4_file, srt_file, out_file))else:print('\033[38;2;255;0;0m' + "您的输入好像有问题,请检查后再试" + '\033[0m')flag = Falsewhile True:if not flag:flag = start_question()if not flag:breakout_mp4_file()confirm3 = input("[回车继续/q 退出]")if confirm3 == "q":break

值得注意的是,字幕文件要自己写好,要能对应的上视频,至于对应不上的,没有尝试过。

 核心是这个:

os.system("ffmpeg -i {0} -vf subtitles={1} {2}".format(mp4_file, srt_file, out_file))

运行结果

毫无疑问失败了,不过错误也很经典——千万不要在路径中带有中文字符!

输出时会显示视频和字幕详情(命令行)。

当然,这种脚本是不可能为字幕添加特效的,要专门的剪辑软件才行。

 

 

 

http://www.lryc.cn/news/457317.html

相关文章:

  • 垂直分库分表、水平分库分表
  • rocksdb merge的简单记录
  • 安卓开发板_MTK联发科评估套件_安卓开发板Demo板
  • maven指定模块快速打包idea插件Quick Maven Package
  • i春秋云境靶场之CVE-2022-26965
  • 流域生态系统服务评价、水文水生态分析、碳收支、气候变化影响、制图等领域中的应用
  • 超像素提取加svm训练,鼠标点击选择标签(左键为正样本,右键为负样本)
  • Vue 中引入 ECharts 的详细步骤与示例
  • 在 EC2 AWS 中开启防火墙后将自己锁定在 SSH 之外
  • OpenGL 进阶系列02 - OpenGL绘制三角形的必要步骤
  • MySql基础34题写题记录(11-20)
  • 设计模式——单例模式(1)
  • 剧本杀小程序:提升玩家游戏体验,带动经济效益
  • Linux系统通过编辑crontab来设置定时任务---定时关机
  • Mac电脑word文档误删,4个方法快速恢复
  • threejs-基础材质设置
  • 【大模型开发】AI提示词框架:解锁ICIO、CRISPE、BROKE和RASCEF的强大潜力
  • Rust学习如何更有信心?
  • 3个简单易懂的方法,教你马上掌握excel表格数据打印技巧
  • dbt 增量策略模型实战教程
  • 【含文档】基于Springboot+Android的校园论坛系统(含源码+数据库+lw)
  • Go版数据结构 -【8.4 快速排序】
  • 达梦DBLINK访问ORACLE配置方法
  • 基础知识1
  • 网页前端开发之Javascript入门篇(9/9):对象
  • Oracle RAC IPC Send timeout detected问题分析处理
  • QT 实现QMessageBox::about()信息自定义显示
  • (C++进阶)C++20
  • 【常用的安装破解版指令】MAC安装破解版软件显示文件损坏时
  • 【QT Quick】定时器和线程:定时器Timer