# 在 Win11 環境中,將 AVI 影片轉檔為 MP4 (使用 Python) ###### 修改日期: 2025/01/28 ###### 作者: Storlite ## 目錄 [TOC] ## 起因 最近2025年過年期間,版主剛好也新家落成,在整理很多東西的過程中,發現了以前拍攝的各種影片 (當時貌似是存在錄影帶裡面),因此版主老爸花了一筆錢去外面請人將錄影帶的片源拉出來。 而該檔案便在電腦上以 avi 的檔案格式存在,但現在一般的智慧電視 (我是在說 LG 的) 是無法支援 avi 的影像撥放格式 (至少我是遇到這樣的狀況,或許跟電視規格也有關?) 因此版主老爸想要把 avi 的格式轉成 mp4 的格式以利後續撥放儲存,網路上的各種軟體不是要錢就是要錢QQ 這就是為什麼我想寫這篇出現的原因。 ## 面項 我知道網路上有很多大神可以用更簡單更方便的方法,但我希望這篇可以幫助到任何的小白來解決問題,所以我想寫得盡量仔細,希望你只要照著複製貼上就好。 ==當然如果你有更好的方法,相信我~你一定是對的!!== ## 先前準備 我初期是想用 VM 的方式去做,但想想這台電腦連個 Vituralbox 都沒裝,又不想浪費時間,就直覺想到 Windows Subsystem for Linux (WSL) 這個鬼東西,可以幫我直接處理好環境的部分,所以: 以下內容參考如下網站說明: https://blog.csdn.net/bule_shake/article/details/135992375 但我怕連結會失效,所以我還是有紀錄一下我自己的作的過程 ### 確認 window 該開的都開了 首先在搜尋欄位打上「開啟或關閉 windows 功能」  點選「開啟或關閉 windows 功能」後,會直接彈跳出這個視窗  請確認以下兩種功能是否有開啟 * Vitural Machine Platform * Windows 子系統 Linux 版  完成之後,點選「立即重新啟動」選項,此時你的電腦會重新開機,這是正常的 (引用一下這個參考連結的圖,我沒有截圖到)  重啟完成後,打開你的 Micorsoft Store (對,就是你很少打開的那個東西)  接著在搜尋的欄位打上 ubuntu  點選第一個搜尋結果,你會看到一堆版本的 ubuntu,這時候別擔心,你可以跟我一樣選擇後面沒帶編號的那個,或是你其實很熟了,你也可以選擇你熟悉的版本  進入之後點選「下載」,當你裝完了應該會看到跟我一樣的畫面  接著你可以點選「開啟」或是從系統的搜尋中找到她  完了之後你可能會看到項參考連結裡的問題,那就照著參考連結的方式去做調整  後續內容就是建立這個 WSL 的使用者帳號密碼了,基本上使用者你可以隨便取 (但是強烈建議用英文) >[!很重要] >密碼的話你寫輸入的過程中<font color="#f00">**不會顯示**</font>,這是正常的,所以不要忘記自己的密碼喔~!! --- ### 取得 VScode 如果你是有用過程式的人,一定會接觸到 VScode 這個東西,所以就讓我們模仿會寫程式的人把VScode載下來,連結在此: https://code.visualstudio.com/ 基本上直接點選「Download for Windows」就可以了喔 --- ### 好看一點的終端機 (Terminal) 預設的 ubuntu 操作介面看起來黑黑的,不喜歡,所以你有很多選擇可以讓自己用起來開心一些 * 使用 VScode 原生的終端機 當你載好VScode之後,可以直接開啟他,你可以在最上方的欄位中找到終端機 (或是Terminal) 的字樣  點擊一下,並選擇第一個「New Terminal」  接著把你的視角移到最下面,你會看到他自己從下面長出新的指令控制介面  然後讓我們點選一下 + 號旁邊小小的向下的箭頭,擬就會看到你可以切換的 Terminal 類型  VScode會識別你電腦中有的類型,此時我們點選 ubuntu 這個選項  你就會注意到你VScode下面的樣式變了一個樣子,這就代表你成功些換到 ubuntu 的操作環境  * 使用 Window PowerShell 基本上一樣是進到 Microsoft Store 中去搜尋 Windows Terminal 並下載就可以了  完畢之後開啟 Windows Terminal,將目光集中到項下的箭頭  此時他跟 VScode 一樣會去識別你電腦中有的 Terminal 類型,點選 ubuntu 即可切換  這時候你的 ubuntu 就會比較好看一點喔~ (至少對於習慣玩 ubuntu 的人來說,這是很熟悉的介面)  以上,基本上你的 WSL 環境已經準備好了,那我們就可以開始去轉檔了 ## 執行 首先,開啟你的 ubuntu,這邊先用 windows terminal 舉例  ### 環境更新 接著,讓我們來做一件很重要的事情,就是更新 ```bash sudo apt update && sudo apt dist-upgrade -y ``` 執行下去後 (按下 Enter) 系統會請你輸入你剛剛設定的密碼,請你進行輸入  接著,他就會開始執行相關的環境更新與內容,完成之後我們就要來安裝 python 相關的套件了 ### 套件安裝 首先確定你的ubuntu中是不是已經有 python 跟 pip 了 ```bash python3 --version pip --version ```  > [!Tip] 小提醒 > 你的 python 版本可能跟我的不一樣,沒關係,以自己的環境為主 若你的環境沒有 pip 的套件,他會提示你需要安裝 (實在沒有截到沒有 pip 的圖,先用這位大大的圖片示意一下)  ref: https://blog.csdn.net/FloraCHY/article/details/120351494 這時候你只要執行它告訴你的指令即可安裝 pip ```bash! sudo apt install python3-pip -y ``` 接著,在我們開始安裝相關套件包之前,我們需要去建立一個虛擬的 python 開發環境,目的在於避免開發的過程中影響全域的 (整個電腦的) 環境設定,因此要先進行如下設定: 1. 建立自己的 python 虛擬開發環境 ```bash python3 -m venv myenv ``` 2. 啟用虛擬環境 ```bash source myenv/bin/activate ``` 這時候你就會看到你的帳號名前面多了一個虛擬環境的標示  然後就可以安裝我們需要的套件包了 ```bash! pip install MoviePy ``` > [!Tip] 小提醒 > 如果想退出虛擬環境,你可以使用 ```deactivate``` 指令 準備完成後,我們就要建立這次的轉換程式碼,但在 linux 的世界中,路徑是非常重要的,所以我們要先釐清一個點 在 window 環境中的 C 槽或是 D 槽之類的在哪裡呢? 我們可以透過以下指令去找一下 ```bash! ls /mnt/ ```  是的,畫面中的 c、d、f 分別代表的就是你 window 中的 C槽、D槽、F槽,因此我們要先去到我們想要轉檔的路徑位置。 我的情境是,透過外接硬碟的方式 (F槽) 裡面有一些檔案要轉檔,因此我先進到指定的地方 ```bash! cd /mnt/f ls ``` 這時候你就會看到這顆外接硬碟的資料夾與檔案 (因為這次的重點是怎麼轉檔,請容許我將其他不重要的東西碼掉)  假設我今天要轉的是「家人影片」中所有的 avi 檔案,那我們就可以準備來進行程式撰寫 ### 程式撰寫 以下是參考此 Youtube 連結的介紹為基礎,搭配 Chatgpt 來搞得程式 https://i.ytimg.com/an_webp/OPQHo0ewAjs/mqdefault_6s.webp?du=3000&sqp=CN_F4rwG&rs=AOn4CLCNyxTjcZxK35b_Bq7W0S3ZEZtQKA 首先,建立一個 python 檔案 ```bash! touch avi2mp4.py ```  接著,打開你的 VScode,點選左上角的文件圖示,並點選開啟資料夾  選擇到你剛剛建立 python 檔案的位置 (範例中我是放在 F 槽裡面,所以我選 F 槽就可以了)  若是第一次開啟,VScode會問你要不要信任這個資料夾的作者,基本上選 yes 就可以了  接著你就會在你的VScode左側欄位看到相關的資料夾訊息,以及剛剛建立的 avi2mp4.py  點擊avi2mp4.py並將以下程式碼貼上 ```python! import os from moviepy.editor import VideoFileClip # 定義包含 AVI 檔案的資料夾路徑 input_folder = "./avi_files" # 替換為你的資料夾路徑 output_folder = "./mp4_files" # 定義輸出的資料夾路徑 # 確保輸出資料夾存在 os.makedirs(output_folder, exist_ok=True) # 遍歷資料夾中的所有檔案 for filename in os.listdir(input_folder): # 檢查檔案是否以 .avi 結尾 if filename.endswith(".avi"): avi_path = os.path.join(input_folder, filename) # 原始 AVI 檔案路徑 mp4_name = filename.replace(".avi", ".mp4") # 將檔名從 .avi 轉為 .mp4 mp4_path = os.path.join(output_folder, mp4_name) # 輸出的 MP4 檔案路徑 print(f"正在轉換: {avi_path} -> {mp4_path}") # 轉換 AVI 至 MP4 clip = VideoFileClip(avi_path) clip.write_videofile(mp4_path) clip.close() # 釋放資源 ``` 接著就是剛剛提到的重要概念,選擇指定的路徑 * input_folder: 你的 avi 檔案的路徑,以範例來說,我的檔案類型會在 F槽的「家人影片」 * output_folder: 你的 mp4 檔案轉好後要放哪裡,以範例來說,我的檔案也想放在同樣的 F槽的「家人影片」中 所以修改後的程式碼會長的如下 ```python! import os import moviepy input_folder = "/mnt/f/家人影片" output_folder = "/mnt/f/家人影片" os.makedirs(output_folder, exist_ok=True) for filename in os.listdir(input_folder): # check if the file format is avi if filename.endswith(".avi"): ## change file format but keep same name avi_path = os.path.join(input_folder, filename) mp4_name = filename.replace(".avi", ".mp4") mp4_path = os.path.join(output_folder, mp4_name) print(f"正在轉換: {avi_path} -> {mp4_path}") # change avi to mp4 clip = moviepy.VideoFileClip(avi_path) clip.write_videofile(mp4_path) clip.close() ``` 完成之後,我們就可以開始執行 ```bash! python3 avi2mp4.py ```  以上,就讓他繼續努力地跑,我們所有的 avi 檔案就可以轉完摟 ## 結語 其實現在寫程式的過程中有 Chatgpt 的幫忙已經加快很多,並且很容易讓大家知道該怎麼做。但這過程中花我最多時間的就是,gpt 給的答案不一定正確,你要怎麼在 gpt 給的答案中去修改你的程式以符合你自己的需求,以及最重要的就是 debug,所以還是想分享這篇協助不太清楚的小白可以怎麼進行 一樣再說一次,==如果你有更好的解決方法,相信我~你一定是對的!!==
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up