<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>FFmpeg</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="../node_modules/reveal.js/css/reveal.css"> <link rel="stylesheet" href="../node_modules/reveal.js/css/print/pdf.css" media="print"> <link rel="stylesheet" href="../node_modules/reveal.js/css/theme/black.css"> <link rel="stylesheet" href="../node_modules/highlight.js/styles/solarized-dark.css"> <link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,700|Fira+Mono" rel="stylesheet"> <style> body * { font-family: "Fira Sans", Roboto, Helvetica, sans-serif !important; } code { font-family: "Fira Mono", "Roboto Mono", monospace !important; } </style> <script> var link = document.createElement( 'link' ); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = window.location.search.match( /print-pdf/gi ) ? '../node_modules/reveal.js/css/print/pdf.css' : '../node_modules/reveal.js/css/print/paper.css'; document.getElementsByTagName( 'head' )[0].appendChild( link ); </script> </head> <body> <div class="reveal"> <div class="slides"> <section data-background-image="img/cinema.jpg"> <h1>FFmpeg</h1> Muldimedia manipulation made easy <aside class="notes"> <ul> <li>I’d like to tell you about…</li> <li>You might not know it</li> </ul> </aside> </section> <section> <section data-background-image="img/matrix.jpg"> <h2>What is FFmpeg?</h2> <aside class="notes"> <ul> <li>You might ask yourself:</li> <li>Why do I have to know something about ffmpeg?</li> <li>Very popular video sites like YouTube use it</li> <li>I’m going to start with a quick introduction to ffmpeg</li> </ul> </aside> </section> <section data-background-image="img/cat.jpg"> <h3>A/V manipulation</h3> <ul> <li class="fragment fade-down">one <em>format</em> to another</li> <li class="fragment fade-down">reduce the file size (and quality)</li> <li class="fragment fade-down">draw text on some fancy graphics while playing music</li> </ul> <aside class="notes"> <ul> <li>main purpose: Manipulation</li> <li>manipulation is not bad!</li> <li>can be as simple as: one format to another</li> <li>no time to explain, why format does not fit well</li> <li>more compex case: reduce the file size and obviously the quality</li> <li>another compex case: draw text on some fancy graphics while playing music</li> </ul> </aside> </section> <section data-background-image="img/construction.jpg"> <h3>practical examples</h3> <pre class="fragment"><code class="bash" data-trim> ffmpeg -i foo.mp4 bar.mp4 </code></pre> <pre class="fragment"><code class="bash" data-trim> ffmpeg -i foo.mp4 -c:v libx264 -crf 28 \ -vf "scale=-2:720" -c:a aac -b:a 128k bar.mp4 </code></pre> <pre class="fragment"><code class="bash" data-trim> ffmpeg -i in.mp4 -b:v 1800k -minrate 900k -maxrate 2160k \ -tile-columns 2 -g 240 -threads 8 -deadline good \ -crf 31 -c:v libvpx-vp9 -c:a libopus -ac 2 -vbr on \ -b:a 96k -c:s copy -map 0 -pass 1 -cpu-used 1 out.mkv </code></pre> <pre class="fragment"><code class="bash" data-trim> ffmpeg -i in.mp4 -b:v 1800k -minrate 900k -maxrate 2160k \ -tile-columns 4 -g 240 -threads 8 -deadline good \ -crf 31 -c:v libvpx-vp9 -c:a libopus -ac 2 -vbr on \ -b:a 96k -c:s copy -map 0 -pass 2 -cpu-used 1 out.mkv </code></pre> <aside class="notes"> <ul> <li>so let’s get our hands dirty</li> <li>the first is mostly quite useless</li> <li>the second one basically reduces the file size</li> <li>the big ones are used in my production setup</li> <li>they change the format of the video and optimize it to achieve smaller sizes with only little quality loss</li> </ul> </aside> </section> </section> <section data-background-video="img/facepalm.mp4"> <h3>End</h3> <aside class="notes"> <ul> <li>so finally, we are at the end</li> <li>You’ll most likely say: “I’ll never use ffmpeg”</li> </ul> </aside> </section> </div> </div> <script src="../node_modules/reveal.js/lib/js/head.min.js"></script> <script src="../node_modules/reveal.js/js/reveal.js"></script> <script> Reveal.initialize({ controls: true, progress: true, history: true, center:true, width: 1280, height: 800, transition: 'slide', // none, fade, slide, convex, concave, zoom dependencies: [ // Syntax highlight for <code> elements { src: '../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, // Zoom in and out with Alt+click { src: '../node_modules/reveal.js/plugin/zoom-js/zoom.js', async: true }, // Speaker notes { src: '../node_modules/reveal.js/plugin/notes/notes.js', async: true }, ] }); </script> </body> </html>