<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://petermetz.de/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://petermetz.de/feed.php">
        <title>petermetz.de kb:eng:cs:media</title>
        <description></description>
        <link>https://petermetz.de/</link>
        <image rdf:resource="https://petermetz.de/lib/tpl/bootstrap3/images/favicon.ico" />
       <dc:date>2026-05-04T16:40:19+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:audiobooks?rev=1642944474&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:de-drm?rev=1697200380&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:ffmpeg?rev=1768368437&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:gimp?rev=1642944474&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:imagemagick?rev=1647779082&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:inkscape?rev=1642944474&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:instaloader?rev=1694332701&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:mediasitedownloader?rev=1648117731&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:pdf-archiving?rev=1642944474&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:pdf-manipulation?rev=1705241152&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:start?rev=1645016265&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:tts?rev=1705593748&amp;do=diff"/>
                <rdf:li rdf:resource="https://petermetz.de/kb:eng:cs:media:youtube-dl?rev=1680029982&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://petermetz.de/lib/tpl/bootstrap3/images/favicon.ico">
        <title>petermetz.de</title>
        <link>https://petermetz.de/</link>
        <url>https://petermetz.de/lib/tpl/bootstrap3/images/favicon.ico</url>
    </image>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:audiobooks?rev=1642944474&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-01-23T13:27:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Audiobook Generation and Editing Tools</title>
        <link>https://petermetz.de/kb:eng:cs:media:audiobooks?rev=1642944474&amp;do=diff</link>
        <description>Audiobook Generation and Editing Tools

m4b-tool

&lt;https://github.com/sandreas/m4b-tool&gt;</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:de-drm?rev=1697200380&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-10-13T12:33:00+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>DRM-removal Tools</title>
        <link>https://petermetz.de/kb:eng:cs:media:de-drm?rev=1697200380&amp;do=diff</link>
        <description>DRM-removal Tools

Audio Books

inAudible-NG/tables

Available via &lt;https://hub.docker.com/r/ryanfb/inaudible&gt;, &lt;https://github.com/ryanfb/docker_inaudible_rainbowcrack&gt; and &lt;https://github.com/inAudible-NG/tables&gt;


#!/bin/bash
# You can also skip/override computing the activation bytes with rainbowcrack
# by passing them in with the ACTIVATION_BYTES environment variable.

if [ -n &quot;${ACTIVATION_BYTES}&quot; ]; then
  ARGS=&quot;-e ACTIVATION_BYTES=${ACTIVATION_BYTES}&quot;  
fi

