Skip to content

Cum să adaugi crossfade între clipuri cu FFmpeg

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să adaugi crossfade între clipuri cu FFmpeg. We cover key concepts, practical examples, and best practices.

Problema

Vrei să creezi o tranziție lină (crossfade) între două clipuri video, dar comanda ta produce o întrerupere sau tranziția video nu se sincronizează cu cea audio.

Soluția rapidă

Fix 1: Crossfade Video Simplu cu xfade

GRESIT — xfade fără parametrii de durată și offset:

ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex \
    "[0:v][1:v]xfade[outv]" -map "[outv]" output.mp4
# (lipsește offset-ul și durata — comportament imprevizibil)

CORECT — specifică tranziția, durata și offset-ul:

ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex \
    "[0:v]scale=1920:1080[v0]; [1:v]scale=1920:1080[v1]; \
     [v0][v1]xfade=transition=fade:duration=1:offset=9[outv]" \
    -map "[outv]" output.mp4
# offset = durata_clip1 - durata_tranziției

Fix 2: Crossfade Audio cu acrossfade

ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex \
    "[0:v]scale=1920:1080[v0]; [1:v]scale=1920:1080[v1]; \
     [v0][v1]xfade=transition=fade:duration=1:offset=9[outv]; \
     [0:a][1:a]acrossfade=d=1[outa]" \
    -map "[outv]" -map "[outa]" output.mp4
# acrossfade=d=1 — durata crossfade-ului audio (1 secundă)

Fix 3: Tipuri de Tranziții Crossfade

# Fade clasic:
[0:v][1:v]xfade=transition=fade:duration=1:offset=9

# Fade prin negru:
[0:v][1:v]xfade=transition=fadeblack:duration=1:offset=9

# Fade prin alb:
[0:v][1:v]xfade=transition=fadewhite:duration=1:offset=9

# Pixelizare:
[0:v][1:v]xfade=transition=pixelize:duration=1:offset=9

# Dissolve:
[0:v][1:v]xfade=transition=rectcrop:duration=1:offset=9

Fix 4: Crossfade cu 3+ Clipuri

ffmpeg -i clip1.mp4 -i clip2.mp4 -i clip3.mp4 -filter_complex \
    "[0:v]scale=1920:1080[v0]; [1:v]scale=1920:1080[v1]; [2:v]scale=1920:1080[v2]; \
     [v0][v1]xfade=transition=fade:duration=1:offset=9[t1]; \
     [t1][v2]xfade=transition=fade:duration=1:offset=18[outv]; \
     [0:a][1:a]acrossfade=d=1[t1a]; \
     [t1a][2:a]acrossfade=d=1[outa]" \
    -map "[outv]" -map "[outa]" output.mp4

Fix 5: Crossfade cu Rezoluții Diferite

ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex \
    "[0:v]scale=1920:1080[v0]; [1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[v1]; \
     [v0][v1]xfade=transition=fade:duration=1:offset=9[outv]; \
     [0:a][1:a]acrossfade=d=1[outa]" \
    -map "[outv]" -map "[outa]" output.mp4

Folosește DodaTech's Crossfade Creator pentru a previzualiza și ajusta tranzițiile între clipuri.

Prevenție

  • Calculează offset-ul: durata_clip1 - durata_crossfade.
  • Sincronizează durata xfade cu acrossfade.
  • Toate clipurile trebuie să aibă aceeași rezoluție (sau scalează-le).
  • Testează cu 2 clipuri scurte înainte de a procesa întregul montaj.
  • Verifică durata totală după crossfade.

Greșeli comune

  1. Offset incorect — crossfade-ul începe prea devreme sau prea târziu.
  2. Crossfade video fără acrossfade audio — imaginea se amestecă lin dar audio taie brusc.
  3. Rezoluții diferite — xfade eșuează dacă intrările au dimensiuni diferite.
  4. Transparență lipsă — formatul de ieșire trebuie să suporte alpha pentru anumite tranziții.
  5. Calcul greșit al offset-ului pentru al 3-lea clip — offset-ul se acumulează.

Aceste greșeli apar frecvent în codul FFmpeg real. Contribuitorii DodaTech au identificat aceste modele prin analiza proiectelor open-source și a sistemelor de producție.

Exercițiu practic

Creează un montaj din 2 clipuri cu crossfade de 1.5 secunde (video + audio), cu tranziție fadeblack, și măsoară durata totală a output-ului.

Acest exercițiu întărește conceptele prezentate în acest ghid. Încearcă să-l implementezi înainte de a verifica soluțiile online.

FAQ

### Care este diferența dintre xfade și crossfade?

În FFmpeg, filtrul se numește xfade (nu crossfade). Pentru audio, filtrul echivalent este acrossfade. xfade oferă multiple tipuri de tranziții.

Cum calculez offset-ul pentru xfade?

Offset-ul este momentul din primul clip când începe tranziția: offset = durata_clip1 - durata_tranziției. Dacă clip1 are 10 secunde și tranziția 1 secundă, offset = 9.

Ce tipuri de tranziții suportă xfade?

Peste 30: fade, fadeblack, fadewhite, slideleft, slideright, slideup, slidedown, circlecrop, rectcrop, pixelize, wipeleft, wiperight, dissolve, etc.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro