641 lines
21 KiB
HTML
641 lines
21 KiB
HTML
<!doctype html>
|
||
<!--
|
||
Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose
|
||
Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
|
||
Free for personal and commercial use under the MIT license
|
||
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
|
||
-->
|
||
<html lang="en" class="no-js">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
|
||
<!-- begin _includes/seo.html --><title>Using ffmpeg for Simple Video Editing - Şahin Akkaya’s Personal Page</title>
|
||
<meta name="description" content="Story Today, I have recorded a video for one of my classes and I was required to upload it till midnight. The video was perfect except for a few seconds where I misspelled some words and started again. I had to remove that part from the video before uploading it. Since I was low on time, I thought that I better use a GUI program to do this job. I opened up Kdenlive and jumped into editing my video. It was my first time using it so I spent some time to cut and delete the parts that I want to get rid of. When I was ready, I clicked Render button to render my video. It was waaay too slow than I expected. Since I have nothing to do while waiting for render to finish, I thought I could give ffmpeg a shot.">
|
||
|
||
|
||
<meta name="author" content="Şahin Akkaya">
|
||
|
||
<meta property="article:author" content="Şahin Akkaya">
|
||
|
||
|
||
|
||
<meta property="og:type" content="article">
|
||
<meta property="og:locale" content="en_US">
|
||
<meta property="og:site_name" content="Şahin Akkaya's Personal Page">
|
||
<meta property="og:title" content="Using ffmpeg for Simple Video Editing">
|
||
<meta property="og:url" content="https://sahinakkaya.dev/2022/01/21/ffmpeg-to-rescue.html">
|
||
|
||
|
||
<meta property="og:description" content="Story Today, I have recorded a video for one of my classes and I was required to upload it till midnight. The video was perfect except for a few seconds where I misspelled some words and started again. I had to remove that part from the video before uploading it. Since I was low on time, I thought that I better use a GUI program to do this job. I opened up Kdenlive and jumped into editing my video. It was my first time using it so I spent some time to cut and delete the parts that I want to get rid of. When I was ready, I clicked Render button to render my video. It was waaay too slow than I expected. Since I have nothing to do while waiting for render to finish, I thought I could give ffmpeg a shot.">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<meta property="article:published_time" content="2022-01-21T20:40:00+00:00">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="canonical" href="https://sahinakkaya.dev/2022/01/21/ffmpeg-to-rescue.html">
|
||
|
||
|
||
|
||
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
|
||
"@type": "Person",
|
||
"name": null,
|
||
"url": "https://sahinakkaya.dev/"
|
||
|
||
}
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!-- end _includes/seo.html -->
|
||
|
||
|
||
|
||
<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Şahin Akkaya's Personal Page Feed">
|
||
|
||
|
||
<!-- https://t.co/dKP3o1e -->
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<script>
|
||
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
|
||
</script>
|
||
|
||
<!-- For all browsers -->
|
||
<link rel="stylesheet" href="/assets/css/main.css">
|
||
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css"></noscript>
|
||
|
||
|
||
|
||
<!-- start custom head snippets -->
|
||
|
||
<!-- insert favicons. use https://realfavicongenerator.net/ -->
|
||
|
||
<!-- end custom head snippets -->
|
||
|
||
</head>
|
||
|
||
<body class="layout--single">
|
||
<nav class="skip-links">
|
||
<ul>
|
||
<li><a href="#site-nav" class="screen-reader-shortcut">Skip to primary navigation</a></li>
|
||
<li><a href="#main" class="screen-reader-shortcut">Skip to content</a></li>
|
||
<li><a href="#footer" class="screen-reader-shortcut">Skip to footer</a></li>
|
||
</ul>
|
||
</nav>
|
||
|
||
<!--[if lt IE 9]>
|
||
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
|
||
<![endif]-->
|
||
|
||
|
||
|
||
<div class="masthead">
|
||
<div class="masthead__inner-wrap">
|
||
<div class="masthead__menu">
|
||
<nav id="site-nav" class="greedy-nav">
|
||
|
||
<a class="site-title" href="/">
|
||
/home/sahin/
|
||
|
||
</a>
|
||
<ul class="visible-links"><li class="masthead__menu-item">
|
||
<a href="/">Home</a>
|
||
</li><li class="masthead__menu-item">
|
||
<a href="/about/">About</a>
|
||
</li><li class="masthead__menu-item">
|
||
<a href="/contact/">Contact</a>
|
||
</li></ul>
|
||
|
||
<button class="search__toggle" type="button">
|
||
<span class="visually-hidden">Toggle search</span>
|
||
<i class="fas fa-search"></i>
|
||
</button>
|
||
|
||
<button class="greedy-nav__toggle hidden" type="button">
|
||
<span class="visually-hidden">Toggle menu</span>
|
||
<div class="navicon"></div>
|
||
</button>
|
||
<ul class="hidden-links hidden"></ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="initial-content">
|
||
|
||
|
||
|
||
|
||
<div id="main" role="main">
|
||
|
||
<div class="sidebar sticky">
|
||
|
||
|
||
|
||
<div itemscope itemtype="https://schema.org/Person">
|
||
|
||
|
||
<div class="author__avatar">
|
||
|
||
<img src="/assets/images/logo.jpg" alt="Şahin Akkaya" itemprop="image">
|
||
|
||
</div>
|
||
|
||
|
||
<div class="author__content">
|
||
|
||
<h3 class="author__name" itemprop="name">Şahin Akkaya</h3>
|
||
|
||
|
||
<div class="author__bio" itemprop="description">
|
||
<p>A perfectionist who likes to tinker everything until it is just right.</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="author__urls-wrapper">
|
||
<button class="btn btn--inverse">Follow</button>
|
||
<ul class="author__urls social-icons">
|
||
|
||
<li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
|
||
<i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name">Istanbul, Turkey</span>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="https://github.com/sahinakkayadev" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">sahinakkayadev</span></a></li>
|
||
|
||
|
||
|
||
<li><a href="https://stackoverflow.com/users/9608759" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i><span class="label">Asocia</span></a></li>
|
||
|
||
|
||
|
||
<li><a href="https://twitter.com/sahinakkayadev" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i><span class="label">@sahinakkayadev</span></a></li>
|
||
|
||
|
||
|
||
<li><a href="mailto:sahin@sahinakkaya.dev" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-envelope" aria-hidden="true"></i><span class="label">sahin@sahinakkaya.dev</span></a></li>
|
||
|
||
|
||
|
||
<li><a href="/assets/docs/resume.pdf" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-id-card" aria-hidden="true"></i><span class="label">Resume</span></a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<!--
|
||
<li>
|
||
<a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||
<i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
|
||
</a>
|
||
</li>
|
||
-->
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<article class="page" itemscope itemtype="https://schema.org/CreativeWork">
|
||
<meta itemprop="headline" content="Using ffmpeg for Simple Video Editing">
|
||
<meta itemprop="description" content="StoryToday, I have recorded a video for one of my classes and I was required to upload it till midnight. The video was perfect except for a few seconds where I misspelled some words and started again. I had to remove that part from the video before uploading it. Since I was low on time, I thought that I better use a GUI program to do this job. I opened up Kdenlive and jumped into editing my video. It was my first time using it so I spent some time to cut and delete the parts that I want to get rid of. When I was ready, I clicked Render button to render my video. It was waaay too slow than I expected. Since I have nothing to do while waiting for render to finish, I thought I could give ffmpeg a shot.">
|
||
<meta itemprop="datePublished" content="2022-01-21T20:40:00+00:00">
|
||
|
||
|
||
<div class="page__inner-wrap">
|
||
|
||
<header>
|
||
<h1 id="page-title" class="page__title" itemprop="headline">Using ffmpeg for Simple Video Editing
|
||
</h1>
|
||
|
||
|
||
<p class="page__meta">
|
||
|
||
|
||
<span class="page__meta-date">
|
||
<i class="far fa-calendar-alt" aria-hidden="true"></i>
|
||
|
||
<time datetime="2022-01-21T20:40:00+00:00">January 21, 2022</time>
|
||
</span>
|
||
|
||
|
||
<span class="page__meta-sep"></span>
|
||
|
||
|
||
|
||
|
||
|
||
<span class="page__meta-readtime">
|
||
<i class="far fa-clock" aria-hidden="true"></i>
|
||
|
||
1 minute read
|
||
|
||
</span>
|
||
|
||
</p>
|
||
|
||
|
||
</header>
|
||
|
||
|
||
<section class="page__content" itemprop="text">
|
||
|
||
<h2 id="story">Story</h2>
|
||
<p>Today, I have recorded a video for one of my classes and I was required to upload it till midnight. The video was perfect except for a few seconds where I misspelled some words and started again. I had to remove that part from the video before uploading it. Since I was low on time, I thought that I better use a GUI program to do this job. I opened up <a href="https://kdenlive.org/en/">Kdenlive</a> and jumped into editing my video. It was my first time using it so I spent some time to cut and delete the parts that I want to get rid of. When I was ready, I clicked Render button to render my video. It was waaay too slow than I expected. Since I have nothing to do while waiting for render to finish, I thought I could give <code class="language-plaintext highlighter-rouge">ffmpeg</code> a shot.</p>
|
||
|
||
<h2 id="let-the-show-begin">Let the show begin</h2>
|
||
<p>Like Kdenlive, I have never used <code class="language-plaintext highlighter-rouge">ffmpeg</code> before. Like every normal Linux user do, I opened up a terminal and typed <code class="language-plaintext highlighter-rouge">man ffmpeg</code> to learn how to use it… Just kidding :D I opened a browser and typed <em>“ffmpeg cut video by time”</em>. Not the best search query, but it was good enough to find what I am looking for as the <a href="https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg">first result</a>.</p>
|
||
|
||
<h3 id="cutting-the-videos-based-on-start-and-end-time">Cutting the videos based on start and end time</h3>
|
||
<p>According to answers on the page I mentioned, I run the following commands to cut my video into two parts:</p>
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ffmpeg <span class="nt">-ss</span> 00:00:00 <span class="nt">-to</span> 00:01:55 <span class="nt">-i</span> input.mov <span class="nt">-c</span> copy part1.mp4 <span class="c"># take from 00:00 to 01:55</span>
|
||
ffmpeg <span class="nt">-ss</span> 00:02:03 <span class="nt">-to</span> 00:05:17 <span class="nt">-i</span> input.mov <span class="nt">-c</span> copy part2.mp4 <span class="c"># take from 02:03 to 05:17</span>
|
||
</code></pre></div></div>
|
||
|
||
<p>These two commands run <strong>instantly</strong>! Kdenlive was still rendering… The progress was 46%. Meh… I said “Duck it, I am gonna use ffmpeg only” and cancelled the rendering.</p>
|
||
|
||
<h3 id="concatenating-the-video-files">Concatenating the video files</h3>
|
||
<p>Now we have two videos that we want to join. Guess what will be our next search query? <em>“ffmpeg join videos”</em>. And <a href="https://stackoverflow.com/questions/7333232/how-to-concatenate-two-mp4-files-using-ffmpeg">here</a> is the first result:</p>
|
||
|
||
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo </span>file part1.mp4 <span class="o">>></span> mylist.txt
|
||
<span class="nb">echo </span>file part2.mp4 <span class="o">>></span> mylist.txt
|
||
ffmpeg <span class="nt">-f</span> concat <span class="nt">-i</span> mylist.txt <span class="nt">-c</span> copy result.mp4
|
||
</code></pre></div></div>
|
||
|
||
<p>And we are DONE! How easy was that? Whole process took about 10 minutes including my search on the internet. If I continued waiting for Kdenlive to finish rendering, I would probably be still waiting at that time. I love the power of command line!</p>
|
||
|
||
|
||
</section>
|
||
|
||
<footer class="page__meta">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> Updated:</strong> <time datetime="2022-01-21T20:40:00+00:00">January 21, 2022</time></p>
|
||
|
||
|
||
</footer>
|
||
|
||
<section class="page__share">
|
||
|
||
|
||
<a href="https://twitter.com/intent/tweet?text=Using+ffmpeg+for+Simple+Video+Editing%20https%3A%2F%2Fsahinakkaya.dev%2F2022%2F01%2F21%2Fffmpeg-to-rescue.html" class="btn btn--twitter" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="Share on Twitter"><i class="fab fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
|
||
|
||
<a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fsahinakkaya.dev%2F2022%2F01%2F21%2Fffmpeg-to-rescue.html" class="btn btn--facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="Share on Facebook"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
|
||
|
||
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fsahinakkaya.dev%2F2022%2F01%2F21%2Fffmpeg-to-rescue.html" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="Share on LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
|
||
</section>
|
||
|
||
|
||
|
||
<nav class="pagination">
|
||
|
||
<a href="/2022/01/04/build-and-deploy-automatically.html" class="pagination--pager" title="Automatically Build and Deploy Your Site using GitHub Actions and Webhooks
|
||
">Previous</a>
|
||
|
||
|
||
<a href="/2022/02/26/ssh-into-machine-that-is-behind-private-network.html" class="pagination--pager" title="SSH into Machine That Is Behind a Private Network
|
||
">Next</a>
|
||
|
||
</nav>
|
||
|
||
</div>
|
||
|
||
|
||
</article>
|
||
|
||
|
||
|
||
<div class="page__related">
|
||
<h4 class="page__related-title">You May Also Enjoy</h4>
|
||
<div class="grid__wrapper">
|
||
|
||
|
||
|
||
|
||
|
||
<div class="grid__item">
|
||
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||
|
||
<h2 class="archive__item-title no_toc" itemprop="headline">
|
||
|
||
<a href="/2022/12/29/recap-of-2022.html" rel="permalink">Recap of 2022
|
||
</a>
|
||
|
||
</h2>
|
||
|
||
|
||
<p class="page__meta">
|
||
|
||
|
||
<span class="page__meta-date">
|
||
<i class="far fa-fw fa-calendar-alt" aria-hidden="true"></i>
|
||
|
||
<time datetime="2022-12-29T20:22:08+00:00">December 29, 2022</time>
|
||
</span>
|
||
|
||
|
||
<span class="page__meta-sep"></span>
|
||
|
||
|
||
|
||
|
||
|
||
<span class="page__meta-readtime">
|
||
<i class="far fa-fw fa-clock" aria-hidden="true"></i>
|
||
|
||
1 minute read
|
||
|
||
</span>
|
||
|
||
</p>
|
||
|
||
|
||
<p class="archive__item-excerpt" itemprop="description">It’s been a while… It has been so long that I forgot how I was writing my blogs back then. My life didn’t change that much. Actually, it is getting worse.
|
||
</p>
|
||
</article>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="grid__item">
|
||
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||
|
||
<h2 class="archive__item-title no_toc" itemprop="headline">
|
||
|
||
<a href="/2022/06/22/rant-on-peoples-reaction-to-copilot.html" rel="permalink">Rant: Stop whatever you are doing and learn how licenses work
|
||
</a>
|
||
|
||
</h2>
|
||
|
||
|
||
<p class="page__meta">
|
||
|
||
|
||
<span class="page__meta-date">
|
||
<i class="far fa-fw fa-calendar-alt" aria-hidden="true"></i>
|
||
|
||
<time datetime="2022-06-22T07:46:00+00:00">June 22, 2022</time>
|
||
</span>
|
||
|
||
|
||
<span class="page__meta-sep"></span>
|
||
|
||
|
||
|
||
|
||
|
||
<span class="page__meta-readtime">
|
||
<i class="far fa-fw fa-clock" aria-hidden="true"></i>
|
||
|
||
2 minute read
|
||
|
||
</span>
|
||
|
||
</p>
|
||
|
||
|
||
<p class="archive__item-excerpt" itemprop="description">Recently, Github announced
|
||
that they are making Github Copilot available for everyone. Previously, it was in Beta and you could get it through the waiting l...</p>
|
||
</article>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="grid__item">
|
||
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||
|
||
<h2 class="archive__item-title no_toc" itemprop="headline">
|
||
|
||
<a href="/2022/04/08/confession-time.html" rel="permalink">Confession Time
|
||
</a>
|
||
|
||
</h2>
|
||
|
||
|
||
<p class="page__meta">
|
||
|
||
|
||
<span class="page__meta-date">
|
||
<i class="far fa-fw fa-calendar-alt" aria-hidden="true"></i>
|
||
|
||
<time datetime="2022-04-08T15:46:00+00:00">April 8, 2022</time>
|
||
</span>
|
||
|
||
|
||
<span class="page__meta-sep"></span>
|
||
|
||
|
||
|
||
|
||
|
||
<span class="page__meta-readtime">
|
||
<i class="far fa-fw fa-clock" aria-hidden="true"></i>
|
||
|
||
2 minute read
|
||
|
||
</span>
|
||
|
||
</p>
|
||
|
||
|
||
<p class="archive__item-excerpt" itemprop="description">A failure story
|
||
Last week, I received an email from Let’s Encrypt reminding me to renew my certificates. I forgot to renew it and the certificate expired. No...</p>
|
||
</article>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="grid__item">
|
||
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||
|
||
<h2 class="archive__item-title no_toc" itemprop="headline">
|
||
|
||
<a href="/2022/03/03/never-get-trapped-in-grub-rescue-again.html" rel="permalink">Never Get Trapped in Grub Rescue Again!
|
||
</a>
|
||
|
||
</h2>
|
||
|
||
|
||
<p class="page__meta">
|
||
|
||
|
||
<span class="page__meta-date">
|
||
<i class="far fa-fw fa-calendar-alt" aria-hidden="true"></i>
|
||
|
||
<time datetime="2022-03-03T00:46:00+00:00">March 3, 2022</time>
|
||
</span>
|
||
|
||
|
||
<span class="page__meta-sep"></span>
|
||
|
||
|
||
|
||
|
||
|
||
<span class="page__meta-readtime">
|
||
<i class="far fa-fw fa-clock" aria-hidden="true"></i>
|
||
|
||
4 minute read
|
||
|
||
</span>
|
||
|
||
</p>
|
||
|
||
|
||
<p class="archive__item-excerpt" itemprop="description">Anytime I install a new system on my machine, I pray God for nothing bad happens. But it usually happens. When I reboot, I find myself in the “Grub rescue” m...</p>
|
||
</article>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
<div class="search-content">
|
||
<div class="search-content__inner-wrap"><form class="search-content__form" onkeydown="return event.key != 'Enter';">
|
||
<label class="sr-only" for="search">
|
||
Enter your search term...
|
||
</label>
|
||
<input type="search" id="search" class="search-input" tabindex="-1" placeholder="Enter your search term..." />
|
||
</form>
|
||
<div id="results" class="results"></div></div>
|
||
|
||
</div>
|
||
|
||
|
||
<div id="footer" class="page__footer">
|
||
<footer>
|
||
<!-- start custom footer snippets -->
|
||
|
||
<!-- end custom footer snippets -->
|
||
<div class="page__footer-follow">
|
||
<ul class="social-icons">
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="/feed.xml"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="page__footer-copyright">© 2022 Şahin Akkaya's Personal Page. Powered by <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> & <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
|
||
<div class="page__footer-copyright">
|
||
Check out the <a href="https://github.com/Asocia/sahinakkayadotdev">code</a> of this site.
|
||
</div>
|
||
|
||
</footer>
|
||
</div>
|
||
|
||
|
||
<script src="/assets/js/main.min.js"></script>
|
||
|
||
|
||
|
||
|
||
<script src="/assets/js/lunr/lunr.min.js"></script>
|
||
<script src="/assets/js/lunr/lunr-store.js"></script>
|
||
<script src="/assets/js/lunr/lunr-en.js"></script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</body>
|
||
</html>
|