欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現照片集變成視頻的代碼實現

 更新時間:2024年10月14日 08:26:12   作者:shigen01  
看著電腦里亂七八糟的照片,有大有小,寬高不一,突然想找個方式把他們統(tǒng)一起來,然后做成視頻更好,所以本文給大家介紹了python實現照片集變成視頻的實現,需要的朋友可以參考下

背景

一個安靜的下午,看著電腦里亂七八糟的照片,有大有小,寬高不一,突然想找個方式把他們統(tǒng)一起來,然后做成視頻更好(其實我在上高中的時候就喜歡把照片做成視頻,覺得意義很大)。要滿足批量、自動化,肯定得動用代碼了。于是首先我列舉了下我希望的功能:

  • 照片來源:制定的目錄下所有的文件格式為照片的文件,按照照片的文件名進行排序

  • 照片質量:按照目前的720P、1080P、甚至是2K、4K的畫質來生成照片視頻

  • 照片橫豎:可以自定義指定照片是橫屏還是豎屏

  • 照片時間:可以自定義每一張照片的放映時間

  • 照片比例:這個也是最為重要的,對此我分成了如下幾種case:

    圖片的寬度 < 視頻寬度 * 50% or 圖片的高度 < 視頻高度 * 50%:舍棄掉

    圖片寬度 < 視頻寬度 or 圖片的高度 < 視頻高度:居中等比放大,直到高度 = 視頻高度 or 寬度 = 視頻寬度=

    其它尺寸,圖片居中等比縮小,直到高度 = 視頻高度 or 寬度 = 視頻寬度

這種照片比例的放大居中,基本上是強迫癥患者的福音了,嚴格的居中對齊。

實現

依托強大的python庫,這里主要用到的工具庫有:

  • Pillow,源代碼有簡單、精煉的解釋:Pillow is the friendly PIL fork by Alex Clark and Contributors.PIL is the Python Imaging Library by Fredrik Lundh and Contributors. 機器學習、圖像識別等場景用到的最多,這里主要使用它來調整圖片的大小
  • MoviePy, 是一個用于視頻編輯的 Python 庫??梢?strong>剪輯視頻、添加音頻和字幕、調整視頻幀簡單的特效等等。這里主要是根據照片序列生成視頻。

介紹完主要的庫之后,就是代碼環(huán)節(jié)了,代碼里注釋較多,輕松入手,不做過多的解釋:

 # create viode from a dictionary which contains image or video files
 import os
 from PIL import Image
 from moviepy.editor import ImageSequenceClip
 ?
 ?
 def resize_and_crop(image, target_size):
     """將圖片根據給定的大小進行縮放和裁剪
 ?
     1. 圖片的寬度 < 視頻寬度 * 50% or 圖片的高度 < 視頻高度 * 50%:舍棄掉
     2. 圖片寬度 < 視頻寬度 or 圖片的高度 < 視頻高度:居中等比放大,直到高度 = 視頻高度 or 寬度 = 視頻寬度
     3. 圖片居中等比縮小,直到高度 = 視頻高度 or 寬度 = 視頻寬度
 ?
     Args:
         image (str): 原圖片文件路徑
         target_size (tuple): 視頻大小(寬度, 高度)
 ?
     Returns:
         Image: 調整后的圖片,可能為空
     """
     img = Image.open(image)
     video_width, video_height = target_size
 ?
     # 檢查條件1:如果原圖寬度或高度小于視頻尺寸的50%,則返回None
     if img.width < video_width * 0.5 or img.height < video_height * 0.5:
         return None
 ?
     # 計算目標縮放比例
     scale_x = video_width / img.width
     scale_y = video_height / img.height
 ?
     # 根據需要的寬度和高度選擇縮放比例
     if img.width < video_width or img.height < video_height:
         # 居中等比放大
         scale = max(scale_x, scale_y)
     else:
         # 居中等比縮小
         scale = min(scale_x, scale_y)
 ?
     # 放大或縮小圖片
     new_size = (int(img.width * scale), int(img.height * scale))
     img = img.resize(new_size, Image.ANTIALIAS)
 ?
     # 計算裁剪框的位置
     left = (img.width - video_width) // 2
     top = (img.height - video_height) // 2
     right = left + video_width
     bottom = top + video_height
 ?
     # 裁剪并返回最終圖片
     img = img.crop((left, top, right, bottom))
     return img
 ?
 ?
 def create_video_from_images(folder_path,
                              out_put_file_name='output_video.mp4',
                              resolution='720p',
                              is_horizontal=True,
                              duration=3):
     """通過照片生成視頻
 ?
     Args:
         folder_path (_type_): 文件夾路徑
         out_put_file_name (str, optional): _description_. 視頻輸出路徑 Defaults to 'output_video.mp4'.
         resolution (str, optional): _description_. 視頻清晰度 Defaults to '720p'.
         is_horizontal (bool, optional): _description_. 是否是橫屏 Defaults to True.
         duration (int, optional): _description_. 每張照片的放映時長 Defaults to 3.
 ?
     Raises:
         ValueError: 視頻清晰度錯誤
     """
     resolution_mapping = {
         '720p': (1280, 720),
         '1080p': (1920, 1080),
         '2k': (2560, 1440),
         '4k': (3840, 2160),
     }
 ?
     if resolution not in resolution_mapping:
         raise ValueError(
             "Invalid resolution. Choose from '720p', '1080p', '2k', '4k'.")
 ?
     target_size = resolution_mapping[resolution]
     if not is_horizontal:
         target_size = (target_size[1], target_size[0])
 ?
     images = []
 ?
     # 讀取文件夾下的文件并按照文件名排序
     for filename in sorted(os.listdir(folder_path)):
         if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):
             img = resize_and_crop(os.path.join(folder_path, filename),
                                   target_size)
             if img:
                 images.append(img)
 ?
     # 照片的臨時位置
     temp_files = []
     for i, img in enumerate(images):
         temp_file = f'temp_image_{i}.png'
         img.save(temp_file)
         temp_files.append(temp_file)
 ?
     # 創(chuàng)建視頻
     clip = ImageSequenceClip(temp_files, fps=1 / duration)
     output_file = os.path.join(folder_path, out_put_file_name)
     clip.write_videofile(output_file, codec='libx264')
 ?
     # 清除臨時文件
     for temp_file in temp_files:
         os.remove(temp_file)
 ?
 ?
 if __name__ == '__main__':
     create_video_from_images(
         folder_path='/Users/xxxx/Downloads/xxx/imgs',
         is_horizontal=False,
         resolution='720p')

