<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Audio on Bastien Traverse</title>
    <link>https://bastientraverse.com/en/tags/audio/</link>
    <description>Recent content in Audio on Bastien Traverse</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Fri, 29 Oct 2021 00:00:00 +0200</lastBuildDate><atom:link href="https://bastientraverse.com/en/tags/audio/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Parallel ffmpeg stream manipulation</title>
      <link>https://bastientraverse.com/en/posts/2021-10/parallel-ffmpeg/</link>
      <pubDate>Fri, 29 Oct 2021 00:00:00 +0200</pubDate>
      
      <guid>https://bastientraverse.com/en/posts/2021-10/parallel-ffmpeg/</guid>
      <description>&lt;p&gt;This post will illustrate how we can apply different operations (audio transcoding, subtitles selection, video, chapters and fonts passthrough) on multistream MKVs with ffmpeg, while optimizing for multicore systems.&lt;/p&gt;
&lt;p&gt;More precisely, here is what we are trying to achieve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;transcode the Japanese audio track from a entire anime season, from a superfluously lossless Flac to the more efficient Opus format&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;shed the useless (to me) English audio track (also in Flac, and 5.1&amp;hellip;), as well as the unneeded &amp;ldquo;Signs-only&amp;rdquo; subtitle   tracks&lt;/li&gt;
&lt;li&gt;pass-through the video track&lt;/li&gt;
&lt;li&gt;retain all attachments (fonts, chapters&amp;hellip;)&lt;/li&gt;
&lt;li&gt;preserve file modification times&lt;/li&gt;
&lt;li&gt;replace the original files with the new ones&lt;/li&gt;
&lt;li&gt;do all this as fast and efficiently as possible 😎&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;When starting, I knew how to accomplish this in two steps using two different tools:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Identify and remove the unwanted streams with &lt;a href=&#34;https://mkvtoolnix.download/doc/mkvmerge.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mkvmerge&lt;/a&gt;&lt;sup&gt;(&lt;a href=&#34;https://www.reddit.com/r/mkvtoolnix/comments/8qcgez/can_somebody_help_with_batch_remove_unwanted/e0jq70n/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;source&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkvmerge -i *.mkv
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;File &lt;span class=&#34;s1&#34;&gt;&amp;#39;01.mkv&amp;#39;&lt;/span&gt;: container: Matroska
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Track ID 0: video &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEVC/H.265/MPEG-H&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Track ID 1: audio &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Flac&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Track ID 2: audio &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Flac&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Track ID 3: subtitles &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;SubStationAlpha&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Track ID 4: subtitles &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;SubStationAlpha&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Track ID 5: subtitles &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HDMV PGS&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Track ID 6: subtitles &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HDMV PGS&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Attachment ID 1: &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;application/vnd.ms-opentype&amp;#39;&lt;/span&gt;, size &lt;span class=&#34;m&#34;&gt;30712&lt;/span&gt; bytes, file name &lt;span class=&#34;s1&#34;&gt;&amp;#39;font.ttf&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;...&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in *.mkv&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; mkvmerge -o &lt;span class=&#34;s2&#34;&gt;&amp;#34;remuxed/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --audio-tracks &lt;span class=&#34;s1&#34;&gt;&amp;#39;!eng&amp;#39;&lt;/span&gt; --subtitle-tracks &lt;span class=&#34;s1&#34;&gt;&amp;#39;!4,6&amp;#39;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;admonition tip&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;
  Here I was able to use &lt;code&gt;!eng&lt;/code&gt; because the audio track was labeled as such, but we could achieve the same with numerical index (just as we are doing for subs).
