【首选】PDF转视频教程:20秒一键将PDF转换为视频软件
<div class="lake-content"><h1 id="w1hZN"><span class="ne-text">一、背景介绍</span></h1>
<p id="u3b8cc1e8" class="ne-p"><span class="ne-text">大家好,我是王哪跑,现在很多做<strong><span class="ne-text">小学初中高中学习资料相关的教师</span></strong><span class="ne-text">或<strong><span class="ne-text">出售虚拟资料的网赚达人</span></strong><span class="ne-text">,都会将PDF电子档转换为视频,并发布到对应的短视频平台进行引流变现,但是使用传统的视频剪辑软件,花费的时间可能会比较长。</span></span></span></p>
<p id="u09a230c1" class="ne-p"><span class="ne-text">基于此,我用python开发了这个<strong><span class="ne-text">一键将PDF转视频的软件</span></strong><span class="ne-text">,<strong><span class="ne-text">只需30秒完成PDF到视频的一键转换。</span></strong></span></span></p>
<p id="u3c626a1d" class="ne-p"><span class="ne-text">(<span class="ne-text">悄悄地说个秘密<span class="ne-text">:<strong><span class="ne-text">更多实用工具也在同步开发中,关注我不迷路!</span></strong><span class="ne-text">)</span></span></span></span></p>
<p id="u8c202b78" class="ne-p"><img width="932.5714516719336" id="uf972df8c" class="ne-image lazyload" title="" data-src="https://cdn.nlark.com/yuque/0/2025/png/27571985/1762744028781-756e5d4f-b520-45c8-bed0-e70d8b77ec12.png"></p>
<h1 id="bRiPK"><span class="ne-text">二、软件使用</span></h1>
<p><strong>一句话介绍</strong>:<span style="color: rgba(255, 0, 0, 1)"><strong>软件可一键将PDF文档添加背景音乐、转成视频、添加转场、添加装饰图片(增强原创度),可在视频末尾附带引流文字。</strong></span></p>
<p><strong>适用人群</strong>:<span style="color: rgba(255, 0, 0, 1)"><strong>做学科资料、教师资料、使用电子版文档完成引流转化的人群。</strong></span></p>
<p id="u678231c2" class="ne-p"><strong><span class="ne-text">软件功能如下:</span></strong></p>
<p id="ub7e67a3c" class="ne-p"><span class="ne-text">1)支持指定PDF页面范围、每个PDF页面在视频中的持续时间</span></p>
<p id="u13c19d29" class="ne-p"><span class="ne-text">2)视频设置:支持自定义视频宽度、高度、帧率</span></p>
<p id="u373b6575" class="ne-p"><span class="ne-text">3)音频设置:支持添加背景音乐</span></p>
<p id="u56f52e62" class="ne-p"><span class="ne-text">4)转场设置:支持多种转场效果,并可自定义转场时间</span></p>
<p id="udbf7c917" class="ne-p"><span class="ne-text">5)装饰图库设置:通过添加背景装饰图,<strong><span class="ne-text">可增强视频的原创度,提高视频的流量</span></strong></span></p>
<p id="u6c9a695d" class="ne-p"><span class="ne-text">6)文字设置:可在视频结尾处<strong><span class="ne-text">定义引流文字,高效完成用户转化</span></strong><span class="ne-text">。</span></span></p>
<h2 id="VUEud"><span class="ne-text">1、文件选择</span></h2>
<p id="uc076ae65" class="ne-p"><img width="618.3896257075922" id="u1dbcd519" class="ne-image lazyload" title="" data-src="https://cdn.nlark.com/yuque/0/2025/png/27571985/1762742993055-2ebc259b-ec9f-4846-8614-06dd26e3e5ec.png"></p>
<p id="u80ac2e4a" class="ne-p"><span class="ne-text">PDF文件:选择你需要转换的PDF文件</span></p>
<p id="u1c4fbf56" class="ne-p"><span class="ne-text">视频输出目录:PDF转成的视频最终文件放到哪个位置</span></p>
<h2 id="b4Nb7"><span class="ne-text">2、视频及音频设置</span></h2>
<p id="u21000272" class="ne-p"><img width="612.779235958229" id="u9dac18a6" class="ne-image lazyload" title="" data-src="https://cdn.nlark.com/yuque/0/2025/png/27571985/1762743048243-1bc10360-2e9a-4d25-bd35-34fe4131e268.png"></p>
<p id="ue6cac6b6" class="ne-p"><span class="ne-text">平台选择:可选竖屏、横屏,选择后会自动填入宽度和高度</span></p>
<p id="ufed8c7bc" class="ne-p"><span class="ne-text">宽度、高度:可根据PDF页面的宽高比例自由设置</span></p>
<p id="ub09d5d94" class="ne-p"><span class="ne-text">帧率:可选30、60,帧率越搞视频越流畅,一般推荐30就够用了</span></p>
<p id="u6cc70218" class="ne-p"><span class="ne-text">指定PDF页面:你想将PDF哪些页面转换成视频</span></p>
<p id="uda018def" class="ne-p"><span class="ne-text">PDF页面持续时间:每个页面在视频中持续的时间是多少</span></p>
<p id="u8e33ac22" class="ne-p"><span class="ne-text">音频文件:添加视频的背景音乐,如背景音乐的时间比生成的视频时长短,会自动循环</span></p>
<h2 id="xvsfn"><span class="ne-text">3、转场设置</span></h2>
<p id="ub3984a4f" class="ne-p"><img width="613.4026125970472" id="u5aad80b5" class="ne-image lazyload" title="" data-src="https://cdn.nlark.com/yuque/0/2025/png/27571985/1762743286395-416013f5-32c2-477e-aef1-429421a92ce5.png"></p>
<p id="u7a5778b3" class="ne-p"><span class="ne-text">启用转场:可选择是否启用转场效果,勾选后则启用</span></p>
<p id="u9c5b0c64" class="ne-p"><span class="ne-text">转场效果:目前支持<span class="ne-text">淡入淡出、向左滑动、向右滑动<span class="ne-text">(更多效果正在陆续增加中...)</span></span></span></p>
<p id="u4867bff8" class="ne-p"><span class="ne-text">转场时长:转场的过渡时间,推荐<span class="ne-text">0.5-1秒左右</span></span></p>
<h2 id="iDrf1"><span class="ne-text">4、装饰图片设置</span></h2>
<p id="u32aec004" class="ne-p"><img width="613.4026125970472" id="u524ead60" class="ne-image lazyload" title="" data-src="https://cdn.nlark.com/yuque/0/2025/png/27571985/1762743582576-15608f85-3673-4a09-a915-b2d1cb0b7aec.png"></p>
<p id="ue943ff29" class="ne-p"><span class="ne-text">装饰图片库会随软件一起赠送,<strong><span class="ne-text">可以增加视频的原创度,让视频获得更多的流量扶持</span></strong><strong><span class="ne-text">。</span></strong></span></p>
<p id="ue3a43aad" class="ne-p"><span class="ne-text">装饰图片目录:选择我给的图片库路径,也可以自己扩充自己的图库</span></p>
<p id="ub7f1a54b" class="ne-p"><span class="ne-text">图片数量:从装饰图片库里选择多少张添加到PDF页面的背景中</span></p>
<p id="ud7c70358" class="ne-p"><span class="ne-text">缩放比例:推荐0.2-0.3</span></p>
<p id="u3053c684" class="ne-p"><span class="ne-text">透明度:装饰图片的透明度,推荐50左右会呈现出一个半透明的效果</span></p>
<h2 id="CkykP"><span class="ne-text">5、文字设置</span></h2>
<p id="u09945248" class="ne-p"><img width="610.9091060417746" id="uf8181f10" class="ne-image lazyload" title="" data-src="https://cdn.nlark.com/yuque/0/2025/png/27571985/1762743800504-ff89bab7-53bc-4943-8715-47654ed86602.png"></p>
<p id="u0b4e3609" class="ne-p"><span class="ne-text">如上图所示:设置好的文字内容(有电子版,可打印),会出现在视频最后的3秒时间,可自定义文字大小、文字颜色、文字描边颜色。</span><span style="font-size: 14px"> </span></p>
<h1 id="xBVmi"><span class="ne-text">四、技术说明</span></h1>
<p id="u291c5e27" class="ne-p"><span class="ne-text">软件全部采用python语言开发,主要分工如下:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">PySide6:GUI软件界面
requests:接口请求
json:解析响应数据
PIL:图片处理
packaging:版本管理
logging:日志记录</span></pre>
</div>
<h1><span id="cke_bm_25877S"> 五、核心代码</span></h1>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="25" data-cke-widget-wrapper="1">
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> PDF2VideoThread(QThread):
</span><span style="color: rgba(0, 128, 128, 1)">2</span> success_signal =<span style="color: rgba(0, 0, 0, 1)"> Signal(str)
</span><span style="color: rgba(0, 128, 128, 1)">3</span> log_signal =<span style="color: rgba(0, 0, 0, 1)"> Signal(str)
</span><span style="color: rgba(0, 128, 128, 1)">4</span> progress_signal =<span style="color: rgba(0, 0, 0, 1)"> Signal(int)
</span><span style="color: rgba(0, 128, 128, 1)">5</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, pdf_path, video_output_path, start_page, end_page,
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)"> video_width, video_height, video_fps, image_duration,
</span><span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 0, 0, 1)"> enable_audio, audio_is_loop, audio_path,
</span><span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 0, 1)"> enable_decor, decor_path, decor_num, decor_rate, decor_transparency,
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 0, 0, 1)"> enable_transition, image_transition_time, image_transition_name,
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)"> enable_word, word_size, word_duration, word_color, word_side_color, word_content,
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span> *args, **<span style="color: rgba(0, 0, 0, 1)">kwargs):
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span> super().<span style="color: rgba(128, 0, 128, 1)">__init__</span>(*args, **<span style="color: rgba(0, 0, 0, 1)">kwargs)
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> self.pdf_path =<span style="color: rgba(0, 0, 0, 1)"> pdf_path
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> self.video_output_path =<span style="color: rgba(0, 0, 0, 1)"> video_output_path
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span> self.start_page =<span style="color: rgba(0, 0, 0, 1)"> int(start_page)
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span> self.end_page =<span style="color: rgba(0, 0, 0, 1)"> int(end_page)
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span> self.video_width =<span style="color: rgba(0, 0, 0, 1)"> int(video_width)
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span> self.video_height =<span style="color: rgba(0, 0, 0, 1)"> int(video_height)
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span> self.image_duration =<span style="color: rgba(0, 0, 0, 1)"> float(image_duration)
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> self.video_fps =<span style="color: rgba(0, 0, 0, 1)"> int(video_fps)
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span> self.enable_audio =<span style="color: rgba(0, 0, 0, 1)"> enable_audio
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span> self.audio_is_loop =<span style="color: rgba(0, 0, 0, 1)"> audio_is_loop
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span> self.audio_path =<span style="color: rgba(0, 0, 0, 1)"> audio_path
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span> self.enable_decor =<span style="color: rgba(0, 0, 0, 1)"> enable_decor
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span> self.decor_path =<span style="color: rgba(0, 0, 0, 1)"> decor_path
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span> self.decor_num =<span style="color: rgba(0, 0, 0, 1)"> int(decor_num)
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span> self.decor_rate =<span style="color: rgba(0, 0, 0, 1)"> float(decor_rate)
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span> self.decor_transparency =<span style="color: rgba(0, 0, 0, 1)"> int(decor_transparency)
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span> self.enable_transition =<span style="color: rgba(0, 0, 0, 1)"> enable_transition
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span> self.image_transition_time =<span style="color: rgba(0, 0, 0, 1)"> float(image_transition_time)
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span> self.image_transition_name =<span style="color: rgba(0, 0, 0, 1)"> image_transition_name
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span> self.enable_word =<span style="color: rgba(0, 0, 0, 1)"> enable_word
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span> self.word_size =<span style="color: rgba(0, 0, 0, 1)"> word_size
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span> self.word_duration =<span style="color: rgba(0, 0, 0, 1)"> word_duration
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span> self.word_color =<span style="color: rgba(0, 0, 0, 1)"> word_color
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span> self.word_side_color =<span style="color: rgba(0, 0, 0, 1)"> word_side_color
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span> self.word_content =<span style="color: rgba(0, 0, 0, 1)"> word_content
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span>
<span style="color: rgba(0, 128, 128, 1)"> 40</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> run(self):
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span> <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)"> 42</span> <span style="color: rgba(128, 0, 0, 1)"> 各步骤占比权重
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span> <span style="color: rgba(128, 0, 0, 1)"> pdf转图片:15
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span> <span style="color: rgba(128, 0, 0, 1)"> 图片加装饰:15
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span> <span style="color: rgba(128, 0, 0, 1)"> 图片转视频:50
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(128, 0, 0, 1)"> 视频加文字:20
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span> <span style="color: rgba(128, 0, 0, 1)"> @return:
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span> <span style="color: rgba(128, 0, 0, 1)">"""</span>
<span style="color: rgba(0, 128, 128, 1)"> 49</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 获得pdf文件名</span>
<span style="color: rgba(0, 128, 128, 1)"> 50</span> pdf_name =<span style="color: rgba(0, 0, 0, 1)"> os.path.splitext(os.path.basename(self.pdf_path))
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span>
<span style="color: rgba(0, 128, 128, 1)"> 52</span> <span style="color: rgba(0, 0, 0, 1)"> pdf_to_images(self.log_signal, self.pdf_path, temp_image_path,
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span> first_page=self.start_page, last_page=self.end_page, dpi=200<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span> self.progress_signal.emit(15<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>
<span style="color: rgba(0, 128, 128, 1)"> 56</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> self.enable_decor:
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span> image_paths =<span style="color: rgba(0, 0, 0, 1)"> get_image_files(temp_image_path)
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span> <span style="color: rgba(0, 0, 255, 1)">for</span> image_path <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> image_paths:
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span> self.log_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">装饰: {image_path}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span> add_decor_from_library(image_path=<span style="color: rgba(0, 0, 0, 1)">image_path,
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span> decor_folder=<span style="color: rgba(0, 0, 0, 1)">self.decor_path,
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span> num_decor=<span style="color: rgba(0, 0, 0, 1)">self.decor_num,
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span> decor_rate=<span style="color: rgba(0, 0, 0, 1)">self.decor_rate,
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span> decor_transparency=<span style="color: rgba(0, 0, 0, 1)">self.decor_transparency,
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span> output_path=<span style="color: rgba(0, 0, 0, 1)">image_path)
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span> self.progress_signal.emit(15 + 15<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span>
<span style="color: rgba(0, 128, 128, 1)"> 68</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> --------- 图片加音频、转视频 ---------</span>
<span style="color: rgba(0, 128, 128, 1)"> 69</span> self.log_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">---------开始图片转视频---------</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span> self.log_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">正在进行图片转视频(用时较长 10-40秒左右),请稍后...</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span> output_path = os.path.join(self.video_output_path, f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{pdf_name}.mp4</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span> video_duration =<span style="color: rgba(0, 0, 0, 1)"> images_to_video(
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span> <span style="color: rgba(0, 0, 0, 1)"> self.log_signal,
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span> image_folder=temp_image_path,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 图片目录</span>
<span style="color: rgba(0, 128, 128, 1)"> 75</span> output_path=output_path,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 输出视频路径</span>
<span style="color: rgba(0, 128, 128, 1)"> 76</span> width=self.video_width,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 宽</span>
<span style="color: rgba(0, 128, 128, 1)"> 77</span> height=self.video_height,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 高</span>
<span style="color: rgba(0, 128, 128, 1)"> 78</span> fps=self.video_fps,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 帧率</span>
<span style="color: rgba(0, 128, 128, 1)"> 79</span> image_duration=self.image_duration,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 每张图片持续时间</span>
<span style="color: rgba(0, 128, 128, 1)"> 80</span> transition_duration=self.image_transition_time,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 转场1秒</span>
<span style="color: rgba(0, 128, 128, 1)"> 81</span> transition_type=self.image_transition_name,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 淡入淡出效果 fade、wipeleft、slideleft</span>
<span style="color: rgba(0, 128, 128, 1)"> 82</span> audio_path=self.audio_path<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 可选背景音乐</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span> <span style="color: rgba(0, 0, 0, 1)"> )
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span> self.progress_signal.emit(15 + 15 + 50<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span>
<span style="color: rgba(0, 128, 128, 1)"> 86</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> self.enable_word:
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span> self.log_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">✅ 视频已生成:{output_path}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span> <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> --------- 视频加文字 ---------</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span> self.log_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">---------开始视频加文字---------</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span> self.log_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">正在进行视频加文字,请稍后...</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span> output_path2 = os.path.join(self.video_output_path, f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{pdf_name}_加文字.mp4</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span> <span style="color: rgba(0, 0, 0, 1)"> add_text(
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span> input_video=<span style="color: rgba(0, 0, 0, 1)">output_path,
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span> output_video=<span style="color: rgba(0, 0, 0, 1)">output_path2,
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span> video_duration=video_duration,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ✅ 已知视频总时长</span>
<span style="color: rgba(0, 128, 128, 1)"> 96</span> text=<span style="color: rgba(0, 0, 0, 1)">self.word_content,
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span> duration=<span style="color: rgba(0, 0, 0, 1)">float(self.word_duration),
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span> fontsize=<span style="color: rgba(0, 0, 0, 1)">int(self.word_size),
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span> fontcolor=<span style="color: rgba(0, 0, 0, 1)">self.word_color,
</span><span style="color: rgba(0, 128, 128, 1)">100</span> bordercolor=<span style="color: rgba(0, 0, 0, 1)">self.word_side_color,
</span><span style="color: rgba(0, 128, 128, 1)">101</span> borderw=5<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">102</span> fontfile=rf<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">simhei.ttf</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 微软雅黑字体</span>
<span style="color: rgba(0, 128, 128, 1)">103</span> y=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">h-300</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 128, 128, 1)">104</span> <span style="color: rgba(0, 0, 0, 1)"> )
</span><span style="color: rgba(0, 128, 128, 1)">105</span> self.success_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">✅ 带文字的视频已生成:{output_path2}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">106</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">107</span> self.success_signal.emit(f<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">✅ 视频已生成:{output_path}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">108</span>
<span style="color: rgba(0, 128, 128, 1)">109</span> self.progress_signal.emit(15 + 15 + 50 + 20)</pre>
</div>
</div>
<h1 id="neIW6"><span class="ne-text">六、软件获取</span></h1>
<p data-pid="xVN4EVli">我是@王哪跑,持续分享python干货,各类副业技巧及软件!</p>
<p data-pid="NKBShBCx">附PDF转视频软件下载:(<span class="ne-text">完整版软件下载</span>)</p>
<p id="ud680600a" class="ne-p"> </p>
<p id="u6f919bcb" class="ne-p"> </p>
<p id="ufe7f55db" class="ne-p"> </p>
</div><br><br>
来源:https://www.cnblogs.com/wangnp/p/19281067
頁:
[1]