<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Geek on 只放拖鞋的鞋櫃</title><link>https://jchu.cc/categories/geek/</link><description>Recent content in Geek on 只放拖鞋的鞋櫃</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Tue, 07 Nov 2023 20:47:37 +0800</lastBuildDate><atom:link href="https://jchu.cc/categories/geek/index.xml" rel="self" type="application/rss+xml"/><item><title>Markdown 轉成 PDF 檔</title><link>https://jchu.cc/2023/11/07-pdf.html</link><pubDate>Tue, 07 Nov 2023 20:47:37 +0800</pubDate><guid>https://jchu.cc/2023/11/07-pdf.html</guid><description>&lt;p&gt;平常用 Markdown 格式寫文件，偶爾會需要輸出 PDF。在此紀錄我的簡易做法。&lt;/p&gt;</description></item><item><title>Git Subtree 簡單介紹</title><link>https://jchu.cc/2023/09/01-git-subtree.html</link><pubDate>Fri, 01 Sep 2023 22:27:27 +0800</pubDate><guid>https://jchu.cc/2023/09/01-git-subtree.html</guid><description>&lt;p&gt;簡單快速地理解 git subtree 是怎樣的東西&lt;/p&gt;</description></item><item><title>Spring Boot OAuth 如何使用 Mock Server</title><link>https://jchu.cc/2023/02/23-oauth.html</link><pubDate>Thu, 23 Feb 2023 18:25:11 +0800</pubDate><guid>https://jchu.cc/2023/02/23-oauth.html</guid><description>&lt;style&gt;
 .roast {
 font-size: 0.9rem;
 color: #888;
 }
