2013-10-10 1 views
8

ffmpeg를 사용하여 mp4 또는 flv h264 비디오 (YouTube 비디오)에서 비디오 스트림을 추출하려고합니다.f4mp에서 h264 raw 비디오 스트림을 추출하거나 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 명령 줄을 사용 (난 단지 비디오를 필요로) 추가 스트림 없애 : 원래 비디오 (test.flv) ffplay에 문제없이 재생이 ffprobe은 다음과 같은 오류를 제공합니다 :

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 

:

는 또한 간단 무비 명령 라인을 시도

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 샘플의 간단한 "먹스 (mux)"를 수행합니다.

관련 문제