我真的很感谢这个帮助。我正在使用我的 beaglebone black 通过网络摄像头录制视频。相机支持的格式如下所示。
v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUV 4:2:2 (YUYV)
Index : 1
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : MJPEG
当我录制原始 4:2:2 YUV 视频剪辑时,无法将其回放以查看,因此我尝试使用 ffmpeg 将其转换为 mp4。
它指出 yuyv422 是一种不兼容的像素格式,所以我尝试首先使用以下命令将视频转换为 420p,output_422.yuv 是我从相机录制的视频。
ffmpeg -y -pix_fmt yuyv422 -s 640x480 -r 30 -i output_422.yuv -f rawvideo -pix_fmt yuv420p -s 640x480 -r 30 output_420.yuv
结果是:
Input #0, rawvideo, from 'output_422.yuv':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0.0: Video: rawvideo, yuyv422, 640x480, 30 tbr, 30 tbn, 30 tbc
[buffer @ 0x41520] w:640 h:480 pixfmt:yuyv422
[avsink @ 0x412c0] auto-inserting filter 'auto-inserted scaler 0' between the
filter 'src' and the filter 'out'
[scale @ 0x44700] w:640 h:480 fmt:yuyv422 -> w:640 h:480 fmt:yuv420p
flags:0x4
Output #0, rawvideo, to 'output_420.yuv':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: rawvideo, yuv420p, 640x480, q=2-31, 200 kb/s, 90k
tbn, 30 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
Error while decoding stream #0.0
frame= 11 fps= 0 q=0.0 Lsize= 4950kB time=0.37 bitrate=110592.0kbits/s
video:4950kB audio:0kB global headers:0kB muxing overhead 0.000000%
然后我尝试将其转换为 mp4,如下所示:
ffmpeg -f rawvideo -pix_fmt yuv420p -s 640x480 -r 30 -i output_420.yuv -vcodec libx264 output.mp4
看起来转换成功了,但是当我尝试通过 vlc 播放器播放时,我没有视频,只是闪烁了几秒钟。我尝试过更改分辨率、帧速率等,但没有任何乐趣。某处有问题,但不确定在哪里。
有人会知道可能出了什么问题吗?谢谢