Bhinish Dhiman

Memotong video tanpa encode ulang: di titik mana potongan benar-benar dimulai

Diterjemahkan dari versi asli berbahasa Inggris. Baca versi asli

Potongan copy-only selalu dimulai di keyframe. Dengan langkah 0.1 detik di enam file, titik awal yang diminta tepat kena hanya pada 0.5% hingga 9.2% kasus; selisih rata-ratanya 4.06 s pada default x264, 0.96 s pada interval keyframe 2 s, dan 0.46 s pada 1 s. Frame tambahan tetap ada di file; edit list menyembunyikannya.

Setiap pemotong video lossless menyebut bahwa potongannya akan melompat ke keyframe. Tidak satu pun menyebut seberapa jauh, pada file yang benar-benar Anda miliki. Kami mengukurnya pada enam file.

Dua istilah

Keyframe adalah frame yang disimpan sebagai gambar utuh. Setiap frame di antara dua keyframe disimpan sebagai selisih dari frame di sekitarnya, jadi decoder yang mulai di titik lain tidak punya dasar untuk menerapkan selisih tersebut. Copy-only trim (potongan salin saja) memindahkan paket yang sudah di-encode ke container baru tanpa mendekodenya; potongan ini tidak bisa dimulai di tengah rangkaian selisih, jadi awal sebenarnya dari salinan adalah keyframe terakhir di titik yang Anda minta atau sebelumnya.

Pengukurannya

Kami membuat lima file dengan FFmpeg 6.0 dan merekam file keenam dengan Chromium: klip 60 detik yang di-encode dengan default x264 pada 30 fps (keyframe setiap 250 frame); klip yang sama dengan keyframe dipaksa setiap 1 s dan setiap 2 s; slideshow 42 detik berisi empat belas foto dengan deteksi scene-cut x264 tetap aktif; slideshow yang sama sebagai VP9 dalam WebM dengan interval 240 frame; dan rekaman 9 detik dari dua halaman di situs ini, persis seperti yang ditulis Playwright. Untuk setiap file, kami meminta EncodedPacketSink.getKeyPacket() milik mediabunny, yaitu pemanggilan di balik angka yang ditampilkan alat trim kami, untuk mencari keyframe sebelum setiap titik dari 0 sampai akhir dengan langkah 0.1 s, lalu mencatat selisihnya. Total 2 730 permintaan, pada 1 Oktober 2026.

File Interval keyframe Selisih rata-rata Median Persentil ke-90 Terbesar Tepat Lebih dari 1 s
Default x264, 30 fps 8.33 s 4.06 s 4.03 s 7.47 s 8.30 s 0.5% 86.5%
Keyframe setiap 1 s 1.00 s 0.46 s 0.50 s 0.90 s 1.00 s 9.2% 0%
Keyframe setiap 2 s 2.00 s 0.96 s 1.00 s 1.80 s 2.00 s 4.5% 49.0%
Slideshow, scene cut setiap 3 s 3.00 s 1.46 s 1.50 s 2.70 s 3.00 s 2.9% 65.7%
VP9 WebM, interval 240 frame 8.00 s 3.83 s 3.80 s 7.10 s 8.00 s 1.2% 85.2%
Rekaman layar Chromium, VP8 5.12 s 2.29 s 2.28 s 4.30 s 5.10 s 1.1% 76.7%

Selisih rata-rata adalah setengah interval keyframe, sebagaimana mestinya untuk titik yang dipilih secara seragam. Angka yang perlu diingat ada di kolom terakhir: pada file dengan pengaturan default x264, yang dipakai sebagian besar ekspor desktop, lebih dari empat dari lima potongan dimulai lebih dari satu detik sebelum titik yang Anda pilih.

Isi file, dan yang ditampilkan player

Kami lalu menjalankan proses salinnya sendiri, dengan konfigurasi Conversion yang sama seperti alat ini, meminta 10.0 s sampai 15.0 s dari file dengan default x264. Keyframe terdekat ada di 8.333 s. Output-nya berisi 200 frame, yaitu 6.67 detik video, tetapi juga membawa edit list, instruksi MP4 yang memberi tahu player di mana presentasi dimulai. FFmpeg mendekode 150 frame darinya dan melaporkan 5.00 s. Elemen video Chromium melaporkan durasi 5.000 s. Saat diminta mengabaikan edit list, FFmpeg mendekode ke-200 frame dan melaporkan 6.67 s.

Jadi jawaban atas pertanyaan “di mana potongannya jatuh” punya dua bagian. Byte-nya dimulai di keyframe: 1.67 s gambar yang tidak Anda minta ada di dalam file, dan itulah sebabnya output lebih besar daripada porsi yang Anda simpan. Presentasinya dimulai di titik yang Anda minta, di player mana pun yang menghormati edit list, yang dalam pengujian kami mencakup Chromium dan FFmpeg. Player atau editor yang mengabaikannya akan menampilkan 1.67 s ekstra itu dan terlihat seperti memotong di tempat yang salah.

Dibandingkan encode ulang

Copy-only Dekode lalu encode ulang
Titik awal Keyframe; presentasi dipangkas oleh edit list Frame mana pun
Gambar Byte identik Generation loss, paling parah pada proses kedua
Waktu untuk klip 1080p Dibatasi kecepatan membaca file Dibatasi kecepatan meng-encode
Encoder yang dibutuhkan Tidak ada Video encoder yang berfungsi
Frame ekstra di file Hingga satu interval keyframe Tidak ada

Yang menentukan angka untuk file Anda

Interval keyframe ditentukan oleh apa pun yang meng-encode file tersebut. Ekspor yang ditujukan untuk streaming biasanya diatur ke satu atau dua detik, karena player yang melompat ke posisi tertentu dalam stream menghadapi batasan yang persis sama dengan pemotong video. Default x264 adalah 250 frame, dan perekam layar sering memakai interval yang lebih panjang lagi, karena desktop yang statis terkompresi begitu baik sehingga keyframe terasa mahal. Setelah file jadi, tidak ada yang bisa dilakukan pemotong video selain mengukur dan menyampaikannya, itulah sebabnya alat kami mencari keyframe sebenarnya untuk titik yang Anda tetapkan dan menampilkan selisihnya sebelum Anda menekan tombol.