
一、背景介绍
大家好,我是王哪跑,现在很多做小学初中高中学习资料相关的教师或出售虚拟资料的网赚达人,都会将PDF电子档转换为视频,并发布到对应的短视频平台进行引流变现,但是使用传统的视频剪辑软件,花费的时间可能会比较长。
基于此,我用python开发了这个一键将PDF转视频的软件,只需30秒完成PDF到视频的一键转换。
(悄悄地说个秘密:更多实用工具也在同步开发中,关注我不迷路!)

二、软件使用
一句话介绍:软件可一键将PDF文档添加背景音乐、转成视频、添加转场、添加装饰图片(增强原创度),可在视频末尾附带引流文字。
适用人群:做学科资料、教师资料、使用电子版文档完成引流转化的人群。
软件功能如下:
1)支持指定PDF页面范围、每个PDF页面在视频中的持续时间
2)视频设置:支持自定义视频宽度、高度、帧率
3)音频设置:支持添加背景音乐
4)转场设置:支持多种转场效果,并可自定义转场时间
5)装饰图库设置:通过添加背景装饰图,可增强视频的原创度,提高视频的流量
6)文字设置:可在视频结尾处定义引流文字,高效完成用户转化。
1、文件选择

PDF文件:选择你需要转换的PDF文件
视频输出目录:PDF转成的视频最终文件放到哪个位置
2、视频及音频设置

平台选择:可选竖屏、横屏,选择后会自动填入宽度和高度
宽度、高度:可根据PDF页面的宽高比例自由设置
帧率:可选30、60,帧率越搞视频越流畅,一般推荐30就够用了
指定PDF页面:你想将PDF哪些页面转换成视频
PDF页面持续时间:每个页面在视频中持续的时间是多少
音频文件:添加视频的背景音乐,如背景音乐的时间比生成的视频时长短,会自动循环
3、转场设置

启用转场:可选择是否启用转场效果,勾选后则启用
转场效果:目前支持淡入淡出、向左滑动、向右滑动(更多效果正在陆续增加中…)
转场时长:转场的过渡时间,推荐0.5-1秒左右
4、装饰图片设置

装饰图片库会随软件一起赠送,可以增加视频的原创度,让视频获得更多的流量扶持。
装饰图片目录:选择我给的图片库路径,也可以自己扩充自己的图库
图片数量:从装饰图片库里选择多少张添加到PDF页面的背景中
缩放比例:推荐0.2-0.3
透明度:装饰图片的透明度,推荐50左右会呈现出一个半透明的效果
5、文字设置

