Запись файла MP4 на Mac с помощью OpenCV ffmpeg

Я использую OpenCV с ffmpeg на Mac для записи видео. Я был в состоянии успешно писать файлы.avi, используя кодек /fourcc код, FMP4. Однако я хотел бы написать файлы.mp4. Когда я пытаюсь записать файл.mp4, используя fourcc FMP4, я получаю эту ошибку:

[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

Звонок, который я использую, чтобы открыть видеовизуал:

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[,...]

Спасибо -с

3 ответа

Это кажется старым вопросом, но я отвечу на него в пользу тех, кто наткнулся на него. Вы не можете заставить 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 и знаю, что эти инструкции работают, и Mac, кажется, тоже хорошо.

Чтобы установить ffmpeg, попробуйте этот, который сработал для меня:

brew install --build-from-source ffmpeg

Намного проще и гибче установить ffmpeg и все его зависимости с помощью Homebrew на Mac:

http://www.renevolution.com/how-to-install-ffmpeg-on-mac-os-x/

Другие вопросы по тегам