<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chris Pennington</title>
    <description>The latest articles on DEV Community by Chris Pennington (@chris-pennington).</description>
    <link>https://dev.to/chris-pennington</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1176331%2F4afc192d-6647-4495-bfe6-24c08e38930c.jpg</url>
      <title>DEV Community: Chris Pennington</title>
      <link>https://dev.to/chris-pennington</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chris-pennington"/>
    <language>en</language>
    <item>
      <title>OpenAI Whisper: Transcribe in the Terminal for free</title>
      <dc:creator>Chris Pennington</dc:creator>
      <pubDate>Tue, 10 Oct 2023 16:34:07 +0000</pubDate>
      <link>https://dev.to/chris-pennington/how-i-use-ai-to-transcribe-in-my-terminal-4n0d</link>
      <guid>https://dev.to/chris-pennington/how-i-use-ai-to-transcribe-in-my-terminal-4n0d</guid>
      <description>&lt;p&gt;Journaling can be beneficial for a lot of reasons—memory recall, processing, mental health, and more! &lt;/p&gt;

&lt;p&gt;I’ve always aspired to be a “journaler,” but as a dev, I had a few preferences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Audio input:&lt;/strong&gt; I process better by talking and it's faster, so my preference is audio-first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text output:&lt;/strong&gt; I am never going to listen to audio of myself talking, so I need to transcribe the audio to text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital storage:&lt;/strong&gt; easy of entry, mobility, option to search, and backups—need I say more? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prefer a video version?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xDKAX2_pul0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem and How to Fix it
&lt;/h2&gt;

&lt;p&gt;I started using the built-in dictation on my computer, but found I spent all my time fixing errors—I just couldn’t help myself! &lt;/p&gt;

&lt;p&gt;Recently, I ran across Whisper AI—a free machine-learning transcription tool built by Open AI. Play with AI and spend 6 hours automating?!👋 Sign me up! &lt;/p&gt;

&lt;p&gt;In this article, I’ll show you how to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Record&lt;/strong&gt; audio IN YOUR TERMINAL(!).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transcribe&lt;/strong&gt; it as a journal entry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup&lt;/strong&gt; the entry by pushing it to Github.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s the ultimate nerd journaling experience. And it's free.&lt;/p&gt;

