2013-10-10 11 views
8

ffmpegを使用してmp4またはflv h264ビデオ(youtube video)からビデオストリームを抽出しようとしています。オリジナルのビデオ(test.flv)はffplayと問題なく再生し、ffprobeは、次のようにエラーを与える:f4mpからh264生のビデオストリームを抽出するかffmpegでflvが無効なストリームを生成する

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

どれでも体を発見した不正なデータが持っています私は何が間違っているのか考えていますか? Iは、(例えば、AVI)別のフォーマットを使用する場合

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

Iはまた、より単純なユーチューブコマンドラインを試み

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

出力ビデオが有効です。

私はビデオ

ffmpeg -i test.flv -an test.h264 

出力も

任意の提案が有効でトランスコードした場合?

+0

-vfbs h264_mp4toannexbのようなものを試してみてください。あなたの出力の前にそのオプションを追加してください。 – alexbuisson

+0

セクションだけでなく、完全なffmpegコンソール出力を常に含める必要があります。 – LordNeckbeard

+0

完全なコンソール出力を追加するために私の質問を編集しました。実際には、@ alexbuissonフィルターが指す-bsf:v h264_mp4toannexbが問題を解決しました。あなたはそれを答えとして加えることができますか?そうするべきですか?ありがとうございました!! – dhia

答えて

19

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サンプルの単純な「マルチプレクサ」を実行します。