
隨著時代變遷,影片拍攝的方式也跟著需求改變
現在因為短影片的盛行,所以拍攝都改成用直式拍攝的方式拍攝
而我這台老戰友Sony A7M3也從2018年陪我到現在也有七年了,雖然我跟它沒有七年之癢,尤其最近看過A7M5推出之後
覺得這些年的進化除了畫質大幅更新、以及A7M4搭載新UI且最近更新支援直式介面,本質上還是一台FF全畫幅的單眼相機
尤其我只是在社群網站上面分享影片的需求來說,說真的後期更新真的對我來說無感
或是用另一個角度來講我沒打算花那個錢(將近8萬元)去升級一個我本來就有差不多的設備(A7M3當年賣59,980元)
若我有10萬預算我會先拿三萬去買vivo x300 pro手機,那個拍照可是巨大進步啊(相較於原本的舒適圈來說)
解決問題
好啦,說完前世今生之後,接著來解決拍攝之後的困境吧

有跟我一樣痛點的人才懂,A7M3直式拍攝進入電腦之後編輯是這樣的畫面,只有一個片段都好解決,若你拍了一堆片段,每次編輯前還要手動轉逆時針,然後再…
這個痛,懂得都懂
所以我就突發奇想,我可不可以請AI幫我寫一個小程式,我把影片拖進去之後自動幫我轉逆時針90度,這樣我之後編輯影片就不用歪著頭看素材了?
說幹就幹

我知道很多人偏好使用chatgpt,但我個人偏好使用Perplexity.ai,因為我在發現chatgpt騙我很多次之後,再加上所有Perplexity.ai的結果後面都會帶上參考連結,我覺得AI在唬爛的時候,還可以去看參考資料是不是真的如它所說那樣
總而言之,我就把這需求跟Perplexity提了之後,它給我了下面的結果(一系列討論與測試之後,我給大家最後的結果)
用文字編輯器把上面的原始碼貼上去之後,另存成一個rotate.sh的檔案放在你使用者容易存取到的地方
上面的語法裡面我後來要求了一些重點,就是檔案判斷、原始影片bitrate流量判斷之後轉檔照著原本規格轉(不然轉好的影片都掉畫質了你還要嗎?)
#!/bin/bash
# 如果沒任何檔案被丟進來就離開
if [ $# -eq 0 ]; then
echo “沒有收到檔案”
exit 0
fiFFMPEG=”/usr/local/bin/ffmpeg”
FFPROBE=”/usr/local/bin/ffprobe”for in_file in “$@”; do
base=”${in_file%.*}”
out_file=”${base}_vertical.mp4″# 先記錄原始檔的修改時間(macOS 用 stat -f)
orig_mtime=$(stat -f “%m” “$in_file”)# 用 ffprobe 抓第一個 video stream 的 bitrate(單位:bits/s)
vbitrate=$(“$FFPROBE” -v error -select_streams v:0 \
-show_entries stream=bit_rate \
-of default=noprint_wrappers=1:nokey=1 \
“$in_file”)# 如果抓不到,就給一個預設值,例如 40M
if [ -z “$vbitrate” ] || [ “$vbitrate” = “N/A” ]; then
vbitrate=”40000000″
fiecho “Input video bitrate: $vbitrate bps”
# 旋轉 90 度(transpose=2 逆時針、transpose=1 順時針),用相同 bitrate 輸出
“$FFMPEG” -i “$in_file” \
-vf “transpose=2” \
-c:v h264_videotoolbox -b:v “$vbitrate” \
-c:a copy \
-map_metadata 0 \
“$out_file”# 轉檔成功後,把輸出檔的修改時間改成跟原檔一樣
if [ -n “$orig_mtime” ]; then
# touch -r 直接「複製」時間戳,macOS 也支援
touch -r “$in_file” “$out_file”
fidone
接著開啟終端機下達下面指令
<code>chmod +x rotate.sh</code>
然後實際先跑看看
<coder>./rotate.sh C0005.MP4</code>
若可以成功就繼續進行下一步,若失敗就把錯誤訊息回報給AI請他幫你改
這一段落的原則就是你要先安裝好ffmpeg
安裝的方式就是透過terminal,執行下面語法
<code>brew install ffmpeg</code>
安裝好後, /usr/local/bin/ffmpeg 或 /opt/homebrew/bin/ffmpeg 會存在(Apple Silicon 通常是後者),但是你還是要實際確認一下是哪個目錄
ffmpeg -i input.mp4 -vf “transpose=1” -c:a copy output.mp4
• 逆時針 90 度(橫 → 直,機身向左躺拍):
ffmpeg -i input.mp4 -vf “transpose=2” -c:a copy output.mp4
• 180 度(上下顛倒):
ffmpeg -i input.mp4 -vf “transpose=2,transpose=2” -c:a copy output.mp4
transpose=1 代表純順時針 90 度,不做多餘翻轉,適合大多數情況。
我們這邊要逆時針轉,所以transpose=2
封裝成app
接著這種命令列語法不是每個人都會喜歡使用,所以我想把它封裝成一個小app,直接把一堆檔案都拖進去就搞定
AI給我三個選擇:安裝Xcode、用Platypus包裝成一個app、只裝Command Line Tools不裝完整Xcode(約10GB)
最後我選擇用Platyouy來打包
你可以去Platyous官網或是MacUpdate下載都可以

安裝好之後就可以開始把剛剛運行正確的rotate.sh檔案告訴它在哪裡,並且給軟體命名

Interface選擇Droplet

把該勾選的勾一下,然後Apply

最後導出成為一個app,就可以把一票檔案丟進去給他處理啦
成果驗收

原始檔案,抓起來丟進去上面我新生成的app軟體的droplet

讓子彈飛一下之後,就在原地轉換好了有後綴_vertical的檔案


Bitrate也有53.48Mbit/s,我覺得可以啦
總結

如果你現在跟我一樣都拍攝直式影片,而當你想要用單眼拍攝更好的畫面時,除了購買新機器例如ZV-E10就支援自動把影片轉成直式之外

可以用這個自己寫軟體的方式幫你把影片轉90喔
最後的最後
當我在寫這個日記的時候,我又犯職業病了

就是轉好影片的建立時間並不是拍攝時間,這對於我要處理多機、多檔案的時間軸重建是個很大的困擾,所以我又請AI幫我把轉好的檔案依照原始檔案的時間日期改回去

搞定收工,上面有0的就是原本寫這篇之前軟體轉換的結果,後來生成的就有跟原始檔案一樣的創建時間啦
而程式碼部分我已經跟新在上面了