Skip to content

Cum să concatenezi fișiere cu codecuri diferite în FFmpeg

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să concatenezi fișiere cu codecuri diferite în FFmpeg. We cover key concepts, practical examples, and best practices.

Problema

Ai fișiere video cu codecuri, rezoluții sau framerate-uri diferite și comanda de concatenare eșuează cu Stream parameters mismatch sau First video frame damaged. Concatenarea directă cu -c copy nu funcționează când codecurile diferă.

Soluția rapidă

Fix 1: Concat Filter pentru Codecuri Diferite

GRESIT — încercând concat protocol cu codecuri diferite:

ffmpeg -i "concat:file1.mp4|file2.avi" -c copy output.mp4
# Stream parameters mismatch — nu funcționează

CORECT — folosește concat filter care transcodă automat:

ffmpeg -i file1.mp4 -i file2.avi -filter_complex \
    "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" \
    -map "[outv]" -map "[outa]" output.mp4

Fix 2: Rezoluții Diferite — Scalare Automată

GRESIT — concat filter cu rezoluții diferite produce cadre deformate:

ffmpeg -i file1.mp4 -i file2.mp4 -filter_complex \
    "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" \
    -map "[outv]" -map "[outa]" output.mp4
# (dacă rezoluțiile diferă, output-ul va fi distorsionat)

CORECT — scalează înainte de concatenare:

ffmpeg -i file1.mp4 -i file2.mp4 -filter_complex \
    "[0:v]scale=1920:1080,v0]; [1:v]scale=1920:1080[v1]; \
     [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
    -map "[outv]" -map "[outa]" output.mp4

Fix 3: Frame Rate Diferit

ffmpeg -i file1.mp4 -i file2.mp4 -filter_complex \
    "[0:v]fps=30[v0]; [1:v]fps=30[v1]; \
     [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
    -map "[outv]" -map "[outa]" output.mp4

Fix 4: Concat pentru Streamuri Fără Audio

ffmpeg -i file1.mp4 -i file2.mp4 -filter_complex \
    "[0:v][1:v]concat=n=2:v=1:a=0[outv]" \
    -map "[outv]" output.mp4
# a=0 indică faptul că nu există streamuri audio

Fix 5: Codecuri Audio Diferite

ffmpeg -i file1.mp4 -i file2.mp4 -filter_complex \
    "[0:v][0:a]aresample=48000[av]; [1:v][1:a]aresample=48000[bv]; \
     [av][bv]concat=n=2:v=1:a=1[outv][outa]" \
    -map "[outv]" -map "[outa]" output.mp4

Folosește DodaTech's Format Converter pentru a standardiza toate fișierele înainte de concatenare.

Prevenție

  • Standardizează codecurile, rezoluțiile și framerate-urile înainte de concatenare.
  • Folosește concat filter în loc de concat protocol când fișierele diferă.
  • Adaugă filtre de scalare și fps înainte de concatenare.
  • Verifică streamurile audio — asigură-te că toate au același sample rate.
  • Testează pe un segment scurt de 5 secunde din fiecare fișier.

Greșeli comune

  1. Folosirea concat protocol pentru fișiere cu codecuri diferite — protocolul cere parametri identici.
  2. Neglijarea scalării — rezoluții diferite produc output distorsionat.
  3. Ignorarea framerate-ului — framerate-uri diferite cauzează sync-uri greșite.
  4. Omisiunea streamurilor audio — unele fișiere fără audio sparg filtrul concat.
  5. Lipsa etichetelor corecte — filter_complex necesită etichete precise pentru conectarea streamurilor.

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

Scrie o comandă care concatenează 2 fișiere cu codecuri și rezoluții diferite, aplicând scalare și sincronizare audio automată.

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

FAQ

### Când ar trebui să folosesc concat filter în loc de concat protocol?

Folosește concat filter când fișierele au codecuri, rezoluții sau framerate-uri diferite. Folosește concat protocol doar când toate fișierele sunt identice din punct de vedere tehnic.

Pot concatena fișiere cu și fără audio?

Da, dar trebuie să setezi a=0 dacă niciun fișier nu are audio, sau să adaugi un track audio silențios pentru fișierele fără audio: [1:v]null[v1]; anullsrc[silent].

De ce output-ul are sync greșit la concatenare?

Frame rate-urile diferite cauzează pierderea sincronizării. Adaugă filtrul fps uniform: [0:v]fps=30[v0]; [1:v]fps=30[v1].

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro