2013-03-27 154 views
10

我在Mac上使用OpenCV和ffmpeg編寫視頻。我已經能夠使用編解碼器/ fourcc代碼FMP4成功編寫.avi文件。然而,我想編寫.mp4文件。當我嘗試使用FOURCC FMP4寫一個.mp4檔案我得到這個錯誤:使用OpenCV在Mac上編寫MP4文件ffmpeg

[mp4 @ 0x100b4ec00] Tag FMP4/0x34504d46 incompatible with output codec id '13' ([0][0][0]) 

當我使用AVC1我得到以下錯誤:

[libx264 @ 0x104003000] broken ffmpeg default settings detected 
[libx264 @ 0x104003000] use an encoding preset (e.g. -vpre medium) 
[libx264 @ 0x104003000] preset usage: -vpre <speed> -vpre <profile> 
[libx264 @ 0x104003000] speed presets are listed in x264 --help 
[libx264 @ 0x104003000] profile is optional; x264 defaults to high 
Could not open codec 'libx264': Unspecified error 

有誰知道這裏的正確的解碼器使用用OpenCV和ffmpeg寫入Mac上的MP4容器?

如果AVC1是正確的編解碼器,我該如何正確安裝ffmpeg + OpenCV?我做

brew install gpac 
brew install ffmpeg 
brew install opencv 

我使用打開videowriter召喚:

fourcc = cv2.cv.CV_FOURCC('A', 'V', 'C', '1') 
video_out = cv2.VideoWriter(
    filename=output_filename, 
    fourcc=fourcc, 
    fps=video_fps, 
    frameSize=(video_width,video_height), 
    isColor=1) 

當我運行x264 --help我得到

% x264 --help 
x264 core:125 
Syntax: x264 [options] -o outfile infile 

Infile can be raw (in which case resolution is required), 
    or YUV4MPEG (*.y4m), 
    or Avisynth if compiled with support (no). 
    or libav* formats if compiled with lavf support (no) or ffms support (no). 
Outfile type is selected by filename: 
.264 -> Raw bytestream 
.mkv -> Matroska 
.flv -> Flash Video 
.mp4 -> MP4 if compiled with GPAC support (no) 
Output bit depth: 8 (configured at compile time) 

Options: 

    -h, --help     List basic options 
     --longhelp    List more options 
     --fullhelp    List all options 

Example usage: 

     Constant quality mode: 
      x264 --crf 24 -o <output> <input> 

     Two-pass with a bitrate of 1000kbps: 
      x264 --pass 1 --bitrate 1000 -o <output> <input> 
      x264 --pass 2 --bitrate 1000 -o <output> <input> 

     Lossless: 
      x264 --qp 0 -o <output> <input> 

     Maximum PSNR at the cost of speed and visual quality: 
      x264 --preset placebo --tune psnr -o <output> <input> 

     Constant bitrate at 1000kbps with a 2 second-buffer: 
      x264 --vbv-bufsize 2000 --bitrate 1000 -o <output> <input> 

Presets: 

     --profile <string>  Force the limits of an H.264 profile 
            Overrides all settings. 
            - baseline,main,high,high10,high422,high444 
     --preset <string>  Use a preset to select encoding settings [medium] 
            Overridden by user settings. 
            - ultrafast,superfast,veryfast,faster,fast 
            - medium,slow,slower,veryslow,placebo 
     --tune <string>   Tune the settings for a particular type of source 
           or situation 
            Overridden by user settings. 
            Multiple tunings are separated by commas. 
            Only one psy tuning can be used at a time. 
            - psy tunings: film,animation,grain, 
               stillimage,psnr,ssim 
            - other tunings: fastdecode,zerolatency 

Frame-type options: 

    -I, --keyint <integer or "infinite"> Maximum GOP size [250] 
     --tff     Enable interlaced mode (top field first) 
     --bff     Enable interlaced mode (bottom field first) 
     --pulldown <string>  Use soft pulldown to change frame rate 
            - none, 22, 32, 64, double, triple, euro (requires cfr input) 

Ratecontrol: 

    -B, --bitrate <integer>  Set bitrate (kbit/s) 
     --crf <float>   Quality-based VBR (0-51) [23.0] 
     --vbv-maxrate <integer> Max local bitrate (kbit/s) [0] 
     --vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0] 
    -p, --pass <integer>  Enable multipass ratecontrol 
            - 1: First pass, creates stats file 
            - 2: Last pass, does not overwrite stats file 

Input/Output: 

    -o, --output <string>  Specify output file 
     --sar width:height  Specify Sample Aspect Ratio 
     --fps <float|rational> Specify framerate 
     --seek <integer>  First frame to encode 
     --frames <integer>  Maximum number of frames to encode 
     --level <string>  Specify level (as defined by Annex A) 
     --quiet     Quiet Mode 

Filtering: 

     --vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file 

     Filter options may be specified in <filter>:<option>=<value> format. 

     Available filters: 
     crop:left,top,right,bottom 
     select_every:step,offset1[,...] 

感謝, -s

+0

容器沒有FOURCCs - 只編解碼器和像素格式。 'FMP4'是MPEG-4(Part 2)視頻。你使用什麼視頻編解碼器? H.264/MPEG-4 AVC將會是'AVC1'或其他(見http://www.fourcc.org/codecs.php) – slhck 2013-03-27 21:00:11

+0

嗨,@slhck,這是我的問題。在寫入MP4容器時,應使用什麼視頻編解碼器。我已經更新了這個問題,在這一點上更加清楚。謝謝。 – 2013-03-28 01:15:33

+0

請提供您正在使用的完整未切割命令行,包括完整的輸出。你確定你安裝了x264嗎? ('brew install x264; brew卸載ffmpeg; brew install ffmpeg') – slhck 2013-03-28 07:04:50

回答

7

這似乎一個古老的問題,但我會回答爲了那些偶然發現的人的利益。除非您從源代碼安裝ffmpeg,否則無法使用x264獲得ffmpeg。因此,軟件包管理器的二進制安裝將不會啓用x264軟件包。你可以二進制安裝x264(但是可能你想用源代碼來控制你想要與正確版本的ffmpeg兼容的x264版本)。

因此要回答這個問題:您的安裝需要先安裝x264,然後使用--enable-libx264編譯ffmpeg。

現在有很多關於如何從源代碼編譯ffmpeg的指南。快速谷歌搜索扔了這個:http://www.martinlos.com/?p=41 mac和https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide Ubuntu的。我經常從Ubuntu的源代碼編譯,並知道這些指令的工作和Mac的似乎也很好。