iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Software Development

學 Python 到底可以幹麻勒?系列 第 17

( Day 17 ) 影片轉檔 ( mp4、mov、wmv、avi...等 )

  • 分享至 

  • xImage
  •  

這篇文章會介紹使用 Python 的 moviepy 第三方函式庫,讀取影片並轉換成不同格式的影片 ( 例如 mp4、mov、wmv、avi...等常見格式 ),最後還會透過迴圈的方式,實現影片批次轉檔的功能。

原文參考:影片轉檔 ( mp4、mov、wmv、avi...等 )

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

Python 教學 - 影片轉檔 ( mp4、mov、wmv、avi...等 )

安裝 moviepy

輸入下列指令安裝 moviepy,根據個人環境使用 pip 或 pip3。

!pip install moviepy

由於影片轉檔會使用 ffmpeg,因此也要安裝 ffmpeg ( 影片存檔常見錯誤「TypeError: must be real number, not NoneType」往往都是 ffmpeg 沒有安裝導致 ),根據個人環境使用 pip 或 pip3,Anaconda Jupyter 可以使用 conda install。

!pip install ffmpeg

讀取影片,轉換成不同格式

載入 moviepy 讀取影片後,使用 write_videofile 方法,設定好儲存影片的副檔名,就能轉換成指定格式的影片。

如果有遇到轉檔後無法播放的狀況,通常是影片 codec 有問題,可以嘗試更換影片播放器,或參考 moviepy 的說明更換程式碼中的 codec ( 參考:write_videofile )

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # 使用 Colab 要換路徑使用

from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4")    # 讀取影片

format_list = ['avi','mov','wmv','flv','asf', 'mkv']  # 要轉換的格式清單

# 使用 for 迴圈轉換成所有格式
for i in format_list:
    output.write_videofile(f"output.{i}",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")

print('ok')

Python 教學 - 影片轉檔 ( mp4、mov、wmv、avi...等 )

批次影片轉檔

使用 for 迴圈,就能一次讀取多支影片,進行批次轉檔的功能。

相關教學參考:重複迴圈 ( for、while )

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # 使用 Colab 要換路徑使用

from moviepy.editor import *

format_list = ['avi','mov','wmv','flv','asf', 'mkv']

for n in range(3):
    video = VideoFileClip(f"oxxo_{n}.mp4")  # 使用 for 迴圈讀取影片
    for i in format_list:
        output.write_videofile(f"output_{n}.{i}",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")

print('ok')

Python 教學 - 影片轉檔 ( mp4、mov、wmv、avi...等 )

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 16 ) 麥克風錄音
下一篇
( Day 18 ) 取出影片聲音、影片加入聲音
系列文
學 Python 到底可以幹麻勒?41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言