我們執(zhí)行腳本,這里是控制臺輸出:

再來看看視頻輸出:

標準的720P H264編碼,3&,21s的時長。有一張圖是橫屏的圖,這里生成的視頻中也根據高度放大進行了居中裁剪:

整體的感覺還不錯,特此寫個博客分享出來。當然還有很多的優(yōu)化點:

優(yōu)化項

其實做的還是相當的粗糙,但是基本上還是省事兒了??紤]到的優(yōu)化點有:

  • 指定背景音樂并實現照片卡點
  • 加上隨機的特效切換

咳,目前想到的就這么多。作為工具,我覺得越簡單越好,需要效率和我開發(fā)時間的權衡。

到此這篇關于python實現照片集變成視頻的代碼實現的文章就介紹到這了,更多相關python照片集變成視頻內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python中格式化字符串輸出的4種方式小結

    Python中格式化字符串輸出的4種方式小結

    本文主要介紹了Python中格式化字符串輸出的4種方式小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • python編程普通及類和靜態(tài)方法示例詳解

    python編程普通及類和靜態(tài)方法示例詳解

    普通方法會將實例傳入方法當中(通常用self表示),類方法會將類傳入方法當中(通常用cls表示),靜態(tài)方法中傳入與類無關的變量。下面將舉例詳細說明
    2021-10-10
  • Python對XML文件實現增刪改查操作

    Python對XML文件實現增刪改查操作

    這篇文章主要為大家詳細介紹了Python對XML文件進行實現增刪改查操作的方法,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-11-11
  • 下載官網python并安裝的步驟詳解

    下載官網python并安裝的步驟詳解

    在本篇文章里小編給大家整理了關于下載官網python并安裝的步驟詳解,需要的朋友們參考學習下。
    2019-10-10
  • Pygame實戰(zhàn)練習之一百層游戲

    Pygame實戰(zhàn)練習之一百層游戲

    跳上一百層想必是很多人童年時期的經典游戲,我們依舊能記得抱個老人機娛樂的場景,下面這篇文章主要給大家介紹了關于如何利用python寫一個簡單的跳上一百層小游戲的相關資料,需要的朋友可以參考下
    2021-09-09
  • Python @property原理解析和用法實例

    Python @property原理解析和用法實例

    這篇文章主要介紹了Python @property原理解析和用法實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • python實現漢諾塔算法

    python實現漢諾塔算法

    這篇文章主要為大家詳細介紹了python實現漢諾塔算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 利用Python做一個電腦通知小工具

    利用Python做一個電腦通知小工具

    Windows不是有個消息通知功能,挺喜歡這個功能的,但是不太方便使用,也懶得去研究,于是準備用Python自己寫一個,感興趣的可以了解一下
    2022-12-12
  • Python實現文字pdf轉換圖片pdf效果

    Python實現文字pdf轉換圖片pdf效果

    當我們把word轉化為pdf,wps默認轉化為文字pdf,而圖片pdf要會員。所以本文將通過Python語言實現文字pdf轉換圖片pdf,需要的可以參考一下
    2022-04-04
  • 關于Python的json字符串與json模塊解讀

    關于Python的json字符串與json模塊解讀

    這篇文章主要介紹了關于Python的json字符串與json模塊解讀,JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C,?C++,?C#,?Java,?JavaScript,?Perl,?Python等),這些特性使JSON成為理想的數據交換語言,需要的朋友可以參考下
    2023-07-07

最新評論