当前位置: 首页 > 知识库问答 >
问题:

使用ffmpeg从mp4或flv中提取h264原始视频流会生成无效流

袁泓
2023-03-14

我正在尝试使用ffmpeg从mp4或flv h264视频(youtube视频)中提取视频流。原始视频(test.flv)在ffplay上播放没有问题,ff探针给出错误如下:

ffprobe version N-55515-gbbbd959 Copyright (c) 2007-2013 the FFmpeg developers
built on Aug 13 2013 18:06:32 with gcc 4.7.3 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvo-aacenc --enable-libvo-
amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --
enable-libxvid --enable-zlib
  libavutil      52. 42.100 / 52. 42.100
  libavcodec     55. 27.100 / 55. 27.100
  libavformat    55. 13.102 / 55. 13.102
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 82.100 /  3. 82.100
  libswscale      2.  4.100 /  2.  4.100
  libswresample   0. 17.103 /  0. 17.103
  libpostproc    52.  3.100 / 52.  3.100
[flv @ 000000000031ea80] Stream discovered after head already parsed
Input #0, flv, from 'test.flv':
  Metadata:
    starttime       : 0
    totalduration   : 142
    totaldatarate   : 692
    bytelength      : 12286492
    canseekontime   : true
    sourcedata      : B42B95507HH1381414522145462
    purl            :
    pmsg            :
  Duration: 00:02:22.02, start: 0.000000, bitrate: 692 kb/s
    Stream #0:0: Video: h264 (Main), yuv420p, 640x268, 568 kb/s, 23.98 tbr, 1k t
bn, 47.95 tbc
    Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp, 131 kb/s
    Stream #0:2: Data: none
Unsupported codec with id 0 for input stream 2

为了消除额外的流(我只需要视频),我使用了以下ffmpeg命令行:

ffmpeg -i test.flv -map 0:0 -vcodec copy -an -f h264 test.h264

包括ffplay在内的任何玩家都无法读取新流,并且ffprobe:test出现错误。h264:处理inputq=0B f=0/0时发现无效数据

有人知道我做错了什么吗?

我还尝试了更简单的youtube命令行:

ffmpeg -i test.flv -vcodec copy -an test.h264

如果我使用另一种格式(例如avi):

ffmpeg -i test.flv -vcodec copy -an test.avi

输出视频有效。

如果我对视频进行转码

ffmpeg -i test.flv -an test.h264

输出也是有效的

有什么建议吗?

共有1个答案

栾烨华
2023-03-14

要从MP4或FLV容器中提取原始视频,应指定bsf:v h264\u mp4toannexb或vbfs h264\u mp4toannexb选项。

ffmpeg -i test.flv -vcodec copy -an -bsf:v h264_mp4toannexb test.h264

播放器无法解码没有H264附件B/NAL的原始流。使用该选项,ffmpeg对NAL单元中的每个h264样本执行简单的“mux”。

 类似资料:
  • 我现在正在Android上对一个h264字节流进行解码。流是从第三方产品发送的,我不太确定它的视频格式。该文件说,流由PPS和SPS NAL单位组成。但我接收到的h264字节流包括以0x00、0x00、0x00、0x01开头的序列,并且在我接收到的样本中,第5个字节可能是0x09、0x21或0x06。这让我兴奋了一段时间,因为它似乎与通常的0x67或0x68指示器不同。有人知道NAL单元头中的0x

  • 我想提取原始Yuv帧从mp4剪辑使用FFMPEG。我输入。mp4告诉我视频格式是YUV420P10LE。我使用以下命令来提取帧: 以下是FFMPEG的日志:

  • 我对FLV流生成有问题。我开发了DVR系统,它应该能够以FLV格式流式传输视频(在Actionscript NetStream上播放)。我从编码器接收原始H264 NAL单元(0x00 0x00 0x00 0x01)的视频,我还可以识别是编码帧IDR还是非IDR。 我创建FLV流(基于Adobe spec:Video File Format Specification Version 10)的解决

  • 我已经努力让FFMPEG的直播流工作了很多个小时,所以举白旗,在这里寻求帮助。 我的场景是我有一个IP安全摄像头,我可以通过RTSP(H.264)成功连接,并将视频保存为文件段,它们可以通过独立的应用程序如VLC或通过Node.js web服务器应用程序播放,该应用程序发送'video/mp4'&keep-alive头部,并将以前由FFMPEG保存的mp4文件流式传输到HTML5视频客户端。 1)

  • 我想在背景图像上覆盖透明视频。我有一个视频,其中上半部分是RGB对象,下半部分是阿尔法掩码。 现在,为了制作这个,我执行以下步骤:

  • 在与ffmpeg的斗争中,经过几天的混乱,我已经设法让它几乎做我想做的事情! 我有一个音轨和一系列的图像,要转换成幻灯片显示每个图像5秒。 null