<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Knowledge Base (Posts about convert)</title><link>https://bgstack15.ddns.net/blog/</link><description></description><atom:link href="https://bgstack15.ddns.net/blog/categories/convert.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2024 &lt;a href="mailto:bgstack15@gmail.com"&gt;bgstack15&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-SA"
style="border-width:0; margin-bottom:12px;"
src="https://bgstack15.ddns.net/.images/l_by-sa_4.0_88x31.png"&gt;&lt;/a&gt;</copyright><lastBuildDate>Wed, 18 Dec 2024 14:00:37 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Convert pdf to jpg</title><link>https://bgstack15.ddns.net/blog/posts/2024/12/18/convert-pdf-to-jpg/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;Quick and dirty, but way better than &lt;code&gt;convert input.pdf output.jpg&lt;/code&gt;. I'm assuming there was a resolution setting somewhere for "convert" that I never bothered to research.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;pdftoppm -jpeg -r 300 input.pdf output
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Specifically omit the extension, because you will get files like &lt;code&gt;output-1.jpg&lt;/code&gt;, &lt;code&gt;output-2.jpg&lt;/code&gt;, et al.: one for each page.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;p&gt;Ripped shamelessly from:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://bgstack15.ddns.net/blog/outbound/https:/stackoverflow.com/questions/43085889/how-to-convert-a-pdf-into-jpg-with-command-line-in-linux/61700520#61700520"&gt;How to convert a PDF into JPG with command line in Linux? - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>convert</category><category>jpg</category><category>pdf</category><guid>https://bgstack15.ddns.net/blog/posts/2024/12/18/convert-pdf-to-jpg/</guid><pubDate>Wed, 18 Dec 2024 13:58:00 GMT</pubDate></item><item><title>Crop screenshots to same window area</title><link>https://bgstack15.ddns.net/blog/posts/2024/10/11/crop-screenshots-to-same-window-area/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;I had problems getting exact screenshots of some work, and was merely able to get full desktop screenshots. So I needed to crop to just the relevant portion. In my case, I wanted an 800x600 picture, from my second monitor (first being the left monitor, and second being the right monitor), starting at 1920+560 pixels by 240 pixels.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;for word in *png ; do convert "&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;" -crop 800x600+2480+240 foo/&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;word&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt; ; done
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Really small, and dumb, but I'll need this again someday.&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://bgstack15.ddns.net/blog/outbound/https:/askubuntu.com/questions/631689/cropping-images-using-command-line-tools-only"&gt;Cropping Images using Command Line Tools Only - Ask Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>convert</category><category>images</category><guid>https://bgstack15.ddns.net/blog/posts/2024/10/11/crop-screenshots-to-same-window-area/</guid><pubDate>Fri, 11 Oct 2024 12:46:00 GMT</pubDate></item><item><title>Convert .dng to .jpg</title><link>https://bgstack15.ddns.net/blog/posts/2022/06/18/convert-dng-to-jpg/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;I had a batch of .dng files that should be converted to .jpg format. I tried a few ways, but they did not preserve all the exif metadata. My process documented below does.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use Irfanview to batch convert all .dng files to .jpg. This will strip a lot of the metadata.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add in metadata from original file.&lt;/p&gt;
&lt;p&gt;time for word in *dng ; do exiftool -all= -tagsfromfile "${word}" -exif:all "${word%%.dng}.jpg" ; done&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This command syntax is verbatim from the man page for exiftool.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Apply original timestamp.&lt;/p&gt;
&lt;p&gt;for word in *dng ; do touch --no-create --reference "${word}" "${word%%dng}jpg" ; done&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optionall, remove the original files.&lt;/p&gt;
&lt;p&gt;rm $( for word in *.jpg ; do echo "${word%%.jpg}.dng" ; done ; )&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;h3&gt;Man pages&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;exiftool(1p)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>convert</category><category>irfanview</category><category>jpg</category><guid>https://bgstack15.ddns.net/blog/posts/2022/06/18/convert-dng-to-jpg/</guid><pubDate>Sat, 18 Jun 2022 13:04:03 GMT</pubDate></item><item><title>Converting FCD to ISO using the original software</title><link>https://bgstack15.ddns.net/blog/posts/2022/02/14/converting-fcd-to-iso-using-the-original-software/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;On my main file server, I store an old number of files in a format last used on the pre-NT kernel Windows platform. Nowadays for compact disc images I would use the iso format. But this nifty piece of software from the past, &lt;a href="https://www.thefreelibrary.com/CD+COPIER+PRO+CAN+CREATE+23+CD-ROM+DRIVES+ON+HARD+DRIVE.-a054179428"&gt;IMSI CD Copier Pro&lt;/a&gt;, used its own format, .FCD. It worked great at the time!&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ ls -al *FCD
-rw-rw-r--. &lt;span class="m"&gt;1&lt;/span&gt; bgstack15 bgstack15 &lt;span class="m"&gt;209218511&lt;/span&gt; May &lt;span class="m"&gt;19&lt;/span&gt;  &lt;span class="m"&gt;2001&lt;/span&gt; Math Blaster &lt;span class="m"&gt;3&lt;/span&gt;.FCD
-rw-rw-r--. &lt;span class="m"&gt;1&lt;/span&gt; bgstack15 bgstack15 &lt;span class="m"&gt;402961457&lt;/span&gt; May &lt;span class="m"&gt;26&lt;/span&gt;  &lt;span class="m"&gt;2001&lt;/span&gt; Math Blaster &lt;span class="m"&gt;4&lt;/span&gt;.FCD
-rw-rw-r--. &lt;span class="m"&gt;1&lt;/span&gt; bgstack15 bgstack15 &lt;span class="m"&gt;258842982&lt;/span&gt; May &lt;span class="m"&gt;22&lt;/span&gt;  &lt;span class="m"&gt;2001&lt;/span&gt; Math Blaster &lt;span class="m"&gt;5&lt;/span&gt;.FCD
-rw-rw-r--. &lt;span class="m"&gt;1&lt;/span&gt; bgstack15 bgstack15  &lt;span class="m"&gt;55161301&lt;/span&gt; May  &lt;span class="m"&gt;4&lt;/span&gt;  &lt;span class="m"&gt;2002&lt;/span&gt; Math Blaster &lt;span class="m"&gt;6&lt;/span&gt;.FCD
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With my recent &lt;a href="https://bgstack15.ddns.net/blog/posts/2022/02/10/how-i-installed-windows-98-vm-in-virt-manager/"&gt;Windows 98 SE virtual machine&lt;/a&gt;, I can now load up the CD image files and get the sweet, sweet files for these educational computer games.&lt;/p&gt;
&lt;p&gt;I was unable to get any nfs or SMB mounts to work in my vm, so I ended up just using some virtualized CD drives, and building new iso files that contain the FCD files which the VM will then read and re-mount in yet another virtualized CD drive. This sounds like a meme...&lt;/p&gt;
&lt;p&gt;My first step was to install CD Copier Pro. I have the installer image as an ISO, and my original license key. I failed to take screenshots for this step, but here it is running on the vm.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bgstack15.ddns.net/blog/2022/02/1-cdcopirepro-running.png"&gt;&lt;img alt="" src="https://bgstack15.ddns.net/blog/2022/02/1-cdcopirepro-running.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, to get the .FCD files into the VM with smb or nfs, I just make a new iso file and mount it in the VM.
I made the iso file:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;time mkisofs -J -rock -V 'MB3fcd' -o /mnt/public/Support/SetupsBig/Windows/mb5-fcd.iso Math\ Blaster\ 3.FCD
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And then configure the VM to use that file. That whole path was where I had already configured libvirt to use as a storage pool.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bgstack15.ddns.net/blog/2022/02/2-virt-manager-mount-iso-as-cd.png"&gt;&lt;img alt="" src="https://bgstack15.ddns.net/blog/2022/02/2-virt-manager-mount-iso-as-cd.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So on the hot-updated CD drive in the vm, you can now see the FCD file. I just draged it into the main area of CD Copier Pro, and now it is available as an option. I then dragged it from this main area, to the H: drive in the left-side area of the window. And now H:\ is available in Windows Explorer.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bgstack15.ddns.net/blog/2022/02/3-fcd-on-iso-in-vm.png"&gt;&lt;img alt="" src="https://bgstack15.ddns.net/blog/2022/02/3-fcd-on-iso-in-vm.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I set up a directory on C:\ to hold the CD contents. I then copied the contents for each FCD I was interested in.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bgstack15.ddns.net/blog/2022/02/4-cd-contents-on-cd-drive.png"&gt;&lt;img alt="" src="https://bgstack15.ddns.net/blog/2022/02/4-cd-contents-on-cd-drive.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once I got all the FCD files' contents to C:, I was ready to mount up the guest OS (I shut it down first). On the kvm host, I ran this command.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ guestmount -a /var/lib/libvirt/images/win98-01a.qcow2 -m /dev/sda1 /mnt/foo
$ ls -al /mnt/foo/CDROMs
total &lt;span class="m"&gt;80&lt;/span&gt;
drwxr-xr-x.  &lt;span class="m"&gt;5&lt;/span&gt; root root &lt;span class="m"&gt;16384&lt;/span&gt; Feb  &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;:29 .
drwxr-xr-x.  &lt;span class="m"&gt;6&lt;/span&gt; root root &lt;span class="m"&gt;16384&lt;/span&gt; Dec &lt;span class="m"&gt;31&lt;/span&gt;  &lt;span class="m"&gt;1969&lt;/span&gt; ..
drwxr-xr-x. &lt;span class="m"&gt;11&lt;/span&gt; root root &lt;span class="m"&gt;16384&lt;/span&gt; Feb  &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;:29 MB3rdGr
drwxr-xr-x. &lt;span class="m"&gt;13&lt;/span&gt; root root &lt;span class="m"&gt;16384&lt;/span&gt; Feb  &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;:49 MB4thGr
drwxr-xr-x. &lt;span class="m"&gt;12&lt;/span&gt; root root &lt;span class="m"&gt;16384&lt;/span&gt; Feb  &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;:14 MB5thGr
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And now I make a new iso file, from these recently extracted contents.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd /mnt/foo/CDROMs
time mkisofs -J -rock -V 'MB3rdGr' -o /mnt/public/CDROMs/Games/Math\ Blaster/MB3rdGr.iso MB3rdGr
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And now I can go try to run Math Blaster 5 in Wine!&lt;/p&gt;
&lt;h2&gt;References&lt;/h2&gt;
&lt;h3&gt;Weblinks&lt;/h3&gt;
&lt;p&gt;https://www.xmodulo.com/mount-qcow2-disk-image-linux.html&lt;/p&gt;</description><category>98</category><category>cd</category><category>convert</category><category>copier</category><category>fcd</category><category>iso</category><category>windows</category><guid>https://bgstack15.ddns.net/blog/posts/2022/02/14/converting-fcd-to-iso-using-the-original-software/</guid><pubDate>Mon, 14 Feb 2022 14:23:24 GMT</pubDate></item><item><title>My scanpdf solution</title><link>https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;I have not personally needed to forcibly scan a document, i.e., print one out, just to sign it, and then scan it in again. I have my trusty &lt;code&gt;signatures.pdf&lt;/code&gt; that I scanned in a few years ago with 10 iterations of my signature. I always just screenshot a signature, and use LibreOffice Draw's ability to set a transparent color of an imported image.&lt;/p&gt;
&lt;p&gt;But, after reading an interesting &lt;a href="https://news.ycombinator.com/item?id=30024165#30027344"&gt;Hacker News discussion&lt;/a&gt;, I have whipped up a "scanpdf" solution. 99% of this is ripped straight from the author, &lt;a href="https://news.ycombinator.com/user?id=mrb"&gt;mrb&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is my file &lt;code&gt;~/bin/scanpdf.sh&lt;/code&gt;, with typo/semantic fixes.&lt;/p&gt;
&lt;div class="code"&gt;&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-1"&gt;&lt;code data-line-number=" 1"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="ch"&gt;#!/bin/bash&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-2"&gt;&lt;code data-line-number=" 2"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="c1"&gt;# from https://news.ycombinator.com/item?id=30024165#30027344&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-3"&gt;&lt;code data-line-number=" 3"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Make a pdf look like it was scanned.&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-4"&gt;&lt;code data-line-number=" 4"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-5"&gt;&lt;code data-line-number=" 5"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$#&lt;/span&gt; -ne &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-6"&gt;&lt;code data-line-number=" 6"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;   &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Usage: &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; input output"&lt;/span&gt; &amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-7"&gt;&lt;code data-line-number=" 7"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;   &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-8"&gt;&lt;code data-line-number=" 8"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-9"&gt;&lt;code data-line-number=" 9"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;.scanner-look.tmp
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-10"&gt;&lt;code data-line-number="10"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;mkdir &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-11"&gt;&lt;code data-line-number="11"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="c1"&gt;# without -flatten some PDF convert to a JPG with a black background&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-12"&gt;&lt;code data-line-number="12"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;convert -density &lt;span class="m"&gt;150&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; -colorspace Gray -quality &lt;span class="m"&gt;60&lt;/span&gt; -alpha flatten &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/p_in.jpg &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-13"&gt;&lt;code data-line-number="13"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;: &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-14"&gt;&lt;code data-line-number="14"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="c1"&gt;# each page is randomly shifted in the X and Y plane.&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-15"&gt;&lt;code data-line-number="15"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="c1"&gt;# units seem to depend on angle of rotation in ScaleRotateTranslate?&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-16"&gt;&lt;code data-line-number="16"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;offset&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="k"&gt;$((&lt;/span&gt;&lt;span class="nv"&gt;$RANDOM&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-17"&gt;&lt;code data-line-number="17"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; f &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/p_in*jpg&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-18"&gt;&lt;code data-line-number="18"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;   &lt;span class="c1"&gt;# each page is randomly rotated by [-0.5 .. 0.5[ degrees&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-19"&gt;&lt;code data-line-number="19"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;   &lt;span class="nv"&gt;angle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;python3 -c &lt;span class="s1"&gt;'import random; print(random.random()-0.5)'&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-20"&gt;&lt;code data-line-number="20"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;   &lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;offset&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-21"&gt;&lt;code data-line-number="21"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;   &lt;span class="nv"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;offset&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-22"&gt;&lt;code data-line-number="22"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;   convert &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-23"&gt;&lt;code data-line-number="23"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;      -blur 0x0.5 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-24"&gt;&lt;code data-line-number="24"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;        -distort ScaleRotateTranslate &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$x&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$y&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$angle&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; +repage &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-25"&gt;&lt;code data-line-number="25"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;      &lt;span class="se"&gt;\(&lt;/span&gt; +clone +noise Random -fill white -colorize &lt;span class="m"&gt;95&lt;/span&gt;% &lt;span class="se"&gt;\)&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-26"&gt;&lt;code data-line-number="26"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;      -compose darken &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-27"&gt;&lt;code data-line-number="27"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;      -composite &lt;span class="se"&gt;\&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-28"&gt;&lt;code data-line-number="28"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;      &lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;f&lt;/span&gt;&lt;span class="p"&gt;/p_in/p_out&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;.pdf &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-29"&gt;&lt;code data-line-number="29"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-30"&gt;&lt;code data-line-number="30"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="c1"&gt;# concatenate all the pages to one PDF&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-31"&gt;&lt;code data-line-number="31"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;&lt;span class="c1"&gt;# use "ls -v" to order files correctly (p_out-X.jpg where X is 0 1 2 ... 9 10 11 ...)&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-32"&gt;&lt;code data-line-number="32"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;pdftk &lt;span class="k"&gt;$(&lt;/span&gt;ls -v &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/p_out*.pdf&lt;span class="k"&gt;)&lt;/span&gt; cat output &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="linenos linenodiv"&gt;&lt;a href="https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/#-33"&gt;&lt;code data-line-number="33"&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;code&gt;rm -rf &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$tmp&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Dependencies include &lt;code&gt;pkdftk(1)&lt;/code&gt; and ImageMagick. Also important is to make sure the ImageMagick policy had read and write acess to PDFs. Ensure something similar to this logic is in file &lt;code&gt;/etc/ImageMagick-6/policy.xml&lt;/code&gt;.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;policy domain="coder" rights="read | write" pattern="PDF" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;References&lt;/h2&gt;
&lt;h3&gt;Weblinks&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://news.ycombinator.com/item?id=30024165#30027344"&gt;FalsiScan: Make it look like a PDF has been hand signed and scanned | Hacker News&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/edouardklein/falsisign"&gt;Edouard Klein / falsisign | Gitlab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/52998331/imagemagick-security-policy-pdf-blocking-conversion"&gt;linux - ImageMagick security policy 'PDF' blocking conversion - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><category>cheat</category><category>convert</category><category>pdf</category><category>scan</category><category>signature</category><guid>https://bgstack15.ddns.net/blog/posts/2022/01/25/my-scanpdf-solution/</guid><pubDate>Tue, 25 Jan 2022 14:15:58 GMT</pubDate></item><item><title>Convert b6i to iso</title><link>https://bgstack15.ddns.net/blog/posts/2021/10/01/convert-b6i-to-iso/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;Afte some Internet searching, I came across &lt;a href="https://cdemu.sourceforge.io/"&gt;cdemu&lt;/a&gt; for GNU/Linux that can convert the files the way I want. I use Devuan Ceres (the unstable release), so I wanted to rebuild the packages for my exact libs.&lt;/p&gt;
&lt;p&gt;So I used the OBS to build them: &lt;a href="https://build.opensuse.org/project/show/home:bgstack15:cdemu"&gt;subproject cdemu&lt;/a&gt;. I had to borrow one hack that the &lt;a href="https://launchpad.net/~cdemu/+archive/ubuntu/ppa/+packages"&gt;Ubuntu&lt;/a&gt; team came up with, to suit the needs of systemd-free Devuan.&lt;/p&gt;
&lt;p&gt;For my headless VM where I was running these tasks, I had to start a virtual X server. In a GNU screen:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;Xvfb&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In another screen, run:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="n"&gt;DISPLAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;modprobe&lt;/span&gt; &lt;span class="n"&gt;vhba&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;chmod&lt;/span&gt; &lt;span class="mi"&gt;0666&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;vhba_ctl&lt;/span&gt;
&lt;span class="n"&gt;cdemu&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;daemon&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The daemon insists on using X11, so I had to do it this way. But now you can use client commands. I loaded my .b6t file and then listed it to make sure it was available to my system.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;cdemu&lt;/span&gt; &lt;span class="nb"&gt;load&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;b6t&lt;/span&gt;
&lt;span class="n"&gt;cdemu&lt;/span&gt; &lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mapping&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The output should resemble:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cdemu device-mapping
Device mapping:
DEV   SCSI CD-ROM     SCSI generic
&lt;span class="m"&gt;0&lt;/span&gt;     /dev/sr1        /dev/sg2
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And now you can mount the contents, and then write a new iso file.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo mount -v /dev/sr1 /mnt/cdrom
DISKLABEL="$( sudo file -s /dev/sr1 | awk -F\' '{print $2}' )" ; echo "&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;DISKLABEL&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;"
mkisofs -V "&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;DISKLABEL&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;" -J -rock -o ~/disc.iso /mnt/cdrom
&lt;/code&gt;&lt;/pre&gt;</description><category>b6i</category><category>b6t</category><category>blindwrite</category><category>cd</category><category>convert</category><category>iso</category><guid>https://bgstack15.ddns.net/blog/posts/2021/10/01/convert-b6i-to-iso/</guid><pubDate>Fri, 01 Oct 2021 13:14:27 GMT</pubDate></item><item><title>Convert vhs video tape to mkv file in Linux</title><link>https://bgstack15.ddns.net/blog/posts/2019/07/17/convert-vhs-video-tape-to-mkv-file-in-linux/</link><dc:creator>bgstack15</dc:creator><description>&lt;h6&gt;Last updated 2019-09-11&lt;/h6&gt;
&lt;p&gt;I still own video tapes (VHS) and I have finally gotten around to getting a
nice setup for saving them down to hard disk so I can clear out the old video
tape collection. This is how I did it. First of all, I knew I needed an RCA-
to-something adapter. I found an "&lt;a href="https://www.amazon.com/UCEC-Capture-Adapter-Converter-support/dp/B00WSAWZ1M/ref=sr_1_8?crid=100QJKR988Z8K&amp;amp;keywords=av+to+usb+converter&amp;amp;qid=1561291750&amp;amp;s=gateway&amp;amp;sprefix=av+to+usb+%2Caps%2C162&amp;amp;sr=8-8"&gt;AV to USB
converter&lt;/a&gt;"
[amazon.com] that does the trick. When attached to a Ubuntu 16.04 system, it
shows up as /dev/video0. No additional steps required! To quote &lt;a href="http://thealaskalinuxuser.com/"&gt;one of my
role models&lt;/a&gt; [thealaskalinuxuser.com] on the
Internet: "Linux -- keep it simple." Now, I discovered over time that the
audio input just didn't work. But the video comes in perfectly! I was using
&lt;a href="https://www.videolan.org/vlc/"&gt;vlc&lt;/a&gt; [videolan.org] for the input capture. To
get the audio to work, I had to find an RCA to mini-phono cable which I
already owned. An example product is &lt;a href="https://www.monoprice.com/product?p_id=5597"&gt;on
monoprice.com&lt;/a&gt; [monoprice.com]. I
also had to fiddle with the audio input settings to get the input to work
right. I had to poke around with pulseaudio, alsa, and vlc to get the audio
input to work the way I needed it. For my setup (pictured below), I needed to
make sure my input source was mic (the front jack on my desktop computer) and
not line, which is probably the input in the back. I chose to set my mic boost
(akin to gain) really low, and capture volume really high.
&lt;img alt="" src="https://bgstack15.ddns.net/blog/2019/07/convert-vhs-setup.jpg"&gt;
&lt;img alt="screenshot of alsa mixer on capture settings
screen" src="https://bgstack15.ddns.net/blog/2019/06/alsamixer-capture.png"&gt; I
needed to set pulseaudio to allow the stereo input. I have discovered that
pulseaudio is fragile, and also never remembers the settings I choose for it,
so for every reboot or login or pulseaudio --start command, I have to go
readjust the "profile." I am starting to understand why people smarter (and
more verbose) than me tend to dislike pulseaudio. &lt;img alt="pavucontrol showing
configuration" src="https://bgstack15.ddns.net/blog/2019/06/pavucontrol.png"&gt;
With alsa and pulse set up correctly, it is now a matter of getting vlc to
accept the audio input while accepting the video input. I had to discover how
my system identifies the audio jack.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;arecord&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="o"&gt;****&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CAPTURE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Hardware&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Devices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;****&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HDA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Intel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCH&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CX20641&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;CX20641&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analog&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;Subdevices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Subdevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subdevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HDA&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Intel&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PCH&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CX20641&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;CX20641&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Analog&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;Subdevices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Subdevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subdevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;AV&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB2&lt;/span&gt;&lt;span class="mf"&gt;.0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;device&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Audio&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;USB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Audio&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nl"&gt;Subdevices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;Subdevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;subdevice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By trial and error, I learned the mic input is card 0, device 2. In alsa
terms, that's alsa://0,2. So, to put it all together, I had to set VLC to open
a "capture device" of /dev/video0, with audio device of hw:0,2. To get the
audio and video to both be output by VLC, I had to go into advanced optiosn
and se audio input = 0. &lt;img alt="screenshot of vlc with /dev/video0, hw:0,2 and audio
input=0" src="https://bgstack15.ddns.net/blog/2019/06/vlc-settings-2.png"&gt; VLC
always defaults to audio input=-1, so no audio will come through. When I
selected the Play button, it presents both audio and video from the VCR! So,
with the video on the screen that I want, I pressed the record button (from
the toolbar visible when you select View -&amp;gt; Advanced controls). VLC records by
default to avi format, which is not my preferred method, even though it is a
temporary format. So, I had to set all the settings again, and then select the
drop-down arrow beside the Play button, and select "Convert." A new window
appears, and I select the file format I want and the output file.
&lt;img alt="" src="https://bgstack15.ddns.net/blog/2019/06/convert-options.png"&gt; With
all the options set, I now return to the first options screen and select the
"Convert" button. After running through the whole video, I come back and hit
stop in VLC. I use &lt;a href="https://handbrake.fr/"&gt;HandBrake&lt;/a&gt; [handbrake.fr] to
convert the file to the format I want. The details of that are beyond the
scope of this post. For a bonus, I discovered that killing vlc safely closes
the written file, so it is still viewable. So I just run a command in a
terminal to kill vlc after the published length of the videotape:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ sleep &lt;span class="k"&gt;$((&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="m"&gt;120&lt;/span&gt; &lt;span class="k"&gt;))&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; killall vlc
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I could have done something fancier with xdotool to select the "stop" button,
but why bother?&lt;/p&gt;
&lt;h4&gt;Addendum&lt;/h4&gt;
&lt;p&gt;For some reason, when I capture video (possibly because of the &lt;a href="https://en.wikipedia.org/wiki/NTSC#Frame_rate_conversion"&gt;NTSC
framerate&lt;/a&gt;
conversation), the audio gets a little bit out of sync with the video.
Thankfully, there is a tool that can change the scale of the audio to video:
mkvmerge, which is a part of
&lt;a href="https://mkvtoolnix.download/doc/mkvmerge.html"&gt;mkvtoolnix&lt;/a&gt; suite. After much
experimentation, I am satisfied that a safe number to use to scale the audio
perfectly from my VCR for all content is in this command:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkvmerge -y '1:0,100.060552/100' -o new.mkv old.mkv
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That is take stream 1 (zero-indexed, and usually the audio in a simple
captured video file) and stretch it with an anchor point of zero to
100.060552% of the original speed. So it slows down the audio, and then the
audio syncs perfectly with the video, for a 2-hour movie.&lt;/p&gt;</description><category>audio</category><category>convert</category><category>mkv</category><category>record</category><category>video</category><guid>https://bgstack15.ddns.net/blog/posts/2019/07/17/convert-vhs-video-tape-to-mkv-file-in-linux/</guid><pubDate>Wed, 17 Jul 2019 13:05:22 GMT</pubDate></item><item><title>Extract icons from .exe files</title><link>https://bgstack15.ddns.net/blog/posts/2018/07/24/extract-icons-from-exe-files/</link><dc:creator>bgstack15</dc:creator><description>&lt;p&gt;In this cross-platform world, sometimes you just really need an icon from a
.exe binary. Thanks to the &lt;a href="https://stackoverflow.com/questions/36808585/extracting-exe-icons-in-ubuntu-linux/36808689#36808689"&gt;StackOverflow
community&lt;/a&gt;, here is the definitive method to do that.
Install icoutils.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;dnf install icoutils
# OR
sudo apt-get install icoutils
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Use resource 14 (icon groups) to extract the icons.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;wrestool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mybinary&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;outputdir&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>convert</category><category>graphics</category><category>icon</category><category>oneliner</category><guid>https://bgstack15.ddns.net/blog/posts/2018/07/24/extract-icons-from-exe-files/</guid><pubDate>Tue, 24 Jul 2018 13:17:10 GMT</pubDate></item></channel></rss>