用ffmpeg从mp4或flv中提取h264原始视频流,生成无效的流 [英] extracting h264 raw video stream from mp4 or flv with ffmpeg generate an invalid stream

查看:3266
本文介绍了用ffmpeg从mp4或flv中提取h264原始视频流,生成无效的流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用ffmpeg从mp4或flv h264视频(YouTube视频)中提取视频流。原始视频(test.flv)播放ffplay没有麻烦,ffprobe会出现如下错误:

I'm trying to extract the video stream from an mp4 or flv h264 video (youtube video) using ffmpeg. The original video (test.flv) play without trouble with ffplay , ffprobe gives an error as follow:

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命令行:

to get rid of the extra streams ( I only needs the video) I used the following ffmpeg command line:

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

新的流无法读取包含ffplay的任何播放器,并给出ffprobe错误:
test.h264:处理inputq = 0B时发现的无效数据f = 0/0

The new stream is unreadable by any player including ffplay and gives an error with ffprobe : test.h264: Invalid data found when processing inputq= 0B f=0/0

任何身体都有一个想法,我做错了什么?

Any body have an idea about what am I doing wrong?

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

I also tried simpler youtube command line:

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

如果我使用其他格式(例如avi):

if I use another format (avi for example):

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

如果我转码视频

ffmpeg -i test.flv -an test.h264

输出也有效

任何建议?

推荐答案

要从MP4或FLV容器中提取原始视频,您应该指定 -bsf:v h264_mp4toannexb -vbfs h264_mp4toannexb 选项。

To extract a raw video from an MP4 or FLV container you should specify the -bsf:v h264_mp4toannexb or -vbfs h264_mp4toannexb option.

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

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

The raw stream without H264 Annex B / NAL cannot be decode by player. With that option ffmpeg perform a simple "mux" of each h264 sample in a NAL unit.

这篇关于用ffmpeg从mp4或flv中提取h264原始视频流,生成无效的流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