&lt;p&gt;(And for macOS users, we’ll set up a native macOS notification to confirm the journal entry.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Record Audio
&lt;/h2&gt;

&lt;p&gt;To get started, we’ll need to install &lt;a href="https://ffmpeg.org/" rel="noopener noreferrer"&gt;FFmpeg&lt;/a&gt;, the all-in-one tool for working with audio and video. We’ll use it to record audio and Whisper AI will use it to create a transcription.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install ffmpeg
&lt;/h3&gt;

&lt;p&gt;While you can install it in many ways, the easiest is using a package manager like &lt;a href="https://brew.sh" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt; for macOS or &lt;a href="https://chocolatey.org/" rel="noopener noreferrer"&gt;chocolatey&lt;/a&gt; for Windows. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Homebrew&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;brew install ffmpeg&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chocolatey&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;choco install ffmpeg&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You’ll need brew (for macOS) or cholcolatey (for Windows) before using these commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Locate your inputs
&lt;/h3&gt;

&lt;p&gt;FFmpeg can list all inputs on your machine. Since it uses local tools based on your operating system, you’ll need to enter the right command for your machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; avfoundation &lt;span class="nt"&gt;-list_devices&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; dshow &lt;span class="nt"&gt;-list_devices&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; dummy


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; alsa &lt;span class="nt"&gt;-list_devices&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The commands above will return a list of inputs—both video and audio. Make note of the output, noting the exact name of the audio input you need.&lt;/p&gt;

&lt;p&gt;With this output, I’ll choose “MacBook Pro Microphone”: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

AVFoundation audio devices:
&lt;span class="o"&gt;[&lt;/span&gt;AVFoundation indev @ 0x14b004460] &lt;span class="o"&gt;[&lt;/span&gt;0] MacBook Pro Microphone
&lt;span class="o"&gt;[&lt;/span&gt;AVFoundation indev @ 0x14b004460] &lt;span class="o"&gt;[&lt;/span&gt;2] Chris phone Microphone


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Record audio
&lt;/h3&gt;

&lt;p&gt;With the name of your desired input, you can tell FFmpeg to record audio. We’ll add a few other nice-to-haves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Timing:&lt;/strong&gt; The &lt;code&gt;-t&lt;/code&gt; flag sets a predetermined number of seconds to record. I’ll set mine to &lt;code&gt;60&lt;/code&gt; to record a minute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File name:&lt;/strong&gt; You can set an output filename based on today’s date with &lt;code&gt;$(date +'%Y%m%d').mp3&lt;/code&gt; to produces an mp3 entitled YYYYmmdd.mp3 (i.e., based on the day of the recording).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Location:&lt;/strong&gt; Set the full file path for the output to make the command executable from any directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s what we have so far: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; avfoundation &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;":MacBook Pro Microphone"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 60 &lt;span class="s2"&gt;"/Users/chris.pennington/journal/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%Y%m%d'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; dshow &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;":Windows Microphone"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 60 &lt;span class="s2"&gt;"/Users/chris.pennington/journal/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%Y%m%d'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; alsa &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;":Linux Microphone"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 60 &lt;span class="s2"&gt;"/Users/chris.pennington/journal/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%Y%m%d'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Step 2: Transcribe
&lt;/h2&gt;

&lt;p&gt;You’ve got an audio recording, so now it’s time to transcribe it. &lt;/p&gt;
&lt;h3&gt;
  
  
  Install Whisper AI
&lt;/h3&gt;

&lt;p&gt;The magic tool here is the Whisper AI Python library, so you’ll need three items:&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Install Python 3.8–3.11
&lt;/h4&gt;

&lt;p&gt;You can check your version of python with &lt;code&gt;python3 -V&lt;/code&gt;. If you don’t have it, or you don’t have 3.8–3.11, head to &lt;a href="https://python.org" rel="noopener noreferrer"&gt;python.org&lt;/a&gt; and download the latest 3.11 version.&lt;/p&gt;

&lt;p&gt;Once it downloads, install Python like any other program on your machine. Both Windows and macOS require an extra step: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows:&lt;/strong&gt; If you’re on Windows, make sure you check "Add Python.exe to PATH" during the installation process. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS:&lt;/strong&gt; For On macOS, you’ll also need to install the security commands for Python to allow secure network requests. Finder should open automatically, showing the files associated with Python on your machine. Drag the &lt;strong&gt;Install Certificates&lt;/strong&gt; file to your terminal and press Return to run the install command.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  2. Install pip
&lt;/h4&gt;

&lt;p&gt;You’ll also need pip, the package manager for Python, as we’ll use it to install Whisper AI. &lt;/p&gt;

&lt;p&gt;It should come installed with Python, but you can double-check with &lt;code&gt;python3 -m pip --version&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;If you don’t have pip, run this command to install it: &lt;br&gt;
&lt;code&gt;python3 -m pip install --upgrade pip&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Install Whisper AI
&lt;/h4&gt;

&lt;p&gt;Finally, the magic sauce, &lt;a href="https://github.com/openai/whisper" rel="noopener noreferrer"&gt;Whisper AI&lt;/a&gt;. This command installs both Whisper AI and the dependencies it needs to run. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install -U openai-whisper&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Transcribe your audio
&lt;/h3&gt;

&lt;p&gt;Whisper makes audio transcription a breeze. Type &lt;code&gt;whisper&lt;/code&gt; and the file name to transcribe the audio into several formats automatically. That’s it! &lt;/p&gt;

&lt;p&gt;You can, however, provide more instructions to Whisper AI. Here are a few I’ll add: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; By default, Whisper detects your language, but you can provide it with the &lt;code&gt;--language&lt;/code&gt; flag (dozens are supported!).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Whisper offers &lt;a href="https://github.com/openai/whisper#available-models-and-languages" rel="noopener noreferrer"&gt;several levels of transcription quality&lt;/a&gt;. By default, it uses the small model, but you can get slightly better (although slower) results with the &lt;code&gt;--model medium&lt;/code&gt; flag (for English speakers, I’d recommend &lt;code&gt;--model medium.en&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File type:&lt;/strong&gt; While Whisper can output several file types (e.g., srt, json, etc.), for journaling, I’ll want a txt file, so I’ll add the &lt;code&gt;--outout_format txt&lt;/code&gt; flag.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s the end result: &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

whisper &lt;span class="s2"&gt;"/Users/chris.pennington/journal/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%Y%m%d'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt; &lt;span class="nt"&gt;--model&lt;/span&gt; medium.en &lt;span class="nt"&gt;--language&lt;/span&gt; English &lt;span class="nt"&gt;--output_format&lt;/span&gt; txt


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; My MacBook Pro does cannot perform inference, so I also add the &lt;code&gt;--fp16 FALSE&lt;/code&gt; flag to save Whisper AI the trouble of attempting inference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Putting it together
&lt;/h3&gt;

&lt;p&gt;The full command will 1) record audio, 2) transcribe the audio, and 3) then delete the audio file. Since all three commands use the same file path, we can extract it into its own variable and reference it in each command to clean up the code slightly.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;AUDIO_FILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/Users/chris.pennington/journal/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%Y%m%d'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt;

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; avfoundation &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;":MacBook Pro Microphone"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 60 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$AUDIO_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

