Code

Scriptip: met ffmpeg video samenvoegen

Soms krijg ik de vraag of ik even wat filmpjes aan elkaar wil plakken. Ik ben geen echte kenner van studio-software, zoals Adobe Premiere etc. Het editen van filmpjes vind ik doorgaans te tijdrovend, want ik ben al blij als ik alles netjes in mapjes en backup krijg.

Waar ik echt een hekel aan heb is dat bij het ruwweg aan elkaar plakken van een paar filmpjes, alles opnieuw ‘gerenderd’ moet worden. Dus ik wil van 5 bestanden 1 maken, zonder dat beeldje voor beeldje opnieuw berekend wordt. Kan anders uren duren.

Het zwitsers zakmes voor video en geluid conversie en bewerking is ffmpeg. Mits de ‘command-line’ je niet intimideert althans. Na downloaden en installeren kun je de commando’s gebruiken. Het ‘joinen’ van video bestaat uit 2 stappen.

  1. De bestanden uitpakken naar data, aangezien mp4 een soort envelop om de data heen is.
  2. Deze tussenbestanden achter elkaar zetten in 1 bestand.

Het uitpakken is als volgt opgebouwd, uitleg mag je ook overslaan:

  • “ffmpeg” om het programma aan te roepen.
  • “-i” staat voor input. Type hier achter de bestandsnaam.
  • “-c copy”, c staat voor codec. Als er ‘copy’ achter staat bereken je niets opnieuw maar kopieert de data zonder conversie naar het nieuwe bestand.
  • “-bsf:v h264_mp4toannexb” zegt iets over de bitstream, de data van de film zelf .
  • “-f mpegts” gevolgd door een bestandsnaam. “-f” staat voor file (bestand) wat het moet opleveren.

Het aan elkaar knopen gaat zo:

  • “ffmpeg” om het programma aan te roepen.
  • “-i” staat voor input. Hier stoppen we nu alle tussenbestanden in 1x in.
  • “concat” staat voor concateneren, aan elkaar plakken. De bestanden krijgen een pipe | tussen de namen.
  • Nog wat code voor de audio.
  • Tot slot de bestandsnaam van het totale bestand, hier “output.mp4” genoemd.

Voor 5 filmpjes die “scene” heten met een nummer, wordt dat in Powershell:


ffmpeg -i scene01.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts scene01.ts
ffmpeg -i scene02.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts scene02.ts
ffmpeg -i scene03.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts scene03.ts
ffmpeg -i scene04.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts scene04.ts
ffmpeg -i scene05.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts scene05.ts
ffmpeg -i "concat:scene01.ts|scene02.ts|scene03.ts|scene04.ts|scene05.ts" -c copy -bsf:a aac_adtstoasc output.mp4

Tip: commando’s kun je makkelijk in Excel opbouwen door bovenstaande in kolommen naast elkaar te zetten. In de laatste kolom maak ik het totale commando door met A2&B2&C2&… etc alle tekst aan elkaar te rijgen. Je kunt dan makkelijker ‘spelen’ met de opties zonder handmatig alles te typen.

 

 

Scriptip: sites en mappen openen voor je maandelijkse archief

Vanaf ongeveer 2007 scan ik mijn post, zodat ik makkelijk bij polissen, facturen en andere belangrijke gegevens kan. Dat gaat in een mappen/bestanden archief, waarbij de bestandsnaam altijd de afzender en datum bevat. Gelukkig krijg ik steeds minder papieren post, dus dat scheelt veel scan werk. Het enige nadeel is dat de pdf-jes overal online staan. Dus in plaats van één brievenbus, staan er bestanden bij mijn zorgverzekeraar, mijn telecom-provider, mijn overheid etc. Het gekke van digitale post is op de één of andere manier toch, dat het niet in je digitale brievenbus (mail) komt.

Ik laat deze bestanden echter daar niet zomaar staan, ik wil een eigen kopie voor in mijn archief. Tot nu toe ging ik, wanneer ik er aan dacht, wat sites af en sloeg aan het downloaden. Dat kan makkelijker, met PowerShell en zit standaard in Windows. Voor degenen die nog DOS in hun digitaal rijbewijs haalden: een soort batchbestanden op steroïden. Laat je niet afschrikken door je dos-commando-nachtmerries van toen.

Onderstaande code kun je copy/pasten in PowerShell en bestaat steeds uit 2 delen, zodat bij elke site de respectieve map op mijn PC opent:

  • Open de browser (Chrome) met het adres dat er achter staat.
  • Open de Verkenner (Explorer) met de map die er achter staat.

De eerste keer moet je natuurlijk de sites en mappen aanpassen aan je eigen voorkeur. Enfin, ik zit dus bij Ziggo, Oxxio, T-Mobile en Amazon, maar dat is ter illustratie en je ziet een inkijkje in mijn mappenboom. De lijst kun je zo lang maken als nodig is.

Één keer in de maand laat ik dit script lopen zodat ik niets vergeet en up-to-date ben. De code is alsvolgt:

start chrome https://www.ziggo.nl/mijn_ziggo/#mijn-gegevens/facturen
start explorer "C:\Users\joeldebruijn\Google Drive\Joel\Documenten\Telecom\Ziggo\2017"
start chrome https://mijn.oxxio.nl/energiemonitor/mijn-verbruik/
start explorer "C:\Users\joeldebruijn\Google Drive\Joel\Documenten\Wonen\Oxxio\2017"
start chrome https://www.t-mobile.nl/my/facturen
start explorer "C:\Users\joeldebruijn\Google Drive\Joel\Documenten\Telecom\T-Mobile\2017"
start chrome https://console.aws.amazon.com/billing/home?#/bill
start explorer "C:\Users\joeldebruijn\Google Drive\Joel\Documenten\Telecom\Amazon"