2021年5月17日 星期一

一口氣串接爆多影片? ffmpeg 拯救可憐的手指

本來排好上週要在校內教職員研習講 「個人隱私與資安防護」, 不過在疫情開始略微升高的第一時間, 學校就立即決定改採錄影的方式以減少群聚。 根據以往的經驗, 吃螺絲或恍神重錄浪費最多時間; 可是錄製的時限很緊迫, 所以最後我把一小時的內容切成將近三十段每段一到三分鐘的短片。 經過一些手工前置處理之後 (另文詳), 得到 這些檔案。 那要怎麼把它們全部串接起來呢? 我覺得 openshot 還蠻好用的。 但是近三十次的轉場逐次用手點滑鼠? No way! 這不是人在用電腦, 而是人被電腦用! 而且我的板機指會被用到廢掉 (哭) 這時就要請 新版的 ffmpeg 來救援了。

照上面連結安裝好 >= 4.3 版的 ffmpeg 之後, 也請下載我寫的 xfadeffmpeg.py。 然後: python3 xfadeffmpeg.py ??-*.mkv 就會產生一片(!)很長的 ffmpeg 指令。 如果看來沒問題的話, 就可以 pipe 給 bash 執行。 (建議先試五、六段就好) 也可以這樣下: python3 xfadeffmpeg.py -o /tmp/210511-security.mp4 -e smoothleft -d 0.5 ??-*.mkv 意思是兩兩影片之間重疊 0.5 秒、 採用 「smoothleft」 轉場效果、 輸出檔存在 /tmp/210511-security.mp4 。 所有轉場效果清單請見 官網。 如果希望有變化, 也可以先把 xfadeffmpeg.py 的輸出存檔, 再手動修改 transition= 後面的參數。 轉完之後一定要拉到很後面看看聲音跟影像是否對得起來。 (我用很誇張的 -t 2.0 測試過) 錄影教學的規定盡量放馬過來吧! 以後錄影片都可以放心切成每段短短一到三分鐘, 就算有五百部影片要串接也沒在怕的啦!

以下是解決問題的過程記錄。 先搜尋到 這個問答, 做了一些實驗之後, 發覺 Yuchen Zhang 的程式還是不太對, 聲音轉場 acrossfade 的重疊時間應該跟影片設相同就好而不是兩倍。 另外發現只要重新 encode, 就算是想像中很簡單的 apad, 都會大幅度降低轉檔速度, 甚至會讓我的整部電腦當掉。 如果有必要調整, 還是用 -itsoffset 之類的比較快, 總之就是 codec 盡量選 "copy"。

[註: 不知為什麼 mint 20.04 的 vlc 不太能用, 最近都改用內建的 celluloid 看影片。]

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。