ffmpeg:找不到流 0 的编解码器参数(视频:h264)未指定大小

dem*_*pap 11 video codec mp4 ffmpeg video-conversion

我尝试将视频从 .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
Run Code Online (Sandbox Code Playgroud)

2

root@beagleboard:/dev# v4l2-ctl --set-fmt-video=pixelformat=0
Run Code Online (Sandbox Code Playgroud)

tgi*_*ies 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
Run Code Online (Sandbox Code Playgroud)

将 640x480 和 25 替换为视频的尺寸和帧速率。

如果输入是 MJPEG,您应该可以省略-fffmpeg 应该可以解决它:

ffmpeg -i output.raw -c:v libx264 output.mp4
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您不需要其他捕获工具;ffmpeg 可以很好地从 v4l2 设备捕获:

ffmpeg -f v4l2 -r 25 -s:v 640x480 -i /dev/video0 -c:v libx264 output.mp4
Run Code Online (Sandbox Code Playgroud)