Sử dụng bản sao -c trong ffmpeg để trích xuất các khung mong muốn


0

Ngày tốt.

Tôi hiện đang làm việc trên một dự án để tóm tắt video giám sát. Ý tưởng là đọc các khung bằng OpenCV, thực hiện phát hiện tiền cảnh và phân loại người với phương pháp học sâu.

Vì mã hóa với x264 chiếm tài nguyên lớn của CPU, tôi muốn sử dụng bản sao -c trong ffmpeg để tránh mã hóa. Tôi có thể nhận ra các chỉ số của các khung có liên quan đến người di chuyển hoặc dấu thời gian tương ứng, có cách nào để tôi có thể sử dụng codec sao chép để tạo video kết quả từ video nguồn mà không cần chuyển mã không?

Don Zhang 6 Tháng 11 2018 09:03
nguồn

Tôi đã tìm kiếm trên Internet và tìm ra cách chia video với dấu thời gian và sau đó hợp nhất chúng với concat. Tuy nhiên, vì các video được mã hóa H264, tôi không biết cách giải quyết vấn đề keyframe, có cách nào khác không?
Don Zhang 6 Tháng 11 2018 03:28

1
điều này có thể giúp ( stackoverflow.com/a/11175851/127971 ), mặc dù, tôi đã tìm thấy một vấn đề tương tự, khi cắt video thành từng mảnh, khi bạn dán nó lại với nhau, video / âm thanh sẽ không chuyển tiếp trơn tru sang đoạn tiếp theo, có thể là do không tách trên các khung hình chính. Để có video mượt mà, tôi phải mã hóa lại toàn bộ video. Điều này là nhiều hơn do cách thức phân tách hoạt động, tuy nhiên, và không phải là một vấn đề với việc ghép mỗi se.
michael 6 Tháng 11 2018 03:43

Cảm ơn bạn, tôi sẽ xem xét các phương pháp sử dụng concat
Don Zhang 6 Tháng 11 2018 09:13

Câu trả lời:


0

Không, bạn không thể chỉ lấy các khung riêng lẻ của video đầu vào. Các khung này có thể được mã hóa theo cách chúng tham chiếu các khung khác và yêu cầu chúng giải mã. Bạn không thể tránh mã hóa lại, trừ khi video đầu vào của bạn chỉ bao gồm các khung hình I.

Nếu bạn đọc video của mình với OpenCV để phân tích các khung cần thiết, bạn cũng có thể sử dụng trực tiếp OpenCV để xuất các khung có liên quan dưới dạng hình ảnh JPG (hoặc tương tự). Sau đó, bạn có thể ghép chúng lại với nhau dưới dạng video với ffmpeg. Hoặc, sử dụng VideoWriter lớp từ OpenCV để tạo video đầu ra nhanh chóng.

Tùy thuộc vào trường hợp sử dụng của bạn (và tôi cho rằng đây là một dự án nghiên cứu mà bạn sử dụng một bộ video đầu vào lớn để huấn luyện / xác thực mô hình), việc chuyển đổi mọi video đầu vào thành video chỉ có khung hình I (ví dụ: sử dụng ffv1 nếu bạn muốn lossless) và sau đó làm việc với điều đó.

slhck 6 Tháng 11 2018 09:03
nguồn

Cảm ơn bạn vì câu trả lời. Tôi đã thử VideoWriter nhưng phải mất rất nhiều tài nguyên của CPU để mã hóa trong H264 và thời gian sử dụng là rất lâu. Tôi không có GPU để tăng tốc quá trình mã hóa nên tùy chọn duy nhất là sao chép từ video nguồn.
Don Zhang 6 Tháng 11 2018 09:17

Và tôi chỉ nhìn vào ffmpeg.org/ và thấy rằng phân khúc đó có thể hữu ích. Nhưng có vẻ như nó chỉ có thể chia video với khoảng thời gian cố định, có cách nào để tôi có thể chia chúng với cấu hình của riêng mình không? ví dụ. 00:00:05 đến 00:00:10 và 00:00:13 đến 00:00:27
Don Zhang 6 Tháng 11 2018 09:22

Bạn có thể sử dụng muxer phân đoạn với thời gian tùy chỉnh (xem -segment_times tùy chọn) nhưng điều này cũng sẽ yêu cầu các khung hình chính để phân chia đúng.
slhck 6 Tháng 11 2018 10:18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.