&lt;/div&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;Use ffmpeg to transcode the remaining audio track to Opus, using a &lt;a href=&#34;https://kokomins.wordpress.com/2019/10/10/anime-encoding-guide-for-x265-and-why-to-never-use-flac/#recommended-settings&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;generous 192 kbps&lt;/a&gt; (96k per audio channel) bitrate and then do the cleanup:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in remuxed/*.mkv&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; ffmpeg -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -map &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -c copy -c:a libopus -b:a 192k &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; touch -r &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; mv &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where &lt;code&gt;-map 0&lt;/code&gt; ports over all input streams, &lt;code&gt;-c copy&lt;/code&gt; keeps them intact, and &lt;code&gt;-c:a libopus -b:a 192k&lt;/code&gt; modulates this by transcoding all audio streams (in our case, the one we kept) to 192k Opus. Finally, &lt;code&gt;touch -r&lt;/code&gt; updates our file modtime to reflect the original one, and &lt;code&gt;mv&lt;/code&gt; overwrite the source with the modified file (&lt;strong&gt;warning&lt;/strong&gt;: make sure to always test on a copy first, &lt;strong&gt;otherwise data loss will incur!&lt;/strong&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From there it was rather easy to merge it all in one fell for loop:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in *.mkv&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    mkvmerge -o &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --audio-tracks &lt;span class=&#34;s1&#34;&gt;&amp;#39;!eng&amp;#39;&lt;/span&gt; --subtitle-tracks &lt;span class=&#34;s1&#34;&gt;&amp;#39;!4,6&amp;#39;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    ffmpeg -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -map &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -c copy -c:a libopus -b:a 192k &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp2_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    touch -r &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp2_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    mv &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp2_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    rm &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;However, now the next step was to get rid of the superfluous &lt;em&gt;mkvmerge&lt;/em&gt; and do it all with the Ever Almighty Multimedia Swiss-Army Knife®, ffmpeg. For that I had to dig quite a bit, but here is the result:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in *.mkv&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; ffmpeg -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -map &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -map -0:a:1 -map -0:s:1 -map -0:s:3 -c copy -c:a libopus -b:a 192k &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; touch -r &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; mv &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmp_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As before we first select all streams via &lt;code&gt;-map 0&lt;/code&gt;, then make use of &lt;a href=&#34;https://trac.ffmpeg.org/wiki/Map&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;negative mapping&lt;/a&gt; (notice the minus sign at the front of the subsequent &lt;code&gt;-map&lt;/code&gt; values) to get rid of the unwanted tracks (second audio track, second and fourth sub tracks&amp;hellip; Beware, this time we are using ffmpeg&amp;rsquo;s indexes/IDs which are relative to the category and 0-indexed). Then it is as before, we copy all remaining streams without changing them (&lt;code&gt;-c copy&lt;/code&gt;) except audio ones which are transcoded to Opus.&lt;/p&gt;
&lt;p&gt;Now this is all well and dandy, but this command runs sequentially, iterating over each file while queuing up the others, disregarding our multicore CPU architecture and thus slowing down the process. How can we run all this concurrently, dispatching a job to each CPU thread?&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gnu.org/software/parallel/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNU Parallel&lt;/a&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; to the rescue!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;parallel ffmpeg -i &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; -map &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -map -0:a:1 -map -0:s:1 -map -0:s:3 -c copy -c:a libopus -b:a 192k tmp_&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;;&amp;#39;&lt;/span&gt; touch -r &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; tmp_&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;;&amp;#39;&lt;/span&gt; mv tmp_&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; ::: *.mkv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;admonition info&#34;&gt;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;
  Of course, overall time will also depend on your storage read/write speeds&amp;hellip;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Et voilà&lt;/em&gt;, that&amp;rsquo;s how you &lt;em&gt;efficiently&lt;/em&gt; and &lt;em&gt;stylishly&lt;/em&gt; reduce a bloated 10.9GB series to a lean and mean 4.8GB one. Great success! 👍👏🤗&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://kokomins.wordpress.com/2019/10/10/anime-encoding-guide-for-x265-and-why-to-never-use-flac/#why-you-should-never-use-flac&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Why you should never use FLAC&lt;/a&gt; (for that use case that is)&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;See &lt;a href=&#34;https://unix.stackexchange.com/a/104798&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;this Unix SE answer&lt;/a&gt; for why Parallel is superior to Xargs in this matter.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
    </item>
    
  </channel>
</rss>