whisper &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$AUDIO_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--model&lt;/span&gt; medium.en &lt;span class="nt"&gt;--language&lt;/span&gt; English &lt;span class="nt"&gt;--fp16&lt;/span&gt; False &lt;span class="nt"&gt;--output_format&lt;/span&gt; txt

&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$AUDIO_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Remember to alter the first command for FFmpeg if you are on a Windows or Linux machine.&lt;/p&gt;

&lt;p&gt;Unless you want to type this every day, I’d recommend creating an alias. In my case, I’m using &lt;a href="https://warp.dev" rel="noopener noreferrer"&gt;Warp&lt;/a&gt;, so I’ll right-click the command and choose &lt;strong&gt;Save as Workflow&lt;/strong&gt; to save my script as a workflow. Warp AI will even help me autofill the title and description and detect variables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v8b0mespo9k3ihr5vbx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v8b0mespo9k3ihr5vbx.png" alt="Workflow in Warp with title, description, and parameters filled out"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can alternatively add an alias for your shell pointing to this shell script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Backup to GitHub
&lt;/h2&gt;

&lt;p&gt;Next, let’s push these files to a repository online automatically to save your journal. Create a local repo (&lt;code&gt;git init&lt;/code&gt;) and commit the current files.&lt;/p&gt;

&lt;p&gt;Next, create a remote and push the files. &lt;/p&gt;

&lt;p&gt;Then append the following to your script.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git add &lt;span class="nt"&gt;-A&lt;/span&gt;

git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%Y%m%d'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; journal entry"&lt;/span&gt;

git push


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Step 4: macOS Notification
&lt;/h2&gt;

&lt;p&gt;On macOS, you can show a notification using AppleScript. I’ll add the following at the end of my script: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;osascript -e 'display notification "Transcription Complete!" with title "Whisper AI"'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flb2j71k1q5n7g2icbvt0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flb2j71k1q5n7g2icbvt0.jpg" alt="macOS notification showing transcription complete"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Final Code
&lt;/h2&gt;

&lt;p&gt;Here’s my final code on macOS. Since I’ve set up a repository, I’ll need to &lt;code&gt;cd&lt;/code&gt; into the directory to commit, so I’ll alter the script to start by moving to the right directory. Remember to change the audio recording command if you are on Windows or Linux machines.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;TODAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%Y%m%d'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; /Users/chris.pennington/journal

ffmpeg &lt;span class="nt"&gt;-f&lt;/span&gt; avfoundation &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;":MacBook Pro Microphone"&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; 60 &lt;span class="s2"&gt;"./&lt;/span&gt;&lt;span class="nv"&gt;$TODAY&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt;

whisper &lt;span class="s2"&gt;"./&lt;/span&gt;&lt;span class="nv"&gt;$TODAY&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt; &lt;span class="nt"&gt;--model&lt;/span&gt; medium.en &lt;span class="nt"&gt;--language&lt;/span&gt; English &lt;span class="nt"&gt;--output_format&lt;/span&gt; txt

&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="s2"&gt;"./&lt;/span&gt;&lt;span class="nv"&gt;$TODAY&lt;/span&gt;&lt;span class="s2"&gt;.mp3"&lt;/span&gt;

osascript &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'display notification "Transcription Complete!" with title "Whisper AI"'&lt;/span&gt;

git add &lt;span class="nt"&gt;-A&lt;/span&gt;

git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$TODAY&lt;/span&gt;&lt;span class="s2"&gt; journal entry"&lt;/span&gt;

git push


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>terminal</category>
      <category>python</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
