LeRobot documentation

Panduan Pengkodean Video Streaming

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Panduan Pengkodean Video Streaming

1. Gambaran umum

Encoding video streaming menghilangkan round-trip PNG tradisional selama perekaman dataset video. Sebagai gantinya:

  1. Ambil frame -> tulis PNG ke disk -> (di akhir episode) baca PNG -> encode ke MP4 -> hapus PNG

Frame dapat dikodekan secara real-time selama proses pengambilan:

  1. Ambil frame -> antre ke thread encoder -> encode langsung ke MP4

Hal ini membuat save_episode() hampir instan (video sudah terenkod saat episode berakhir) dan menghilangkan penantian pemblokiran yang sebelumnya terjadi antar episode, terutama dengan beberapa kamera dalam episode panjang.

2. Menyetel Parameter

ParameterFlag CLITipeDefaultDeskripsi
streaming_encoding--dataset.streaming_encodingboolFalseAktifkan pengkodean waktu nyata selama pengambilan
vcodec--dataset.rgb_encoder.vcodecstr"libsvtav1"Codec video. "auto" mendeteksi encoder HW terbaik
encoder_threads--dataset.encoder_threadsint \| NoneNone (otomatis)Jumlah thread per instance encoder. None akan membiarkan vcoded memutuskan
encoder_queue_maxsize--dataset.encoder_queue_maxsizeint30Frame buffer maksimum per kamera (~1 detik pada 30fps). Mengonsumsi RAM

3. Pertimbangan Performa

Streaming encoding berarti CPU meng-encode video selama loop pengambilan, bukan setelahnya. Hal ini menciptakan anggaran CPU yang harus dibagi antara:

  • Loop kontrol (membaca kamera, mengontrol robot, menulis data non-video)
  • Thread encoder (satu pool per kamera)
  • Jalankan ulang visualisasi (jika diaktifkan)
  • Sistem operasi dan proses lain

Dampak Resolusi & Jumlah Kamera

SetupThroughput (px/detik)Beban Encoding CPUCatatan
2camsx 640x480x3 @30fps55MRendahBerfungsi di sebagian besar sistem
2camsx 1280x720x3 @30fps165MSedangNyaman di sistem modern
2camsx 1920x1080x3 @30fps373MTinggiMemerlukan CPU kelas atas yang bertenaga

encoder_threads Penyetelan

Parameter ini mengontrol berapa banyak thread yang digunakan secara internal oleh setiap instance encoder:

  • Nilai yang lebih tinggi (misalnya, 4-5): Enkoding lebih cepat, tetapi menggunakan lebih banyak inti CPU per kamera. Cocok untuk sistem kelas atas dengan banyak inti.
  • Nilai yang lebih rendah (misalnya, 1-2): Penggunaan CPU per kamera lebih sedikit, sehingga inti CPU tersedia untuk pengambilan gambar dan visualisasi. Cocok untuk gambar beresolusi rendah dan CPU yang mumpuni.
  • None (default): Membiarkan codec yang memutuskan. Informasi tersedia di log codec.

Backpressure dan Penghapusan Frame

Setiap kamera memiliki antrean terbatas (encoder_queue_maxsize, default 30 frame). Ketika encoder tidak mampu mengimbangi:

  1. Antrean terisi penuh (mengonsumsi RAM)
  2. Frame baru dibuang (tidak diblokir) — loop penangkapan terus berjalan tanpa terputus
  3. Peringatan dicatat: "Encoder queue full for {camera}, dropped N frame(s)"
  4. Di akhir episode, total frame yang hilang per kamera dilaporkan

Gejala Encoder yang Tertinggal

  • Sistem terasa lambat dan membeku: semua CPU berada di 100%
  • Peringatan frame yang hilang di log atau frame/FPS yang lebih rendah dari yang diharapkan dalam dataset yang direkam
  • Pergerakan robot yang tersendat: Jika CPU sangat terbebani, bahkan loop penangkapan pun dapat terpengaruh
  • Penundaan rerun yang terakumulasi: Visualisasi tertinggal dari waktu nyata

4. Enkoding yang Dipercepat Perangkat Keras

Kapan Digunakan

Gunakan encoding HW saat:

  • CPU adalah titik kemacetan (frame terlewat, gerakan robot tersendat, lag rerun)
  • Anda memiliki perangkat keras yang kompatibel (GPU atau encoder khusus)
  • Anda merekam dengan throughput tinggi (resolusi tinggi atau dengan banyak kamera)

Memilih Codec

CodecPenggunaan CPUUkuran FileKualitasCatatan
libsvtav1 (default)TinggiTerkecilTerbaikDefault. Kompresi terbaik tetapi paling intensif CPU
h264Sedang~30-50% lebih besarBagusPerangkat lunak H.264. CPU lebih rendah
Encoder HWSangat RendahTerbesarBagusMembongkar ke perangkat keras khusus. Paling cocok untuk sistem yang terbatas CPU

Encoder HW yang Tersedia

EncoderPlatformPerangkat KerasNilai CLI
h264_videotoolboxmacOSApple Silicon / Intel--dataset.rgb_encoder.vcodec=h264_videotoolbox
hevc_videotoolboxmacOSApple Silicon / Intel--dataset.rgb_encoder.vcodec=hevc_videotoolbox
h264_nvencLinux/WindowsNVIDIA GPU--dataset.rgb_encoder.vcodec=h264_nvenc
hevc_nvencLinux/WindowsNVIDIA GPU--dataset.rgb_encoder.vcodec=hevc_nvenc
h264_vaapiLinuxGPU Intel/AMD--dataset.rgb_encoder.vcodec=h264_vaapi
h264_qsvLinux/WindowsIntel Quick Sync--dataset.rgb_encoder.vcodec=h264_qsv
autoSemuaMendeteksi sistem untuk encoder HW yang tersedia. Kembali ke libsvtav1 jika tidak ada encoder HW yang ditemukan--dataset.rgb_encoder.vcodec=auto

