FFmpeg - H264 编码器找不到有效的设备并且无法配置编码器
FFmpeg - H264 encoder could not find a valid device and can't configure encoder
我正在尝试使用 H264 编码器进行编码,但是当我这样做时,出现以下错误:
[h264_v4l2m2m @ 0x55682d2416c0] Could not find a valid device
[h264_v4l2m2m @ 0x55682d2416c0] can't configure encoder
我确保在配置 FFmpeg 时启用了编码器。当我 运行 命令 ffmpeg -codecs
时,我看到 H264 编解码器被列为编码器:
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
(decoders: h264 h264_v4l2m2m )
(encoders: libx264 libx264rgb h264_v4l2m2m h264_vaapi )
源视频的视频编解码器是 H264,所以当有解码器和编码器时,我不确定为什么我不能使用 H264 进行编码。即使我 运行 avcodec_find_encoder_by_name
找到 libx264
编码器,它也找不到。
这是失败的代码块:
codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!codec) {
printf("[ERROR] Failed to find video output codec\n");
return -1;
}
outputCodecContext = avcodec_alloc_context3(codec);
if (!outputCodecContext) {
printf("[ERROR] Failed to allocate memory for video output codec context\n");
return -1;
}
av_opt_set(outputCodecContext->priv_data, "preset", "slow", 0);
outputCodecContext->bit_rate = inputCodecContext->bit_rate;
outputCodecContext->width = inputCodecContext->width;
outputCodecContext->height = inputCodecContext->height;
outputCodecContext->time_base = (AVRational){1, 60};
outputCodecContext->framerate = (AVRational){60, 1};
outputCodecContext->pix_fmt = inputCodecContext->pix_fmt;
outputCodecContext->extradata = inputCodecContext->extradata;
outputCodecContext->extradata_size = inputCodecContext->extradata_size;
// This if statement fails as a result of the encoder error
if (avcodec_open2(outputCodecContext, codec, NULL) < 0) {
printf("[ERROR] Failed to open video output codec\n");
return -1;
}
return 0;
当我使用 ffmpeg
命令使用 H264 编码时,我没有收到任何这些错误。感谢任何帮助。
事实证明,我在使用命令 ./configure --enable-shared --enable-libx264 --enable-gpl
后一直忘记调用 make
和 make install
(我在 Ubuntu)。这消除了我收到的错误,我的代码能够找到 libx264
编码器。
我正在尝试使用 H264 编码器进行编码,但是当我这样做时,出现以下错误:
[h264_v4l2m2m @ 0x55682d2416c0] Could not find a valid device
[h264_v4l2m2m @ 0x55682d2416c0] can't configure encoder
我确保在配置 FFmpeg 时启用了编码器。当我 运行 命令 ffmpeg -codecs
时,我看到 H264 编解码器被列为编码器:
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
(decoders: h264 h264_v4l2m2m )
(encoders: libx264 libx264rgb h264_v4l2m2m h264_vaapi )
源视频的视频编解码器是 H264,所以当有解码器和编码器时,我不确定为什么我不能使用 H264 进行编码。即使我 运行 avcodec_find_encoder_by_name
找到 libx264
编码器,它也找不到。
这是失败的代码块:
codec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!codec) {
printf("[ERROR] Failed to find video output codec\n");
return -1;
}
outputCodecContext = avcodec_alloc_context3(codec);
if (!outputCodecContext) {
printf("[ERROR] Failed to allocate memory for video output codec context\n");
return -1;
}
av_opt_set(outputCodecContext->priv_data, "preset", "slow", 0);
outputCodecContext->bit_rate = inputCodecContext->bit_rate;
outputCodecContext->width = inputCodecContext->width;
outputCodecContext->height = inputCodecContext->height;
outputCodecContext->time_base = (AVRational){1, 60};
outputCodecContext->framerate = (AVRational){60, 1};
outputCodecContext->pix_fmt = inputCodecContext->pix_fmt;
outputCodecContext->extradata = inputCodecContext->extradata;
outputCodecContext->extradata_size = inputCodecContext->extradata_size;
// This if statement fails as a result of the encoder error
if (avcodec_open2(outputCodecContext, codec, NULL) < 0) {
printf("[ERROR] Failed to open video output codec\n");
return -1;
}
return 0;
当我使用 ffmpeg
命令使用 H264 编码时,我没有收到任何这些错误。感谢任何帮助。
事实证明,我在使用命令 ./configure --enable-shared --enable-libx264 --enable-gpl
后一直忘记调用 make
和 make install
(我在 Ubuntu)。这消除了我收到的错误,我的代码能够找到 libx264
编码器。