Tôi muốn tạo phim h264 hoặc divx từ các khung mà tôi tạo trong một tập lệnh python trong matplotlib. Có khoảng 100 nghìn khung hình trong bộ phim này.Tạo phim từ python mà không lưu từng khung riêng lẻ vào các tệp
Trong ví dụ trên web [ví dụ: 1], tôi chỉ thấy phương pháp lưu từng khung hình thành png và sau đó chạy mencoder hoặc ffmpeg trên các tệp này. Trong trường hợp của tôi, việc lưu từng khung hình là không thực tế. Có cách nào để có một cốt truyện được tạo ra từ matplotlib và ống nó trực tiếp đến ffmpeg, tạo ra không có tập tin trung gian?
Lập trình với C-api của ffmpeg quá khó đối với tôi [ví dụ: 2]. Ngoài ra, tôi cần một mã hóa có nén tốt như x264 như các tập tin phim nếu không sẽ là quá lớn cho một bước tiếp theo. Vì vậy, nó sẽ là tuyệt vời để gắn bó với mencoder/ffmpeg/x264.
Có điều gì có thể thực hiện với ống [3] không?
[1] http://matplotlib.sourceforge.net/examples/animation/movie_demo.html
[2] How does one encode a series of images into H264 using the x264 C API?
[3] http://www.ffmpeg.org/ffmpeg-doc.html#SEC41
Tôi chưa tìm ra cách để thực hiện việc này với thư viện hiện đang được duy trì ... (Tôi đã sử dụng pymedia trước đây, nhưng nó không còn được duy trì và sẽ không xây dựng trên bất kỳ hệ thống nào tôi sử dụng .. .) Nếu nó giúp, bạn có thể nhận được một bộ đệm RGB của một con số matplotlib bằng cách sử dụng 'buffer = fig.canvas.tostring_rgb()', và chiều rộng và chiều cao của hình trong pixel với 'fig.canvas.get_width_height()' (hoặc 'fig.bbox.width', v.v.) –
OK, cảm ơn. Điều đó rất hữu ích. Tôi tự hỏi nếu một số chuyển đổi của bộ đệm có thể được piped để ffmpeg. pyffmpeg có một trình bao bọc Cython phức tạp, được cập nhật gần đây, để đọc khung avi theo khung. Nhưng không viết. Điều đó nghe giống như một nơi có thể để bắt đầu cho một người quen thuộc với thư viện ffmpeg. Ngay cả một cái gì đó giống như imlframe của MATLAB sẽ là tuyệt vời. – Paul
Tôi đang chơi xung quanh với việc có ffmpeg đọc hoặc từ một đường ống đầu vào (với tùy chọn '-f image2pipe' để nó mong đợi một loạt ảnh) hoặc từ một ổ cắm cục bộ (ví dụ:' udp: // localhost: some_port') và viết cho các ổ cắm trong python ... Cho đến nay, chỉ một phần thành công ... Tôi cảm thấy như tôi gần như ở đó, mặc dù ... Tôi chỉ không đủ quen thuộc với ffmpeg ... –