Skip to content

Cum să tai video la keyframe-uri precise cu FFmpeg

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn about Cum să tai video la keyframe. We cover key concepts, practical examples, and best practices.

Problema

La tăierea videoclipurilor fără re-encode, FFmpeg taie la keyframe-uri (I-frame-uri). Dacă nu controlezi poziționarea keyframe-urilor, tăierea poate fi inexactă, începând cu câteva secunde mai devreme sau mai târziu decât intenționai.

Soluția Rapidă

Fix 1: Căutare exactă la keyframe

GREȘIT — căutare după -i (precisă, dar lentă pentru fișiere mari):

ffmpeg -i input.mp4 -ss 00:01:23 -c copy output.mp4
# Poate tăia oriunde, nu doar la keyframe-uri (dar c copy = keyframe)

CORECT — căutare înainte de -i pentru tăiere la keyframe:

ffmpeg -ss 00:01:23 -i input.mp4 -c copy output.mp4
# Taie la cel mai apropiat keyframe înainte de 1:23

Fix 2: Forțarea keyframe-urilor precise

# Re-encodează cu keyframe-uri la fiecare 2 secunde (60fps → -g 120)
ffmpeg -i input.mp4 -c:v libx264 -g 60 -keyint_min 60 -sc_threshold 0 -c:a copy output.mp4

# Acum poți tăia precis la keyframe-uri
ffmpeg -ss 00:01:00 -i output.mp4 -c copy -t 30 segment.mp4

Fix 3: Tăiere exactă cu re-encode

# Precizie la nivel de frame cu re-encode
ffmpeg -i input.mp4 -ss 00:01:23.456 -to 00:01:30.123 \
    -c:v libx264 -crf 23 -c:a aac output.mp4

Fix 4: Corectarea tăierii inexacte

# Dacă tăierea cu -c copy a început prea devreme, ajustează -ss
# De exemplu, pentru 1:23 adevărat, încearcă 1:23.5
ffmpeg -ss 00:01:23.5 -i input.mp4 -c copy -t 30 output.mp4

Fix 5: Verificarea poziției keyframe-urilor

# Listează tipurile de cadre
ffprobe -v error -select_streams v:0 -show_frames -of csv=p=0 input.mp4 \
    | grep -E "^(I|P|B)" | head -20
# I = keyframe, P = predicted, B = bidirectional

Folosește DodaTech Keyframe Visualizer pentru a vedea distribuția keyframe-urilor și a planifica tăieturile precise.

Prevenție

  • -ss înainte de -i + -c copy taie la cel mai apropiat keyframe.
  • Pentru precizie maximă fără re-encode, re-encodează cu keyframe-uri dese (-g 30).
  • Verifică tipurile de cadre cu ffprobe înainte de tăiere.
  • -ss după -i cu re-encode oferă precizie la nivel de frame.

Greșeli Comune cu Keyframe Cutting

  1. Așteptarea ca -c copy să taie exact la timestamp — stream copy taie la keyframe-uri, nu la frame-ul exact.
  2. Keyframe-uri prea rare — GOP mare (de exemplu 250) înseamnă tăieturi inexacte de până la 10 secunde.
  3. Uitarea lui -sc_threshold 0 — scene cut detection poate introduce keyframe-uri în locuri neașteptate.

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ă FFmpeg care re-encodează un videoclip cu keyframe-uri la fiecare 1 secundă (30fps) și -sc_threshold 0, apoi taie un segment de 10 secunde începând de la 5 secunde.

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

FAQ

### Ce este un keyframe?

Keyframe-ul (I-frame) este un cadru complet, care nu depinde de alte cadre pentru decodare. Stream copy poate tăia doar la keyframe-uri, deoarece cadrele P și B au nevoie de cadrele anterioare.

Cum aleg distanța dintre keyframe-uri?

Pentru tăieturi precise, folosește -g 30 (keyframe la fiecare secundă la 30fps). Pentru compresie mai bună, -g 250 (keyframe la fiecare ~8 secunde).

De ce tăierea mea cu -c copy începe cu 2 secunde mai devreme?

Pentru că cel mai apropiat keyframe înainte de timestamp-ul specificat este la 2 secunde în urmă. Re-encodează cu -g 30 pentru keyframe-uri mai dese.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro