web-dev-qa-db-ja.com

ffmpegを使用してMP4またはFLVからH264生ビデオストリームを抽出すると、無効なストリームが生成されます

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 --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

出力も有効です

助言がありますか?

14
dhia

MP4またはFLVコンテナから未加工のビデオを抽出するには、-bsf:v h264_mp4toannexbまたは-vbfs h264_mp4toannexbオプション。

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

H264 Annex B/NAL のない生のストリームは、プレーヤーでデコードできません。このオプションを使用すると、ffmpegはNALユニットで各h264サンプルの単純な「マルチプレクサ」を実行します。

34
alexbuisson