如上图所示:设置好的文字内容(有电子版,可打印),会出现在视频最后的3秒时间,可自定义文字大小、文字颜色、文字描边颜色。
四、技术说明
软件全部采用python语言开发,主要分工如下:
PySide6:GUI软件界面
requests:接口请求
json:解析响应数据
PIL:图片处理
packaging:版本管理
logging:日志记录
五、核心代码
1 class PDF2VideoThread(QThread): 2 success_signal = Signal(str) 3 log_signal = Signal(str) 4 progress_signal = Signal(int) 5 6 def __init__(self, pdf_path, video_output_path, start_page, end_page, 7 video_width, video_height, video_fps, image_duration, 8 enable_audio, audio_is_loop, audio_path, 9 enable_decor, decor_path, decor_num, decor_rate, decor_transparency, 10 enable_transition, image_transition_time, image_transition_name, 11 enable_word, word_size, word_duration, word_color, word_side_color, word_content, 12 *args, **kwargs): 13 super().__init__(*args, **kwargs) 14 self.pdf_path = pdf_path 15 self.video_output_path = video_output_path 16 self.start_page = int(start_page) 17 self.end_page = int(end_page) 18 self.video_width = int(video_width) 19 self.video_height = int(video_height) 20 self.image_duration = float(image_duration) 21 self.video_fps = int(video_fps) 22 self.enable_audio = enable_audio 23 self.audio_is_loop = audio_is_loop 24 self.audio_path = audio_path 25 self.enable_decor = enable_decor 26 self.decor_path = decor_path 27 self.decor_num = int(decor_num) 28 self.decor_rate = float(decor_rate) 29 self.decor_transparency = int(decor_transparency) 30 self.enable_transition = enable_transition 31 self.image_transition_time = float(image_transition_time) 32 self.image_transition_name = image_transition_name 33 self.enable_word = enable_word 34 self.word_size = word_size 35 self.word_duration = word_duration 36 self.word_color = word_color 37 self.word_side_color = word_side_color 38 self.word_content = word_content 39 40 def run(self): 41 """ 42 各步骤占比权重 43 pdf转图片:15 44 图片加装饰:15 45 图片转视频:50 46 视频加文字:20 47 @return: 48 """ 49 # 获得pdf文件名 50 pdf_name = os.path.splitext(os.path.basename(self.pdf_path))[0] 51 52 pdf_to_images(self.log_signal, self.pdf_path, temp_image_path, 53 first_page=self.start_page, last_page=self.end_page, dpi=200) 54 self.progress_signal.emit(15) 55 56 if self.enable_decor: 57 image_paths = get_image_files(temp_image_path) 58 for image_path in image_paths: 59 self.log_signal.emit(f"装饰: {image_path}") 60 add_decor_from_library(image_path=image_path, 61 decor_folder=self.decor_path, 62 num_decor=self.decor_num, 63 decor_rate=self.decor_rate, 64 decor_transparency=self.decor_transparency, 65 output_path=image_path) 66 self.progress_signal.emit(15 + 15) 67 68 # --------- 图片加音频、转视频 --------- 69 self.log_signal.emit(f"---------开始图片转视频---------") 70 self.log_signal.emit(f"正在进行图片转视频(用时较长 10-40秒左右),请稍后...") 71 output_path = os.path.join(self.video_output_path, f"{pdf_name}.mp4") 72 video_duration = images_to_video( 73 self.log_signal, 74 image_folder=temp_image_path, # 图片目录 75 output_path=output_path, # 输出视频路径 76 width=self.video_width, # 宽 77 height=self.video_height, # 高 78 fps=self.video_fps, # 帧率 79 image_duration=self.image_duration, # 每张图片持续时间 80 transition_duration=self.image_transition_time, # 转场1秒 81 transition_type=self.image_transition_name, # 淡入淡出效果 fade、wipeleft、slideleft 82 audio_path=self.audio_path # 可选背景音乐 83 ) 84 self.progress_signal.emit(15 + 15 + 50) 85 86 if self.enable_word: 87 self.log_signal.emit(f" 视频已生成:{output_path}") 88 # --------- 视频加文字 --------- 89 self.log_signal.emit(f"---------开始视频加文字---------") 90 self.log_signal.emit(f"正在进行视频加文字,请稍后...") 91 output_path2 = os.path.join(self.video_output_path, f"{pdf_name}_加文字.mp4") 92 add_text( 93 input_video=output_path, 94 output_video=output_path2, 95 video_duration=video_duration, # 已知视频总时长 96 text=self.word_content, 97 duration=float(self.word_duration), 98 fontsize=int(self.word_size), 99 fontcolor=self.word_color, 100 bordercolor=self.word_side_color, 101 borderw=5, 102 fontfile=rf"simhei.ttf", # 微软雅黑字体 103 y="h-300" 104 ) 105 self.success_signal.emit(f" 带文字的视频已生成:{output_path2}") 106 else: 107 self.success_signal.emit(f" 视频已生成:{output_path}") 108 109 self.progress_signal.emit(15 + 15 + 50 + 20)
六、软件获取
我是@王哪跑,持续分享python干货,各类副业技巧及软件!
附PDF转视频软件下载:(完整版软件下载)
文章摘自:https://www.cnblogs.com/wangnp/p/19281067
