Video 使用ffmpeg从mp4或flv中提取h264原始视频流会生成无效流
我正在尝试使用ffmpeg从mp4或flv h264视频(youtube视频)中提取视频流。原始视频(test.flv)使用ffplay播放时没有问题,ffprobe给出如下错误:Video 使用ffmpeg从mp4或flv中提取h264原始视频流会生成无效流,video,youtube,ffmpeg,h.264,Video,Youtube,Ffmpeg,H.264,我正在尝试使用ffmpeg从mp4或flv h264视频(youtube视频)中提取视频流。原始视频(test.flv)使用ffplay播放时没有问题,ffprobe给出如下错误: 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 -
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
ffmpeg -i test.flv -vcodec copy -an test.h264
包括ffplay在内的任何玩家都无法读取新流,并且ffprobe出现错误:
test.h264:处理inputq=0B f=0/0时发现无效数据
有人知道我做错了什么吗
我还尝试了更简单的youtube命令行:
ffmpeg -i test.flv -map 0:0 -vcodec copy -an -f h264 test.h264
ffmpeg -i test.flv -vcodec copy -an test.h264
如果我使用另一种格式(例如avi):
输出的视频是有效的
如果我对视频进行转码
ffmpeg -i test.flv -an test.h264
输出也是有效的
有什么建议吗?要从MP4或FLV容器中提取原始视频,您应该指定
-bsf:v h264_mp4toanexb
或-vbfs h264_mp4toanexb
选项
ffmpeg -i test.flv -vcodec copy -an -bsf:v h264_mp4toannexb test.h264
未经处理的原始流无法由播放器解码。使用该选项,ffmpeg对NAL单元中的每个h264样本执行简单的“mux”。尝试类似-vfbs h264_mp4toannexb的方法。在输出之前添加该选项。您应该始终包含完整的ffmpeg控制台输出,而不仅仅是部分。我编辑了我的问题以添加完整的控制台输出。实际上,@alexbuisson过滤器指向的-bsf:v h264_mp4toannexb解决了这个问题。你能把它作为一个答案吗?还是我应该这样做?非常感谢。