EDIT: Đột nhiên, với cùng một tập lệnh trên cùng một phần cứng, vấn đề không còn nữa. Tôi vẫn tò mò về nguyên nhân, nhưng cho đến khi tôi có thể tái tạo nó một lần nữa, có vài lựa chọn cho chẩn đoán. Lời xin lỗi của tôi.
Tôi đang sử dụng FFMPEG để nhận nguồn cấp dữ liệu trực tiếp từ một số webcam. Khi các nguồn cấp dữ liệu độc lập (nói cách khác, mỗi v4l2
đầu vào chạy qua đường ống riêng của nó bên trong đầu ra filter_complex
của chính nó xv
), mọi thứ đều hoạt động rất tốt: có độ trễ nửa giây, tôi có thể sống và tất cả các video đều chạy trơn tru .
Tôi muốn có các video này được ghép lại với nhau, cả để xem trực tiếp và cho bản sao nó lưu vào đĩa. Nhưng khi tôi thử điều này, với một loạt overlay
s hoặc với hstack
+ vstack
, video bắt đầu nói lắp: một nguồn cấp dữ liệu sẽ chạy trơn tru trong vài giây trong khi các nguồn cấp khác vẫn chạy, một giây khác sẽ chạy trong vài giây trong khi lần đầu tiên đóng băng , v.v. Video vẫn đang ở thời gian thực, vì vậy nó không khủng khiếp cho mục đích bảo mật, nhưng nó khiến việc di chuyển trở nên rất khó khăn.
Có bất cứ điều gì tôi có thể làm để khắc phục điều này, hoặc ít nhất là giảm bớt nói lắp? Tôi sẽ ổn với tốc độ khung hình thấp hơn, miễn là nó phù hợp.
Kịch bản hoạt động:
ffmpeg \
-f lavfi -thread_queue_size 1024 -i color=s=${size}:c=000000 \
-f v4l2 -thread_queue_size 1024 -video_size $size -i $video_ne \
-f v4l2 -thread_queue_size 1024 -video_size $size -i $video_sw \
-f v4l2 -thread_queue_size 1024 -video_size $size -i $video_se \
-f alsa -thread_queue_size 1024 -i $audio1 \
-f alsa -thread_queue_size 1024 -i $audio2 \
-filter_complex "
[0:v] fifo, setpts=PTS-STARTPTS [v0];
[1:v] fifo, setpts=PTS-STARTPTS [v1];
[2:v] fifo, setpts=PTS-STARTPTS [v2];
[3:v] fifo, setpts=PTS-STARTPTS [v3]" \
-map "[v0]" -f xv - \
-map "[v1]" -f xv - \
-map "[v2]" -f xv - \
-map "[v3]" -f xv -
Kịch bản không:
ffmpeg \
-f lavfi -thread_queue_size 1024 -i color=s=${size}:c=000000 \
-f v4l2 -thread_queue_size 1024 -video_size $size -i $video_ne \
-f v4l2 -thread_queue_size 1024 -video_size $size -i $video_sw \
-f v4l2 -thread_queue_size 1024 -video_size $size -i $video_se \
-f alsa -thread_queue_size 1024 -i $audio1 \
-f alsa -thread_queue_size 1024 -i $audio2 \
-filter_complex "
[0:v] fifo, setpts=PTS-STARTPTS [v0];
[1:v] fifo, setpts=PTS-STARTPTS [v1];
[2:v] fifo, setpts=PTS-STARTPTS [v2];
[3:v] fifo, setpts=PTS-STARTPTS [v3];
[v0][v1] hstack [tmp1];
[v2][v3] hstack [tmp2];
[tmp1][tmp2] vstack [vout]"
-map "[vout]" -f sdl2 -
(Hiện tại tôi chỉ sử dụng ba video vì tôi có bốn lõi CPU.)