FFMPEG

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.