只放拖鞋的鞋櫃

程式中的迷途小書僮

使用 ffmpeg 編輯影片

長話短說,可以用 ffmpeg 做到一些簡單的影片編輯功能,好比說

把 input.mp4 裡面 00:24:32 到 00:29:34 這段時間的影像擷取出來

1
$ ffmpeg -i input.mp4 -ss 00:24:32 -to 00:29:34 -threads 2 -y clip001.mp4

從一張圖片產生一個長度 15 秒的影片,同時把尺寸轉為 1280x720

1
$ ffmpeg -loop 1 -i image.png -t 15 -vf scale=1280:720 -pix_fmt yuv420p -y image.mp4

將一個完全沒有音軌的影片,塞入 15 秒的無聲音軌,指定頻率為 48000 Hz。

1
$ ffmpeg -f lavfi -i anullsrc=r=48000 -i image.mp4 -t 15 -c:v copy -c:a aac  -y silent.mp4

接著把幾個 mp4 檔接成一個檔案,先把它們都轉成 ts 檔,最後再接回 mp4 檔

1
2
3
4
5
6
7
$ ffmpeg -i clip0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip0.ts
$ ffmpeg -i clip1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip1.ts
$ ffmpeg -i clip2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip2.ts

$ ffmpeg -i "concat:clip0.ts|clip1.ts|clip2.ts" -c copy -bsf:a aac_adtstoasc -y output.mp4

$ rm clip0.ts clip1.ts clip2.ts

Java 的 Nested Class

最近公司做的產品,收到來自外面鄉親貢獻的 PR,想起了這個被自己遺忘很久的東西,趁著再次補起記憶的時候,順便做一點紀錄。

簡單來說就是 Java 的 Nested class 盡量寫成 static 比較好。至於為什麼比較好,也許就要多花點功夫來了解。

日常能做的環保小事

比起各種政治立場或是國族認同,我覺得最能夠找出共識的議題應該就是環保了(好吧,雖然還是會有些科學的爭議)。姑且不論層次比較高的空汙、能源議題,若能夠隨手做一點小事來降低對生態的衝擊,也不是一件壞事。

這篇文章記錄了我在日常生活中會做的一點小事,成本不高,希望能給你參考之後一同來試試看,簡單來說就是

  • 減少使用塑膠袋,盡量隨身攜帶重複使用
  • 出門自備筷子與手帕
  • 想買飲料來喝,就自備罐子與吸管

上述除了第三點可能稍微有點麻煩之外,一二點都是很自然就能做到的小事了

使用 ConstraintLayout 建構畫面

ConstraintLayout 是 Support Library 裡面新增的一個 ViewGroup,從功能上來看非常強大,效能上不輸、甚至贏過傳統的 Layout。因為放在 Support Library 裡面,幾乎市面上所有的手機都相容,就放心使用吧。

以往在建構複雜的畫面時,經常是 LinearLayout 與 RelativeLayout 等等相互組合,拼湊出相當深且複雜的樹狀 xml。略懂 View render 過程的都知道,效能就在層層的 measurement/layout 之中持續消耗。改用 ConstraintLayout 取代傳統 Layout 的複雜組合,把 xml 檔變得更加扁平,效率很容易就能提升。

粗看 ConstraintLayout 會覺得跟 RelativeLayout 有點像,其實它還能做到很多 RelativeLayout 做不到的事情。以下就稍微簡介 ConstraintLayout 的安裝與使用。

使用 Checkstyle/Ktlint 檢查 Java/Kotlin 語法

多人開發的場合,大家寫程式的習慣用法往往不一樣。除了實作上的思維不同,在所難免,至少在程式碼風格上可以一致。

不同的語言有不同的 coding style,在 Java 裡面我通常就是參考(以前是 Sun Microsystems 現在是 Oracle) Code Conventions for the Java TM Programming Language。隨著開發時間的拉長,遞交程式的數量變多之後,總是會有幾次忘記加上空白之類的小瑕疵,這種檢查理當交給程式去做。

雖然寫程式沒有 freestyle,但是我們有 checkstyle

TransitionDrawable 用兩張以上的圖

當我們需要一張圖片,慢慢交錯顯示出另外一張圖片的時候,經常使用 TransitionDrawable。繼承自 LayerDrawable 的 TransitionDrawble 的實作,則是在 onDraw 的時候只拿前兩張來交換顯示。

實務上使用時,需要交換顯示的圖片往往不只兩張,這時候就需要一點取巧的做法。

開發 Android App 階段啟用 StrictMode

開發 App 的階段,通常是把條件弄得更嚴苛會比較好。除了常見的,把 Don’t keep Activity 打開以外,還有一個就是啟動 StrictMode

ViewPager 與 FragmentStatePagerAdapter

在 Android 上面想要做兩三個 Tabs,並且希望透過左右滑動切換 Tab 的時候,通常就會用到 ViewPager。若希望每個 Tab 都是一個獨立的 Fragment,我們能使用 FragmentStatePagerAdapter。只是這個 Adapter 的使用方法跟 ListView 或 RecyclerView 的 Adapter 有點不一樣,一不小心就會踩到洞。

測試的方法也不難,只要進到系統設定裡面的開發者選項,把 Don’t keep activties 打開便能測試。就我自己的經驗,在 MainActivity 用了 ViewPager 顯示幾個 Fragments,打開一個新的 Activity 觸發系統將 MainActivity 砍掉,接著回到 MainActivity 的時候就能發現,所有的 View 都是 null。

Android 的 ExternalStorage

在 Android 上要儲存檔案經常會用到 Internal 或 External Storage,對部分的應用程式來說,常見的需求是「把檔案存到 SD card」。

從結論來說,Android 並沒有 SD card 這樣的概念,External Storage 也不一定是外接式儲存裝置。先有這樣的認知,接著就可以問以下幾個問題

  • 有哪些 Storage 可以用?
  • Context 與 Environment 有哪些 Storage 的 API 可以用?
  • 有怎樣的權限問題?

新聞業的挑戰

新聞業在這個世代遇到的挑戰相當大,不論是業內的人或是一般的讀者,對「新聞業」的表現普遍不滿,常有人嘲諷「小時不讀書,長大當記者」,媒體給人感覺是嗜血充滿腥羶色,記者文字水準差勁,固定的用語就那幾個還經常打錯字。

業內的記者,也有許多人感到不滿而離開,常有批評現在的新聞充斥業配文,看一份報紙都不知道是廣告多還是報導比較多。

這些批評我幾乎都認同,大多數新聞媒體的運作方式就是如此,同時很多人嘗試找出解方。我並沒那麼厲害,我也想不到有什麼方法。(真有方法我就賣器官籌錢來投資了!)。只是想整理一下自己對新聞業面臨的困境的想法。底下的內容已經有很多人在各個地方提過了,只是把我所知道的整理起來而已。

我並不認為新聞業現在的問題跟道德有關,只是單純的錢的問題,或說原本的商業模式被網路摧毀了。而新聞的表現水準江河日下,只是結果而已。