使用FFmpeg提取H.264原始码流时持续报错求助
你好呀!我尝试用FFmpeg把VOB、MKV或者MP4格式的视频转成H.264原始码流,用的命令是:
ffmpeg -i input.mp4 -map 0:v -c:v copy -bsf:v h264_mp4toannexb raw.h264
但一直遇到相同的错误,我除了谷歌搜索外对FFmpeg几乎一无所知,有没有大佬能给点思路呀?提前谢谢大家了!
报错信息片段如下:
ffmpeg version 2024-06-21-git-d45e20c37b-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --...
可能的原因&解决办法
从你的命令和场景来看,大概率是下面几个问题之一,你可以挨个排查试试:
输入视频编码不是H.264
你用的h264_mp4toannexb比特流过滤器只适配H.264编码的视频,如果你的视频是H.265(HEVC)、AV1这类其他编码,肯定会报错。
先查一下输入视频的编码类型,运行这个命令:ffmpeg -i input.mp4在输出里找视频流那行(一般是
Stream #0:0开头),看Video:后面的编码格式。如果是H.265,就把过滤器换成hevc_mp4toannexb,命令改成:ffmpeg -i input.mp4 -map 0:v -c:v copy -bsf:v hevc_mp4toannexb raw.h265要是其他编码,先确认有没有对应的annexb格式过滤器,实在不行再考虑重新编码(不过重新编码会损失画质,优先用copy模式)。
视频流索引选错了
命令里的-map 0:v会选中输入文件里所有视频流,但如果文件有多个视频流,可能选到了有问题的那个,或者你需要的流索引不是默认的。可以先查看所有流的详细信息:ffmpeg -i input.mp4 -hide_banner找到正确的视频流索引(比如显示
Stream #0:1(eng): Video: h264,那索引就是0:1),然后修改命令里的-map参数;或者直接去掉-map 0:v,让FFmpeg自动选择第一个视频流试试:ffmpeg -i input.mp4 -c:v copy -bsf:v h264_mp4toannexb raw.h264输入文件损坏
如果你的MP4/MKV/VOB文件本身有损坏,FFmpeg读取时也会出错。可以先尝试修复输入文件(针对MP4/MKV):ffmpeg -i input.mp4 -c copy -f mp4 fixed_input.mp4然后用修复后的
fixed_input.mp4再执行原来的提取命令。FFmpeg nightly版本的小bug
你用的是2024年6月的git nightly版,虽然是最新版,但偶尔会有未修复的小问题。可以试试换成稳定版FFmpeg,重新安装后再试命令。
备注:内容来源于stack exchange,提问作者Blueberry Pie




