博客 / 詳情

返回

【首選】PDF轉視頻教程:20秒一鍵將PDF轉換為視頻軟件

一、背景介紹

大家好,我是王哪跑,現在很多做小學初中高中學習資料相關的教師出售虛擬資料的網賺達人,都會將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轉視頻軟件下載:(完整版軟件下載

 

 

 

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.