2013-03-27 4 views
10

Я использую OpenCV с ffmpeg на Mac для записи видео. Я смог успешно писать файлы .avi, используя код кодека/четвертого кода, FMP4. Однако я хотел бы писать файлы .mp4. Когда я пытаюсь написать файл .mp4 с помощью Fourcc FMP4 я получаю эту ошибку:Запись файла MP4 на Mac с OpenCV 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 для записи в контейнер MP4 на Mac?

Если 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 (часть 2). Какой видео кодек вы используете? H.264/MPEG-4 AVC будет «AVC1» или другими (см. Http://www.fourcc.org/codecs.php) – slhck

+0

Привет, @slhck, это мой вопрос. Какой видео кодек следует использовать при записи в контейнер MP4. Я уточнил вопрос, чтобы быть более ясным в этом вопросе. Благодарю. –

+0

Просьба предоставить полную необработанную командную строку, которую вы используете, включая полный вывод. Уверены ли вы, что вы установили x264? ('brew install x264; brew uninstall ffmpeg; brew install ffmpeg') – slhck

ответ

7

Это кажется старый вопрос, но я отвечу ему на благо тех, кто наткнется на него. Вы не можете заставить ffmpeg работать с x264, если вы не установите ffmpeg из источника. Таким образом, двоичные установки из менеджеров пакетов не будут включать пакеты x264. Вы можете бинарно установить x264 (но, вероятно, вы хотите использовать источник, чтобы управлять версией x264, которую вы хотите совместить с правильной версией ffmpeg).

Итак, чтобы ответить на этот вопрос: сначала вам нужно установить x264, а затем скомпилировать ffmpeg с помощью --enable-libx264.

Теперь есть много руководств о том, как скомпилировать ffmpeg из источника. Быстрый поиск в Google бросил это: http://www.martinlos.com/?p=41 для mac и https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide для ubuntu. Я регулярно компилирую исходный код на ubuntu и знаю, что эти инструкции работают, а макросы кажутся прекрасными.

Смежные вопросы