2013-03-27 159 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的似乎也很好。