2013-03-27 13 views
10

Sto usando OpenCV con ffmpeg su un mac per scrivere video. Sono stato in grado di scrivere file .avi con successo usando il codice codec/fourcc, FMP4. Mi piacerebbe scrivere file .mp4, comunque. Quando provo a scrivere un file .mp4 utilizzando fourcc FMP4 ottengo questo errore:Scrivere un file MP4 sul Mac con OpenCV ffmpeg

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

Quando uso avc1 ricevo il seguente errore:

[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 

Qualcuno qui conosce il codec diritto di utilizzare con OpenCV e ffmpeg per scrivere su un contenitore MP4 su Mac?

Se AVC1 è il codec corretto, come si installa ffmpeg + OpenCV correttamente? Ho fatto

brew install gpac 
brew install ffmpeg 
brew install opencv 

La chiamata che sto usando per aprire la 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) 

Quando eseguo x264 --help ottengo

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

Grazie, -s

+0

I contenitori non devono FOURCCs - solo codec e formati di pixel a. 'FMP4' è un video MPEG-4 (parte 2). Quale codec video stai usando? H.264/MPEG-4 AVC sarebbe 'AVC1' o altri (vedi http://www.fourcc.org/codecs.php) – slhck

+0

Ciao, @slhck, questa è la mia domanda. Quale codec video dovrei usare quando scrivo in un contenitore MP4. Ho aggiornato la domanda per essere più chiara su questo punto. Grazie. –

+0

Fornire la riga di comando uncut completa che si sta utilizzando, incluso l'output completo. Ti sei assicurato di aver installato anche x264? ('brew install x264; brew uninstall ffmpeg; brew install ffmpeg') – slhck

risposta

7

questo sembra una vecchia domanda, ma la risponderò a beneficio di coloro che vi inciamperanno. Non è possibile ottenere ffmpeg lavorando con x264 a meno che non si installa ffmpeg dal sorgente. Quindi le installazioni binarie dai gestori di pacchetti non abilitano i pacchetti x264. È possibile installare binari x264 (ma probabilmente si desidera utilizzare il codice sorgente per controllare quale versione di x264 si desidera essere compatibile con la versione corretta di ffmpeg).

Quindi, per rispondere a questa domanda: l'installazione deve prima installare x264 e quindi compilare ffmpeg con --enable-libx264.

Ora ci sono molte guide su come compilare ffmpeg dal sorgente. Una rapida ricerca su google ha lanciato questo: http://www.martinlos.com/?p=41 per mac e https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide per ubuntu. Compilavo regolarmente da fonte su ubuntu e so che quelle istruzioni funzionano e quelle mac sembrano pure bene.

Problemi correlati