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.

 

 

One comment

  1. Excel? Wat is dat? ;-P.

    In onderstaande PS code hoef je alleen maar de scene0# regels aan te passen, verwijderen of toe te voegen…

    $strCat = “concat:”
    “scene01”,
    “scene02”,
    “scene03”,
    “scene04”,
    “scene05” | ForEach-Object {
    ffmpeg -i “$($_).mp4” -c copy -bsf:v h264_mp4toannexb -f mpegts “$($_).ts”
    $strCat += “$($_).ts|”
    }
    # de volgende regel wist het laatste teken van de string, in dit geval het teken: |
    $strCat = $strCat -replace “.{1}$”
    ffmpeg -i $strCat -c copy -bsf:a aac_adtstoasc output.mp4

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s