- v4l2-ctl录制nv12视频
v4l2-ctl -d /dev/video12 --set-fmt-video=width=1280,height=720,pixelformat=NV12 --stream-mmap --stream-to=1.nv12
- ffplay播放nv12视频
ffplay -f rawvideo -pixel_format nv12 -video_size 1280x720 1.nv12
- nv12转yuv420
ffmpeg -f rawvideo -pix_fmt nv12 -s 1280x720 -i 1.nv12 -f rawvideo -pix_fmt yuv420p 1.yuv420m
ffmpeg -f rawvideo -pix_fmt nv12 -s 1280x720 -r 25 -i 1.nv12 -f rawvideo -pix_fmt yuv420p 1.yuv420m
- 验证文件信息
ffprobe -f rawvideo -pixel_format yuv420p -video_size 1280x720 -i 1.yuv420m
- 使用gst-inspect-1.0将nv12视频编码成h264
# 取消 DISPLAY 变量
unset DISPLAY
GPU: gst-launch-1.0 -e filesrc location=1.nv12 ! videoparse width=1280 height=720 format=nv12 framerate=25/1 ! nvvidconv ! 'video/x-raw(memory:NVMM), format=NV12' ! nvv4l2h264enc ! filesink location=1.h264
CPU: gst-launch-1.0 -e filesrc location=1.nv12 ! videoparse width=1280 height=720 format=nv12 framerate=25/1 ! videoconvert ! x264enc speed-preset=fast tune=zerolatency ! filesink location=1.h264
gst-inspect-1.0 nvv4l2h264enc
ll /dev/v4l2-nvenc
crw-rw-rw- 1 root root 1, 3 Jan 1 1970 /dev/v4l2-nvenc
在 Linux 系统中,主设备号 1 和次设备号 3 对应的是 /dev/null(空设备)。
使用 v4l2-ctl --list-devices 查看:
NVIDIA Tegra Video Encode (platform:tegra-video-encode):
/dev/video31 <--- 如里有,这个才是真正的设备!
v4l2-ctl --list-devices(没有找到“视频编码器”设备)
NVIDIA Tegra Video Input Device (platform:tegra-capture-vi):
/dev/media0
vi-output, ar0234 9-0043 (platform:tegra-capture-vi:0):
/dev/video12
/dev/video13
/dev/video14
/dev/video15
vi-output, ar0234 9-0026 (platform:tegra-capture-vi:2):
/dev/video8
/dev/video9
/dev/video10
/dev/video11
vi-output, ar0234 9-0036 (platform:tegra-capture-vi:4):
/dev/video4
/dev/video5
/dev/video6
/dev/video7
vi-output, ar0234 9-0052 (platform:tegra-capture-vi:5):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
注:将 nvv4l2h264enc 替换为 x264enc,使用 CPU 软件编码