![ffmpeg:无法找到流 0(视频:h264)的编解码器参数,大小未指定](https://linux22.com/image/1397895/ffmpeg%EF%BC%9A%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%E6%B5%81%200%EF%BC%88%E8%A7%86%E9%A2%91%EF%BC%9Ah264%EF%BC%89%E7%9A%84%E7%BC%96%E8%A7%A3%E7%A0%81%E5%99%A8%E5%8F%82%E6%95%B0%EF%BC%8C%E5%A4%A7%E5%B0%8F%E6%9C%AA%E6%8C%87%E5%AE%9A.png)
我尝试将视频从 .raw 转换为 .mp4。为此,我下载、构建并安装了 x264 和 ffmpeg。但是,命令:
ffmpeg -f h264 -i output.raw -vcodec copy output.mp4
失败并出现错误(如下图所示)。有什么方法可以修复此问题吗?
我还运行了以下命令:
1
root@beagleboard:/# 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
2
root@beagleboard:/dev# v4l2-ctl --set-fmt-video=pixelformat=0
答案1
您的输入根本不是 h264 流,但您告诉 ffmpeg 它是一个。
您需要告诉 ffmpeg 它实际上是什么:mjpeg 或 yuyv 格式的 v4l2 流(取决于您的相机在捕获时设置的格式,在 列出的两种格式中任选一种v4l2-ctl --list-formats
)。如果您希望 ffmpeg 将其转码为 h264,您也需要告诉它这一点。
如果输入是原始 YUYV 帧,则您需要:
ffmpeg -f rawvideo -pix_fmt yuyv422 -s:v 640x480 -r 25 -i output.raw -c:v libx264 output.mp4
将 640x480 和 25 替换为您的视频的尺寸和帧速率。
如果输入是 MJPEG,您应该能够省略,-f
ffmpeg 应该可以弄清楚:
ffmpeg -i output.raw -c:v libx264 output.mp4
顺便说一句,您不需要另一个捕获工具;ffmpeg 可以很好地从 v4l2 设备捕获:
ffmpeg -f v4l2 -r 25 -s:v 640x480 -i /dev/video0 -c:v libx264 output.mp4