&lt;/style&gt;
&lt;p&gt;開發 Web 服務時，使用者的登入與驗證一直都是重要的課題，其中 OAuth 也是常被討論的部分。雖然 OAuth 已經相當成熟，但是 Spring Boot 的文件裡，使用 OAuth 的相關資訊通常都比較零散。&lt;/p&gt;
&lt;p&gt;本文紀錄我學習 Spring Boot / Spring Security + OAuth 過程中的理解與心得&lt;/p&gt;</description></item><item><title>Spring Boot 2.5.6 to 3.0.2 migration 筆記</title><link>https://jchu.cc/2023/02/21-post.html</link><pubDate>Tue, 21 Feb 2023 23:56:50 +0800</pubDate><guid>https://jchu.cc/2023/02/21-post.html</guid><description>&lt;p&gt;正在練習把玩的 Spring Boot 用的是 2.5.6，剛剛升級到 3.0.2，這邊隨手記錄必須的改動&lt;/p&gt;</description></item><item><title>Kotlin 雙冒號 ::someMethod 的觀察</title><link>https://jchu.cc/2022/09/03-kotlin.html</link><pubDate>Sat, 03 Sep 2022 23:09:44 +0800</pubDate><guid>https://jchu.cc/2022/09/03-kotlin.html</guid><description>&lt;p&gt;寫 kotlin 的時候經常會看到 &lt;code&gt;::myMethod&lt;/code&gt; 的出現，本文觀察編譯器的結果去猜測可能的過程。並非真正地去閱讀規格或源碼。若有寫不正確的地方，還請鄉親指正&lt;/p&gt;</description></item><item><title>Android 的 View.canScrollVertically 的誤讀</title><link>https://jchu.cc/2022/08/24-android_scroll.html</link><pubDate>Wed, 24 Aug 2022 21:54:19 +0800</pubDate><guid>https://jchu.cc/2022/08/24-android_scroll.html</guid><description>&lt;p&gt;在 Android 官方文件裡面有個 &lt;code&gt;View.canScrollVertically&lt;/code&gt;，起初我認為這個 API 文件寫錯了，後來再看了更多文件，才覺得是我的誤會。&lt;/p&gt;</description></item><item><title>在本機上存取 Android 的 sqlite 檔案</title><link>https://jchu.cc/2022/04/17-sqlite.html</link><pubDate>Sun, 17 Apr 2022 21:14:04 +0800</pubDate><guid>https://jchu.cc/2022/04/17-sqlite.html</guid><description>&lt;p&gt;之前紀錄過一篇怎麼在 Android Studio 裡面用 SQLScout 的 Plugin 存取 sqlite database&lt;/p&gt;
&lt;p&gt;其實用指令把 sqlite db 抓到本機端測試也一樣&lt;/p&gt;</description></item><item><title>kotlinx-coroutines-test migrate to 1.6 紀錄</title><link>https://jchu.cc/2022/03/30-coroutine-migration.html</link><pubDate>Wed, 30 Mar 2022 21:07:18 +0800</pubDate><guid>https://jchu.cc/2022/03/30-coroutine-migration.html</guid><description>&lt;p&gt;之前因為工作的需要，把 kotlin 從 &lt;code&gt;1.5.2&lt;/code&gt; 升級到 &lt;code&gt;1.6.0&lt;/code&gt;，同時修了許多 unit test 相關的問題，在這邊紀錄一下過程，給需要幫助的朋友。&lt;/p&gt;</description></item><item><title>ActivityPub 簡單介紹</title><link>https://jchu.cc/2021/07/27-activitypub.html</link><pubDate>Tue, 27 Jul 2021 20:43:59 +0800</pubDate><guid>https://jchu.cc/2021/07/27-activitypub.html</guid><description>&lt;p&gt;&lt;a href="devpoga.org"&gt;Poga&lt;/a&gt; 架了 &lt;a href="https://g0v.social/"&gt;g0v.social&lt;/a&gt; 之後就有在用。雖然分散式的版本處理系統 git 用了很久，但是一直想不透去中心化的社交網站是怎麼運作。也是大概等到 Trump 的 Twitter 帳號被封，大家開始討論科技巨頭握有太多權力，我才想起來要好好看一下 Mastodon 的 Spec。&lt;/p&gt;
&lt;p&gt;不過我看完之後還是矇矇懂懂，所以請不要對這篇有什麼期待，哈。&lt;/p&gt;</description></item><item><title>離線閱讀 Android Doc</title><link>https://jchu.cc/2020/12/10-android-doc.html</link><pubDate>Thu, 10 Dec 2020 21:53:39 +0800</pubDate><guid>https://jchu.cc/2020/12/10-android-doc.html</guid><description>&lt;p&gt;寫 Android 的程式總是要時時閱讀本草綱目(API documentation)，才會確定應該呼叫哪個 API，就我所知某些人的做法是在 Android Studio 裡面直接看程式碼，不過我還是比較喜歡看精美的 HTML 檔案&lt;/p&gt;
&lt;p&gt;雖然很多人是看 online 的版本，不過我從大學時期養成的習慣，還是比較喜歡下載一份 offline 的版本，自己開瀏覽器閱讀。只是這件事情在 Android 上面愈來愈難做到了&amp;hellip;&lt;/p&gt;</description></item><item><title>用 Python 轉換 markdown 至 html</title><link>https://jchu.cc/2020/11/20-markdown.html</link><pubDate>Fri, 20 Nov 2020 23:02:01 +0800</pubDate><guid>https://jchu.cc/2020/11/20-markdown.html</guid><description>&lt;p&gt;我經常使用 markdown 格式做紀錄，包括我自己的 local &lt;a href="http://walkingice.blogspot.com/2011/11/gitit-git-based-wiki.html"&gt;gitit&lt;/a&gt; 或是這個 Blog。&lt;/p&gt;
&lt;p&gt;除了紀錄之外，有時候需要將 Markdown 格式的文件轉成其他格式的檔案來閱讀。&lt;/p&gt;</description></item><item><title>Gralde build error</title><link>https://jchu.cc/2020/10/30-gradle.html</link><pubDate>Fri, 30 Oct 2020 16:34:37 +0800</pubDate><guid>https://jchu.cc/2020/10/30-gradle.html</guid><description>&lt;p&gt;在 Android 的 app moudle 裡面，嘗試把一些獨立的類別搬到新增加的一個 library module 的時候，遇到了類似這樣的錯誤&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt; The consumer was configured to find an API of a component, as well as attribute &amp;#39;com.android.build.api.attributes.BuildTypeAttr&amp;#39; with value &amp;#39;debug&amp;#39;, attribute &amp;#39;org.jetbrains.kotlin.platform.type&amp;#39; with value &amp;#39;androidJvm&amp;#39;. However we cannot choose between the following variants of project :common-libs:&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Android Studio 觀察 Sqlite Database</title><link>https://jchu.cc/2020/09/02-sqlscout.html</link><pubDate>Wed, 02 Sep 2020 22:03:07 +0800</pubDate><guid>https://jchu.cc/2020/09/02-sqlscout.html</guid><description>&lt;p&gt;最近在改一個 open source 記帳 App，其實也只是隨便亂改一通，讓它的 UI 看得順眼且堪用而已。修改的過程中需要查詢 App 裡面用到的 SQLite db，所以搜尋到一個 SQLScout 的 IDEA IDE Plugin，覺得滿好用，順手紀錄一下用法。&lt;/p&gt;</description></item><item><title>實作 Google Authenticator 的兩階段驗證</title><link>https://jchu.cc/2020/08/16-twofactor.html</link><pubDate>Sun, 16 Aug 2020 02:22:34 +0800</pubDate><guid>https://jchu.cc/2020/08/16-twofactor.html</guid><description>&lt;p&gt;之前聽到 Tim 說 PTT 的現有的登入方式不改的話很沒救，我想到兩階段驗證的方法，所以好奇研究了一下該怎麼做。實際上看了才知道比想像中簡單，PTT 有意願的話，實作難度真的不高。&lt;/p&gt;
&lt;p&gt;Google Authenticator (後面簡稱 GA)是常見的兩階段驗證(2FA)會用到的程式，好比 GitHub 或是 Facebook 的兩階段驗證都能用這隻程式取得驗證碼。如果你的網站服務想要利用 2FA 增加安全性，利用 GA 可以算是非常便宜的方案 - 不需要自己寫 client App，只要自己的網站加上一些簡單的流程與演算法就能取得 2FA 的優點。&lt;/p&gt;
&lt;p&gt;本文簡介如何實作，並且附上驗證的程式。&lt;/p&gt;</description></item><item><title>Kotlin coroutine 基礎筆記</title><link>https://jchu.cc/2020/03/22-coroutine.html</link><pubDate>Sun, 22 Mar 2020 21:59:50 +0800</pubDate><guid>https://jchu.cc/2020/03/22-coroutine.html</guid><description>&lt;p&gt;Coroutine 算是 Kotlin 裡面相當引人注目的功能，簡單來說就是可以幫助處理非同步需求的機制。&lt;/p&gt;
&lt;p&gt;舉例來說，我們常常看到這樣的需求：按下一個 Fetch 的按鈕，去抓網路上的某個列表來更新手機內的資料，同時又不希望 UI thread 被卡住。在 Android 上面經常就是祭出 AsyncTask，或是用 Rx 的方式來處理。利用 Coroutine，這些功能都會變得比較簡單實作&lt;/p&gt;</description></item><item><title>在 Debian 上 dm-crypt 的緊急救援</title><link>https://jchu.cc/2018/09/15-dm-crypt.html</link><pubDate>Sat, 15 Sep 2018 17:26:15 +0800</pubDate><guid>https://jchu.cc/2018/09/15-dm-crypt.html</guid><description>&lt;p&gt;這兩年來工作的主力機是 MacBook Pro，原本的 x220 比較少出動，系統的 debian testing 也因此許久沒更新。&lt;/p&gt;
&lt;p&gt;前幾天拿出來用 aptitude 升級套件的時候，因為衝突與相依數量太多，一度讓 aptitude 不會動。同時自己又不知道在哪個地方犯了傻，有些套件只更新到一半就重開機，結果掛載家目錄的時候失敗，一直無法開機，連 tty 都沒拿到。&lt;/p&gt;
&lt;p&gt;所幸只是小問題，以下紀錄過程，希望能給類似的苦主一點幫助。&lt;/p&gt;</description></item><item><title>測試中常見的名詞：Stub, Dummy, Mock..等等</title><link>https://jchu.cc/2018/08/16-test.html</link><pubDate>Thu, 16 Aug 2018 17:05:54 +0800</pubDate><guid>https://jchu.cc/2018/08/16-test.html</guid><description>&lt;p&gt;開發的過程要寫程式，寫程式我們都知道要寫測試，寫測試的時候經常看見 Stub, Dummy, Mock 等等這些名詞。使用 Testing Framework 的時候，更是經常使用到看起來功能類似，不同名稱的物件。稍微理解這些名詞的概念，使用測試框架的時候會有點幫助。&lt;/p&gt;</description></item><item><title>Kotlin 的 scope function: apply, let, run..等等</title><link>https://jchu.cc/2018/05/05-kotlin.html</link><pubDate>Sat, 05 May 2018 10:51:57 +0800</pubDate><guid>https://jchu.cc/2018/05/05-kotlin.html</guid><description>&lt;p&gt;先講結論：這些 functions 目的是希望，執行程式碼裡面的 function literal 的時候有更好的可讀性。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;code&gt;Function&lt;/code&gt;&lt;/th&gt;
					&lt;th style="text-align: center"&gt;&lt;code&gt;identifier&lt;/code&gt;&lt;/th&gt;
					&lt;th style="text-align: center"&gt;&lt;code&gt;return value&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;let&lt;/td&gt;
					&lt;td style="text-align: center"&gt;it&lt;/td&gt;
					&lt;td style="text-align: center"&gt;last line of literal&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;run&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
					&lt;td style="text-align: center"&gt;last line of literal&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;also&lt;/td&gt;
					&lt;td style="text-align: center"&gt;it&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;apply&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;i&gt;&lt;span style="color:#FF0000"&gt;Let it&lt;/span&gt; &lt;span style="color:#FF8888"&gt;Run this&lt;/span&gt; literal&lt;/i&gt;, &lt;span style="color:#0000FF"&gt;it Also&lt;/span&gt; &lt;span style="color:#8888FF"&gt;Apply this&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;這是我背誦記憶的口訣：&lt;strong&gt;Let 用 it，Run 用 this，都是回傳 function literal 最後一行的值。Also 用 it，Apply 用 this，都是回傳 this&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Change directory helper function</title><link>https://jchu.cc/2018/03/13-cd.html</link><pubDate>Tue, 13 Mar 2018 21:56:26 +0800</pubDate><guid>https://jchu.cc/2018/03/13-cd.html</guid><description>&lt;p&gt;This function might be the most useful one in my own scripts, and I had introduced it for several times.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say you are working in a big project such as Android Framework, or your are a command-line heavy user. The change-directory-command, &lt;code&gt;cd&lt;/code&gt;, would be typed thounsands times per day. THAT IS SO ANNOYING!.&lt;/p&gt;