Untuk menggunakan encoder yang dipercepat oleh HW, Anda mungkin perlu memperbarui driver GPU Anda.

libsvtav1 adalah default karena memberikan kinerja pelatihan terbaik; vcodec lain dapat mengurangi penggunaan CPU dan lebih cepat, tetapi biasanya menghasilkan file yang lebih besar dan dapat memengaruhi waktu pelatihan.

5. Pemecahan masalah

GejalaKemungkinan PenyebabPerbaiki
Sistem membeku atau gerakan robot tersendat atau visualisasi Rerun lambatCPU kekurangan (penggunaan beban 100%)Tutup aplikasi lain, kurangi throughput encoding, turunkan encoder_threads, gunakan h264, gunakan display_data=False. Jika CPU tetap berada di 100%, kemungkinan CPU tidak memadai untuk setup Anda, pertimbangkan --dataset.streaming_encoding=false atau encoding HW (--dataset.rgb_encoder.vcodec=auto)
Peringatan “Encoder queue full” atau frame yang hilang dalam datasetEncoder tidak mampu mengimbangi (Queue overflow)Jika CPU tidak berada di 100%: tingkatkan encoder_threads, tingkatkan encoder_queue_maxsize atau gunakan encoding HW (--dataset.rgb_encoder.vcodec=auto).
Penggunaan RAM tinggiAntrean terisi lebih cepat daripada encodingencoder_threads terlalu rendah atau CPU tidak memadai. Kurangi encoder_queue_maxsize atau gunakan encoding HW
File video berukuran besarMenggunakan encoder HW atau H.264Kompromi yang diharapkan. Beralih ke libsvtav1 jika CPU mengizinkan
save_episode() masih lambatstreaming_encoding adalah FalseSetel --dataset.streaming_encoding=true
Crash thread encoderCodec tidak tersedia atau pengaturan tidak validPeriksa apakah vcodec terinstal, coba --dataset.rgb_encoder.vcodec=auto
Dataset yang direkam tidak memiliki frameKelaparan CPU/GPU atau lonjakan beban sesekaliJika ~5% frame hilang, sistem Anda kemungkinan mengalami beban berlebih — ikuti rekomendasi di atas. Jika lebih sedikit frame yang hilang (~2%), hal itu kemungkinan disebabkan oleh lonjakan beban transien sesekali (sering terjadi saat startup) dan dapat dianggap sebagai hal yang wajar.

6. Konfigurasi yang Direkomendasikan

Estimasi ini bersifat konservatif; kami merekomendasikan untuk mengujinya pada konfigurasi Anda—mulai dengan beban rendah dan tingkatkan secara bertahap.

Sistem Kelas Atas: 12+ inti modern (24+ thread)

Throughput antara ~250-500M px/sec seharusnya nyaman di CPU. Untuk hasil yang lebih baik, coba HW encoding jika tersedia.

# 3camsx 1280x720x3 @30fps: Defaults work well. Optionally increase encoder parallelism.
# 2camsx 1920x1080x3 @30fps: Defaults work well. Optionally increase encoder parallelism.
lerobot-record --dataset.encoder_threads=5 ...

# 3camsx 1920x1080x3 @30fps: Might require some tuning.

Sistem Menengah: 8+ inti modern (16+ thread) atau Apple Silicon

Throughput antara ~80-300M px/sec seharusnya mungkin dicapai di CPU.

# 3camsx 640x480x3 @30fps: Defaults work well. Optionally decrease encoder parallelism.
# 2camsx 1280x720x3 @30fps: Defaults work well. Optionally decrease encoder parallelism.
lerobot-record --dataset.encoder_threads=2 ...

# 2camsx 1920x1080x3 @30fps: Might require some tuning.

Sistem Berbasis Sumber Daya Rendah: 4+ inti modern (8+ thread) atau Raspberry Pi 5

Pada sistem yang sangat terbatas, streaming encoding mungkin terlalu banyak bersaing dengan loop capture. Menonaktifkannya akan kembali ke pendekatan berbasis PNG di mana encoding terjadi di antara episode (blocking, tetapi tidak mengganggu capture). Sebagai alternatif, rekam pada throughput yang lebih rendah untuk mengurangi beban capture dan encoding. Pertimbangkan juga untuk mengubah codec menjadi h264 dan menggunakan batch encoding.

# 2camsx 640x480x3 @30fps: Requires some tuning.

# Use H.264, disable streaming, consider batching encoding
lerobot-record --dataset.rgb_encoder.vcodec=h264 --dataset.streaming_encoding=false ...

7. Catatan penutup

Performa pada akhirnya bergantung pada konfigurasi spesifik Anda — frame-per-detik, resolusi, jumlah dan beban core CPU, memori yang tersedia, panjang episode, dan encoder yang Anda pilih. Selalu uji dengan beban kerja target Anda, perhatikan kemampuan CPU & sistem Anda, dan atur encoder_threads, encoder_queue_maxsize, serta vcodec secara wajar. Meskipun demikian, konfigurasi praktis yang umum (untuk banyak aplikasi) adalah tiga kamera pada 640×480x3 @30fps; ini biasanya berjalan baik dengan pengaturan encoding video streaming bawaan di sistem modern. Selalu verifikasi bahwa dataset yang Anda rekam sehat dengan membandingkan durasi video terhadap durasi episode CLI dan memastikan jumlah baris sama dengan FPS × durasi CLI.

Update on GitHub