docker run ${ARGS} --rm -v $(p…</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:ffmpeg?rev=1768368437&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-01-14T05:27:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>ffmpeg</title>
        <link>https://petermetz.de/kb:eng:cs:media:ffmpeg?rev=1768368437&amp;do=diff</link>
        <description>ffmpeg

Converting formats with ffmpeg

Animated GIF to MPEG-4

From &lt;https://unix.stackexchange.com/questions/40638/how-to-do-i-convert-an-animated-gif-to-an-mp4-or-mv4-on-the-command-line&gt; and &lt;http://rigor.com/blog/2015/12/optimizing-animated-gifs-with-html5-video&gt;:

ffmpeg -i input.gif -movflags faststart -pix_fmt yuv420p -vf &quot;scale=trunc(iw/2)*2:trunc(ih/2)*2&quot; output.mp4

movflags: optimizes the structure of the MP4 file so the browser can load it as quickly as possible</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:gimp?rev=1642944474&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-01-23T13:27:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>GIMP Tips and Tricks</title>
        <link>https://petermetz.de/kb:eng:cs:media:gimp?rev=1642944474&amp;do=diff</link>
        <description>GIMP Tips and Tricks</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:imagemagick?rev=1647779082&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-03-20T12:24:42+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>imagemagick</title>
        <link>https://petermetz.de/kb:eng:cs:media:imagemagick?rev=1647779082&amp;do=diff</link>
        <description>imagemagick

Recipes / Procedures

Compositing / applying a mask

composite -compose Dst_Over base.png mask.png masked.png

Cropping and Stacking Images


for f in inputs-*; do convert &quot;$f&quot; -crop ${width}x${height}+${x_offset}+${y_offset} &quot;cropped/$f&quot;; done
convert -append cropped/* vertically-stacked.ext</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:inkscape?rev=1642944474&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-01-23T13:27:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Inkscape Tips and Tricks</title>
        <link>https://petermetz.de/kb:eng:cs:media:inkscape?rev=1642944474&amp;do=diff</link>
        <description>Inkscape Tips and Tricks</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:instaloader?rev=1694332701&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-10T07:58:21+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Instaloader</title>
        <link>https://petermetz.de/kb:eng:cs:media:instaloader?rev=1694332701&amp;do=diff</link>
        <description>Instaloader

Want to archive Instagram posts and profiles for some reason? Then you might want to look at instaloader.

In the simplest case, after doing a pip3 install instaloader, you can archive a profile using the command:

instaloader profile [profilename ...]</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:mediasitedownloader?rev=1648117731&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-03-24T10:28:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Mediasite Downloader</title>
        <link>https://petermetz.de/kb:eng:cs:media:mediasitedownloader?rev=1648117731&amp;do=diff</link>
        <description>Mediasite Downloader

The Mozilla Firefox and Google Chrome-compatible tool, MediasiteDownloader, can be used to download the video portion of online courses built upon the Mediasite CMS.

Its source repository is also available over at github.com/KLVN/MediasiteDownloader.



To download the accompanying slides, one can use the browser's Inspection tool to find the</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:pdf-archiving?rev=1642944474&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-01-23T13:27:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>PDF Archival</title>
        <link>https://petermetz.de/kb:eng:cs:media:pdf-archiving?rev=1642944474&amp;do=diff</link>
        <description>PDF Archival

Archiving Linked-to References

See PDFx. Also,


docker run --rm --mount type=bind,source=&quot;$(pwd)&quot;,target=/data darinpope/pdfx -d /data /data/$1</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:pdf-manipulation?rev=1705241152&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-01-14T14:05:52+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>PDF Creation and Manipulation</title>
        <link>https://petermetz.de/kb:eng:cs:media:pdf-manipulation?rev=1705241152&amp;do=diff</link>
        <description>PDF Creation and Manipulation

Ghostscript

unpaper

gs -r300 -dBATCH -sDEVICE=pgmraw -sOutputFile=page-%03d.pgm -dNOPAUSE input.pdf

(or for PNG files, use png16m)


unpaper --layout double --input-pages 1 --output-pages 2 --no-mask-scan
--no-border-scan --border 30,30,30,30 --deskew-scan-deviation 2
--middle-wipe 80 --sheet-size 3312,2562 page-%03d.pgm unpaper-%03d.pgm

for i in unpaper-*.pgm; do pnmtotiff $i &gt; $i.tiff; echo $i; done
tiffcp -c zip *.tiff big.tiff

tiff2pdf -z -t&quot;Title goes her…</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:start?rev=1645016265&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-02-16T12:57:45+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Media Processing Tools</title>
        <link>https://petermetz.de/kb:eng:cs:media:start?rev=1645016265&amp;do=diff</link>
        <description>Media Processing Tools</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:tts?rev=1705593748&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-01-18T16:02:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Text-to-Speech</title>
        <link>https://petermetz.de/kb:eng:cs:media:tts?rev=1705593748&amp;do=diff</link>
        <description>Text-to-Speech

AWS Polly


aws polly start-speech-synthesis-task --region eu-central-1 --profile ${AWS_PROFILE_NAME} --engine neural --output-format mp3 --voice-id Amy --text file://input.txt --output-s3-bucket-name ${BUCKET_NAME}


or, for 'Long-form' TTS,</description>
    </item>
    <item rdf:about="https://petermetz.de/kb:eng:cs:media:youtube-dl?rev=1680029982&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-03-28T18:59:42+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>youtube-dl</title>
        <link>https://petermetz.de/kb:eng:cs:media:youtube-dl?rev=1680029982&amp;do=diff</link>
        <description>youtube-dl

youtube-dl is a general purpose tool, a bit like the wget or curl for streaming videos. It is written in Python and, as such, is quite portable, but to to further simplify (and sandbox) its dependencies, etc., it can also be containerised.

Sometime in late 2021, changes at YouTube's end resulted in download speeds dropping from link-constrained to approx. 60 kbps. Between this (rather significant) constraint, and the addition of several new features, I have switched to using a fork,…</description>
    </item>
</rdf:RDF>