&lt;p&gt;Try adding this function to &lt;em&gt;~/.bashrc&lt;/em&gt;&lt;/p&gt;</description></item><item><title>使用 ffmpeg 編輯影片</title><link>https://jchu.cc/2018/02/27-ffmpeg.html</link><pubDate>Tue, 27 Feb 2018 23:25:41 +0800</pubDate><guid>https://jchu.cc/2018/02/27-ffmpeg.html</guid><description>&lt;p&gt;長話短說，可以用 ffmpeg 做到一些簡單的影片編輯功能，好比說&lt;/p&gt;
&lt;p&gt;把 input.mp4 裡面 00:24:32 到 00:29:34 這段時間的影像擷取出來&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i input.mp4 -ss 00:24:32 -to 00:29:34 -threads &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; -y clip001.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;從一張圖片產生一個長度 15 秒的影片，同時把尺寸轉為 1280x720&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -loop &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; -i image.png -t &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt; -vf scale&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1280:720 -pix_fmt yuv420p -y image.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;將一個完全沒有音軌的影片，塞入 15 秒的無聲音軌，指定頻率為 48000 Hz。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -f lavfi -i anullsrc&lt;span style="color:#f92672"&gt;=&lt;/span&gt;r&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;48000&lt;/span&gt; -i image.mp4 -t &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt; -c:v copy -c:a aac -y silent.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;接著把幾個 mp4 檔接成一個檔案，先把它們都轉成 ts 檔，最後再接回 mp4 檔&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i clip0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip0.ts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i clip1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip1.ts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i clip2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip2.ts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i &lt;span style="color:#e6db74"&gt;&amp;#34;concat:clip0.ts|clip1.ts|clip2.ts&amp;#34;&lt;/span&gt; -c copy -bsf:a aac_adtstoasc -y output.mp4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ rm clip0.ts clip1.ts clip2.ts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>