Я пытаюсь передать изображения OpenCV в ffmpeg.Я получил ffmpeg для обработки необработанных кадров из OpenCV, но вывод прерывистый и показывает только часть каждого кадра.Мой код выглядит следующим образом:
#include "opencv2/opencv.hpp"
#include <iostream>
#include <unistd.h>
#include <string.h>
using namespace cv;
using namespace std;
VideoCapture vcap(0);
int main(int argc, char** argv) {
try {
if (!vcap.isOpened()) {
cout << "Cannot open video stream. Exiting." << endl;
return -1;
} else {
vcap.set(CV_CAP_PROP_FPS, 25);
}
string stream_window = "Current Output Stream";
namedWindow(stream_window, CV_WINDOW_AUTOSIZE);
Mat frame;
while (1) {
vcap >> frame;
vector<uchar> buf;
/// Showing the result
buf.assign(frame.datastart, frame.dataend);
for (auto itr = buf.begin(); itr != buf.end(); ++itr) {
cout << *itr;
}
cout << endl;
imshow(stream_window, frame);
if(waitKey(4) == 27) break;
}
} catch (exception& e) {
cout << "Exception: " << endl << e.what();
}
return 0;
}
Результат передается в ffmpeg с помощью
./stream.out | ffmpeg -f rawvideo -pixel_format bgr24 -video_size 640x480 -r 25 -i pipe: vid.mp4
Что-то не так с командой ffmpeg или есть лучший способ передачи данныхв ffmpeg?