Cum să concatenezi fișiere cu același codec în FFmpeg
In this tutorial, you'll learn about Cum să concatenezi fișiere cu același codec în FFmpeg. We cover key concepts, practical examples, and best practices.
Problema
Vrei să unești mai multe fișiere video care au același codec, aceeași rezoluție și același format, dar comanda ta eșuează cu Operation not permitted sau Non-monotonous DTS in output. Concatenarea cu același codec necesită parametri identici între fișiere.
Soluția rapidă
Fix 1: Concat Protocol pentru Fișiere Identice
GRESIT — folosind comanda simplistă fără protocol:
ffmpeg -i "concat:file1.mp4|file2.mp4" -c copy output.mp4
# (funcționează doar cu anumite formate)
CORECT — folosește concat protocol cu -c copy:
ffmpeg -i "concat:file1.ts|file2.ts|file3.ts" -c copy output.ts
Concat protocol funcționează doar cu fișiere care au exact aceleași proprietăți (codec, rezoluție, framerate, sample rate audio, număr de streamuri).
Fix 2: Verifică Compatibilitatea Fișierelor
ffprobe -v error -show_entries stream=codec_name,width,height file1.mp4
ffprobe -v error -show_entries stream=codec_name,width,height file2.mp4
# Asigură-te că toate streamurile au aceleași valori
Fix 3: Transcodă Fișierele la Același Format
Dacă fișierele nu sunt identice, transcodă-le mai întâi:
for f in file*.mp4; do
ffmpeg -i "$f" -c:v libx264 -c:a aac -s 1920x1080 -r 30 \
-pix_fmt yuv420p "fixed_$f"
done
ffmpeg -f concat -safe 0 -i <(for f in fixed_*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4
Fix 4: Concat pentru MP4 cu același codec
MP4 nu suportă concatenarea directă cu concat protocol. Folosește demuxer-ul concat:
# Creează un fișier listă (vezi articolul despre concat list file)
echo "file 'file1.mp4'" > list.txt
echo "file 'file2.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
Fix 5: Rezolvă Eroarea Non-Monotonous DTS
ffmpeg -i "concat:file1.ts|file2.ts" -c copy -fflags +genpts output.ts
# -fflags +genpts generează noi timestamp-uri pentru a evita DTS non-monotone
Folosește DodaTech's Video Merger pentru a uni fișiere video cu același codec printr-o interfață grafică.
Prevenție
- Verifică identitatea codecurilor cu
ffprobeînainte de concatenare. - Folosește același framerate, rezoluție și pix_fmt pentru toate fișierele.
- Pentru MP4, folosește demuxer-ul concat, nu protocolul concat.
- Adaugă
-fflags +genptscând întâmpini erori de DTS. - Testează pe un segment scurt înainte de concatenarea completă.
Greșeli comune
- Concatenarea fișierelor MP4 cu concat protocol — protocolul concat nu funcționează corect cu MP4 din cauza moov atom. Folosește demuxer-ul concat.
- Ignorarea diferențelor de pix_fmt — fișiere cu yuv420p și yuv422p nu pot fi concatenate direct.
- Lipsa generării DTS — fără
-fflags +genpts, timestamp-urile pot fi nemonotone. - Streamuri audio lipsă — unele fișiere pot avea audio, altele nu, ceea ce blochează concatenarea.
- Folosirea căilor relative fără
-safe 0— demuxer-ul concat refuză căi relative fără flag-ul de siguranță.
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ă 3 fișiere TS identice și apoi verifică integritatea output-ului cu ffprobe.
Acest exercițiu întărește conceptele prezentate în acest ghid. Încearcă să-l implementezi înainte de a verifica soluțiile online.
FAQ
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro