Kéo một khung cụ thể tại thời điểm hiện tại bằng cách sử dụng VLC [đã đóng]


2

Tôi đang cố gắng tạo bất kỳ loại lệnh nào trong python hoặc shell để kéo một khung hình cụ thể từ video đang được phát hoặc phát trực tuyến trên vlc.

Hãy tưởng tượng một kịch bản mà tôi có một tệp video, tôi mở nó trên VLC và tôi bấm phát. Tôi kéo khung hình đầu tiên tôi gặp trong python hoặc sử dụng lệnh shell, thực hiện một số xử lý và khi quá trình xử lý hoàn tất, tôi chụp một khung hình khác vào thời điểm chính xác mà video đạt được.

Thành thật mà nói, nếu tôi thậm chí có thể lấy VLC để cung cấp cho tôi "thời gian" hiện tại của video tôi đang phát (bao nhiêu giờ: phút: giây hoặc bất cứ điều gì chúng tôi đã trải qua trong phim), điều đó sẽ làm được và tôi có thể sử dụng ffmpeg .

Tôi đang chạy linux 14.04.

Câu trả lời:


2

nếu tôi thậm chí có thể lấy VLC để cung cấp cho tôi "thời gian" hiện tại của video tôi đang chơi

Điều này có thể thực hiện được. VLC cung cấp nhiều giao diện. Hãy sử dụng telnet.


Bước 1: bật telnet trong VLC

Phương pháp một lần theo yêu cầu:

vlc --extraintf telnet --telnet-port 4212 --telnet-password "foobar" video_file_to_play.avi

Hoặc cấu hình vĩnh viễn. Chạy VLC, Công cụ -> Tùy chọn (hoặc Ctrl+ P), sau đó:

cấu hình1

cấu hình2

Lưu ý: phương pháp vĩnh viễn này yêu cầu bạn khởi động lại VLC.


Bước 2: kiểm tra

Bây giờ bạn có thể điều khiển VLC bằng telnet. Nhập mật khẩu đúng khi được nhắc. Thí dụ:

$ telnet localhost 4212
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
VLC media player 2.2.2 Weatherwax
Password: 
Welcome, Master
> get_time
30
>

Như bạn có thể thấy, lệnh để lấy thời gian chơi hiện tại là get_time. Gõ helpđể tìm hiểu thêm các lệnh VLC, quitđể thoát. Có thể bạn sẽ thấy snapshothữu ích.


Bước 3: sử dụng tập lệnh

Khá là một đường ống đơn giản. Ở đây tôi sử dụng ncthay vì telnet(và foobarlà mật khẩu của tôi, hãy sử dụng mật khẩu của bạn):

printf '%s\n' "foobar" "get_time" | nc localhost 4212

VLC của tôi trả về:

VLC media player 2.2.2 Weatherwax
Password: ����
Welcome, Master
87
> Bye-bye!

vì vậy tôi sử dụng headtailchỉ trích xuất dòng liên quan:

printf '%s\n' "foobar" "get_time" | nc localhost 4212 | head -n 4 | tail -n 1

Thật không may, độ phân giải thời gian là 1 giây. Tôi đã không tìm thấy một lệnh để lấy số khung hiện tại hoặc hơn.

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.