ffplay
可以很好地打开例如 /dev/video0 并监视传入的视频帧(例如您可以在电视卡上观看电视)。给 /dev/videoffmpeg
也可以轻松地对视频进行编码。
是否可以同时做到这两点:将视频帧显示到屏幕上,同时对它们进行编码?
答案1
有很多方法。我通常借助 tee 将原始视频流复制到 ffplay 实例:
ffmpeg -hide_banner -loglevel error -f v4l2 -pixel_format yuyv422 -video_size 1280x960 -i /dev/video0 -c:v copy -f rawvideo - |\
tee >(ffplay -f rawvideo -pixel_format yuyv422 -video_size 1280x960 -) |\
ffmpeg -f rawvideo -pixel_format yuyv422 -video_size 1280x960 -i - -c:v libx264 -crf 21 -y /tmp/encoded.mp4
如果您想查看原始输入和输出,该示例有点复杂:
ffmpeg -hide_banner -loglevel error -f v4l2 -pixel_format yuyv422 -video_size 640x480 -r 25 -i /dev/video0 -c:v copy -f rawvideo - | \
tee >(ffplay -hide_banner -loglevel error -window_title "Input" -f rawvideo -pixel_format yuyv422 -video_size 640x480 -) | \
ffmpeg -hide_banner -loglevel error -f rawvideo -pixel_format yuyv422 -video_size 640x480 -i - -c:v libx264 -crf 21 -f h264 - | \
tee >(ffplay -hide_banner -loglevel error -window_title "Encoded" -f h264 -) | \
ffmpeg -f h264 -r 25 -i - -y /tmp/encoded.mp4
请务必指定匹配的像素格式、分辨率和帧速率。