Skip to content

Cum să concatenezi segmente video cu FFmpeg (Concat Demuxer)

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să concatenezi segmente video cu FFmpeg (Concat Demuxer). We cover key concepts, practical examples, and best practices.

Problema

Ai mai multe segmente video pe care vrei să le unești într-un singur fișier. Concat demuxer-ul din FFmpeg oferă cea mai rapidă metodă, dar necesită formate identice și o listă de fișiere corectă.

Soluția Rapidă

Fix 1: Concat cu demuxer (recomandat)

GREȘIT — unirea manuală cu instrumente nespecializate:

cat part1.mp4 part2.mp4 > combined.mp4
# Corupe fișierul MP4

CORECT — folosește concat demuxer-ul:

# Creează fișierul listă
echo "file 'part1.mp4'" > list.txt
echo "file 'part2.mp4'" >> list.txt
echo "file 'part3.mp4'" >> list.txt

# Concatenare
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

Fix 2: Concat cu filter complex

ffmpeg -i part1.mp4 -i part2.mp4 -i part3.mp4 \
    -filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
    -map "[outv]" -map "[outa]" output.mp4

Fix 3: Concat cu protocol concat

ffmpeg -i "concat:part1.mp4|part2.mp4|part3.mp4" -c copy output.mp4

Fix 4: Generare automată listă de fișiere

# Pentru toate fișierele MP4 dintr-un director
for f in *.mp4; do echo "file '$f'" >> list.txt; done
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

Fix 5: Concat cu conversie (formate diferite)

GREȘIT — concat cu formate diferite:

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
# Eroare dacă segmentele au codecuri diferite

CORECT — convertește mai întâi la același format:

# Convertește toate segmentele la același format
for f in segment_*.mp4; do
    ffmpeg -i "$f" -c:v libx264 -c:a aac -vf "fps=30,scale=1920:1080" "conv_$f"
done

# Apoi concatenează
for f in conv_*.mp4; do echo "file '$f'" >> list.txt; done
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

Folosește DodaTech Video Joiner pentru a uni segmente video rapid, fără a scrie comenzi manuale.

Prevenție

  • Toate segmentele trebuie să aibă același codec, rezoluție și framerate.
  • Folosește -c copy pentru concatenare rapidă (fără re-encode).
  • Folosește -safe 0 pentru căi relative în fișierul listă.
  • Pentru formate diferite, folosește filter_complex.

Greșeli Comune cu Concat

  1. Segmente cu specificații diferite — codecuri, rezoluții sau framerate-uri diferite cauzează erori.
  2. Căi incorecte în list.txt — FFmpeg nu găsește fișierele dacă căile sunt greșite.
  3. Uitarea lui -safe 0 — FFmpeg blochează căile relative din motive de securitate.

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

Exercițiu Practic

Scrie o comandă care generează un fișier list.txt pentru toate fișierele .mp4 dintr-un director, apoi concatenează-le cu ffmpeg folosind concat demuxer și stream copy.

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

FAQ

### Care metodă de concatenare este cea mai rapidă?

Concat demuxer-ul cu -c copy este cea mai rapidă, deoarece copiază streamurile fără re-encode. Este ideală când toate segmentele au aceleași specificații.

Ce fac dacă segmentele au codecuri diferite?

Folosește filter_complex cu parametrul concat pentru a re-encodinga și unifica streamurile. Dezavantajul este că durează mai mult.

De ce primesc "Unsafe file name" la concat?

Pentru că FFmpeg blochează căile relative din motive de securitate. Adaugă -safe 0 pentru a permite căi relative.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro