方法筆記:Python批量修改文件名、文件后綴、批量圖片生成視頻?
問題描述:最近遇到一個小問題,就是需要將大量圖片生成MP4視頻文件。(網(wǎng)上要么要錢,要么就帶水印,不如自己找個方法。)
問題拆解:
1、 需要將文件進行順序命名;
2、 需要將文件名后綴進行批量修改;
3、 需要將圖片格式進行統(tǒng)一;
4、 生成視頻文件。
解決方法:(python解決)
1、 將文件進行順序命名(方法一:根據(jù)文件名進行處理;方法二:根據(jù)文件后綴進行處理);
方法一:
# 作者:Mark Qin
# 日期:2023/8/2 9:52
#批量給文件改名
import os
def is_substring_in_filename(filename, substring):
??? """
??? 定義函數(shù),用于判斷文件名中是否包含某個字符串
??? :param filename: 文件名
??? :param substring: 要搜索的子字符串
??? :return: True(包含子字符串)或 False(不包含子字符串)
??? """
??? return substring in filename
def batch_rename_files(folder_path, prefix, extension):
??? """
??? 定義函數(shù):批量給文件名順序命名
??? :param folder_path: 文件夾路徑
??? :param prefix: 文件名前綴
??? :param extension: 文件擴展名
??? """
??? count = 2
??? for filename in sorted(os.listdir(folder_path)):
??????? if is_substring_in_filename(filename, prefix):? #調(diào)用函數(shù),判斷文件名是否包含字符串。
??????????? new_filename = f"{prefix}{count}.{extension}"
??????????? old_file_path = os.path.join(folder_path, filename)
??????????? new_file_path = os.path.join(folder_path, new_filename)
??????????? os.rename(old_file_path, new_file_path)
??????????? count += 2
# 示例調(diào)用
folder_path = "D:/00project3/6diangongsuo/wb/wanbo/changename"? #替換為實際文件夾路徑
prefix = "ce-"? # 文件名前綴
extension = "txt"? # 文件擴展名
batch_rename_files(folder_path, prefix, extension)
實施效果如下:
運行前的文件名

運行后的文件名

方法二:
# 作者:Mark Qin
# 日期:2023/8/2 16:07
#批量給文件改名
import os
def batch_rename_files(folder_path, prefix, extension):
??? """
??? 定義函數(shù):批量給文件名順序命名
??? :param folder_path: 文件夾路徑
??? :param prefix: 文件名前綴
??? :param extension: 文件擴展名
??? """
??? count = 1
??? for filename in sorted(os.listdir(folder_path)):
??????? if filename.endswith(extension):??????????? #判斷文件后綴是否為指定圖片格式。
??????????? new_filename = f"{prefix}{count}.{extension}"
??????????? old_file_path = os.path.join(folder_path, filename)
??????????? new_file_path = os.path.join(folder_path, new_filename)
??????????? os.rename(old_file_path, new_file_path)
??????????? count += 1
# 示例調(diào)用
folder_path = "D:\pythonlearn\pictest"? # 替換為實際文件夾路徑
prefix = "p"? # 文件名前綴
extension = "PNG"? # 文件擴展名
batch_rename_files(folder_path, prefix, extension)
實施效果如下:
運行前的文件名

運行后的文件名

2、 修改文件后綴名
# 作者:Mark Qin
# 日期:2023/8/2 11:11
#批量給文件改后綴名
import os
def batch_rename_files(folder_path, old_suffix, new_suffix):
??? """
??? 批量修改文件名的后綴
??? :param folder_path: 文件夾路徑
??? :param old_suffix: 舊后綴
??? :param new_suffix: 新后綴
??? """
??? for filename in os.listdir(folder_path):
??????? if filename.endswith(old_suffix):
??????????? old_file_path = os.path.join(folder_path, filename)
??????????? new_filename = filename.replace(old_suffix, new_suffix)
??????????? new_file_path = os.path.join(folder_path, new_filename)
??????????? os.rename(old_file_path, new_file_path)
# 示例調(diào)用
folder_path = "D:\pythonlearn\pictest"? # 替換為實際文件夾路徑
old_suffix = ".PNG"? # 舊后綴
new_suffix = ".jpg"? # 新后綴
batch_rename_files(folder_path, old_suffix, new_suffix)
實施效果如下:
運行前的文件名

運行后的文件名

3、 統(tǒng)一圖片格式并生成mp4(如下為python源碼,注意,python需要安裝openCV,注釋內(nèi)有安裝方法)
# 作者:Mark Qin
# 日期:2023/8/2 15:29
import CV2
import os
def resize_image(image_path, target_width, target_height):
??? """
??? 調(diào)整圖片大小
??? :param image_path: 圖片文件路徑
??? :param target_width: 目標寬度
??? :param target_height: 目標高度
??? :return: 調(diào)整后的圖片
??? """
??? image = CV2.imread(image_path)
??? resized_image = CV2.resize(image, (target_width, target_height))
??? return resized_image
def images_to_video(image_folder, output_video_path, fps=3, image_extension='.jpg', target_width=640, target_height=480):
??? """
??? 將圖片合成為MP4視頻
??? :param image_folder: 包含圖片的文件夾路徑
??? :param output_video_path: 輸出視頻的路徑
??? :param fps: 視頻的幀率,默認為30幀/秒
??? :param image_extension: 圖片的擴展名,默認為.jpg
??? :param target_width: 目標寬度
??? :param target_height: 目標高度
??? """
??? image_files = [f for f in os.listdir(image_folder) if f.endswith(image_extension)]
??? image_files.sort()
??? if not image_files:
??????? print("沒有找到任何圖片文件。")
??????? return
??? first_image = CV2.imread(os.path.join(image_folder, image_files[0]))
??? height, width, _ = first_image.shape
??? fourcc = CV2.VideoWriter_fourcc(*'mp4v')
??? out = CV2.VideoWriter(output_video_path, fourcc, fps, (target_width, target_height))
??? for image_file in image_files:
??????? image_path = os.path.join(image_folder, image_file)
??????? resized_image = resize_image(image_path, target_width, target_height)
??????? out.write(resized_image)
??? out.release()
??? print(f"視頻合成完成:{output_video_path}")
# 示例調(diào)用
# 示例調(diào)用
image_folder = "D:/pythonlearn/pictest"? # 替換為實際存儲圖片的文件夾路徑
output_video_path = "D:/pythonlearn/pictest/output_video.mp4"? # 替換為輸出視頻的路徑
images_to_video(image_folder, output_video_path)
"""
在這個示例代碼中,images_to_video函數(shù)接受四個參數(shù):image_folder是包含圖片的文件夾路徑,output_video_path是輸出視頻的路徑,
fps是視頻的幀率(默認為30幀/秒),image_extension是圖片的擴展名(默認為.jpg)。
運行這個函數(shù)后,它會按照指定的幀率將圖片合成為一個MP4視頻,并保存在指定的輸出路徑下。
請確保在運行之前已經(jīng)安裝了OpenCV庫(可以使用pip install opencv-python進行安裝,然后在python中的interpreter settings中找
到project:中的python interpreter,點擊“+”號(install),搜索opencv-python,點擊install package,安裝成功即可)。
注意:圖片的尺寸應該保持一致,否則合成的視頻可能會出現(xiàn)問題。如果圖片尺寸不一致,你可能需要在代碼中添加額外的處理來調(diào)整圖片大小。
"""
?
?
by??? classic1573@163.com