Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

Les articles publiés sur le site

  • FFMPEG - it takes frames from .avi but doesn't work for mp4

    15 mai 2019, par Zector

    I run the following PHP code in a loop in order to extract the frame from 10th second from a list of video (avi & mp4):

    $command = "$ffmpegpath -y -i $input  -vframes 1 -ss 00:00:$fromdurasec -y $output";
    

    It seems that it generates frames for avi files but not for mp4.

    When I run the command manually in command-line it works as expected (as in takes the frame and saves it in folder). Please find below the full log of ffmpeg process:

    ffmpeg version 3.0.2 Copyright (c) 2000-2016 the FFmpeg developers
    built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
    configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --enable-libmp3lame --enable-libx264 --enable-libvorbis -- 
    enable-libvpx --enable-libfreetype --enable-fontconfig --enable-libopencore-amrnb --enable-gray --enable-libopenjpeg --enable-gnutls --enable-libfaac --enable-nonfree --disable-indev=sndio --disable-outdev=sndio --cc=gcc
    libavutil      55. 17.103 / 55. 17.103
    libavcodec     57. 24.102 / 57. 24.102
    libavformat    57. 25.100 / 57. 25.100
    libavdevice    57.  0.101 / 57.  0.101
    libavfilter     6. 31.100 /  6. 31.100
    libswscale      4.  0.100 /  4.  0.100
    libswresample   2.  0.101 /  2.  0.101
    libpostproc    54.  0.100 / 54.  0.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'new test video.mp4':
    Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
    Duration: 00:22:19.33, start: 0.000000, bitrate: 3560 kb/s
    Stream #0:0(rus): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 3427 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(rus): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : SoundHandler
    [swscaler @ 0x20b0140] deprecated pixel format used, make sure you did set range correctly
    Output #0, image2, to 'newtest.jpg':
    Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.25.100
    Stream #0:0(rus): Video: mjpeg, yuvj420p(pc), 1280x720, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
      encoder         : Lavc57.24.102 mjpeg
    Side data:
      unknown side data type 10 (24 bytes)
    Stream mapping:
    Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
    Press [q] to stop, [?] for help
    frame=    0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed=   0x
    Enter command: |all 
  • How to fix ffmpeg complex filters "Invalid stream specifier" [duplicate]

    15 mai 2019, par Chase

    I'm attempting to scale and blur (sections of) a video with ffmpeg complex filters. This has actually been working in production for years.

    I'm now running a newer build of ffmpeg on Ubuntu 18.04 and getting an error relating to the filters where the same command works fine on Ubuntu 16.04's ffmpeg against the same video.

    Specifically, I'm seeing the following error:

    mov,mp4,m4a,3gp,3g2,mj2 @ 0x56055a5902c0] Invalid stream specifier: vs0.
        Last message repeated 1 times
    Stream specifier 'vs0' in filtergraph description ... matches no streams.
    

    Has something about the complex filter API changed that would make this same input invalid in a newer version of ffmpeg?


    The command in question is just running the following in a Bash terminal.

    ffmpeg -ss 60 -i ~/test.mp4 -y -filter_complex "[0:v]scale=-2:'min(320,ih)'[vs0];[vs0]crop=in_w/9:in_h/2:0:0,boxblur=5:1:cr=3:ar=3[b0];[vs0]crop=in_w/9:in_h/2:in_w-out_w:0,boxblur=5:1:cr=3:ar=3[b1];[vs0]crop=(in_w-2*in_w/9):in_h/20:in_w/9:0,boxblur=5:1:cr=3:ar=3[b2];[vs0][b0]overlay=0:0[ovr0];[ovr0][b1]overlay=main_w-overlay_w:0[ovr1];[ovr1][b2]overlay=main_w/9:0[vs1]" -map [vs1] -an -ac 2 -b:a 128k -acodec aac -b:v 1024k -r 30 -vcodec libx264 -t 300 -y -preset slow -movflags faststart -pix_fmt yuv420p -f mp4 ~/out.mp4
    

    If we break up the complex filter statement, it looks like:

    [0:v]scale=-2:'min(320,ih)'[vs0];
    [vs0]crop=in_w/9:in_h/2:0:0,boxblur=5:1:cr=3:ar=3[b0];
    [vs0]crop=in_w/9:in_h/2:in_w-out_w:0,boxblur=5:1:cr=3:ar=3[b1];
    [vs0]crop=(in_w-2*in_w/9):in_h/20:in_w/9:0,boxblur=5:1:cr=3:ar=3[b2];
    [vs0][b0]overlay=0:0[ovr0];[ovr0][b1]overlay=main_w-overlay_w:0[ovr1];
    [ovr1][b2]overlay=main_w/9:0[vs1]
    

    On ffmpeg version N-86980-g62b7553 (Ubuntu 16.04), everything works great as it has done for years.

    $ ffmpeg -ss 60 -i ~/test.mp4 -y -filter_complex "[0:v]scale=-2:'min(320,ih)'[vs0];[vs0]crop=in_w/9:in_h/2:0:0,boxblur=5:1:cr=3:ar=3[b0];[vs0]crop=in_w/9:in_h/2:in_w-out_w:0,boxblur=5:1:cr=3:ar=3[b1];[vs0]crop=(in_w-2*in_w/9):in_h/20:in_w/9:0,boxblur=5:1:cr=3:ar=3[b2];[vs0][b0]overlay=0:0[ovr0];[ovr0][b1]overlay=main_w-overlay_w:0[ovr1];[ovr1][b2]overlay=main_w/9:0[vs1]" -map [vs1] -an -ac 2 -b:a 128k -acodec aac -b:v 1024k -r 30 -vcodec libx264 -t 300 -y -preset slow -movflags faststart -pix_fmt yuv420p -f mp4 ~/out.mp4
    ffmpeg version N-86980-g62b7553 Copyright (c) 2000-2017 the FFmpeg developers
      built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
      configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-openssl --enable-nonfree
      libavutil      55. 73.100 / 55. 73.100
      libavcodec     57.102.100 / 57.102.100
      libavformat    57. 76.100 / 57. 76.100
      libavdevice    57.  7.100 / 57.  7.100
      libavfilter     6. 98.100 /  6. 98.100
      libswscale      4.  7.102 /  4.  7.102
      libswresample   2.  8.100 /  2.  8.100
      libpostproc    54.  6.100 / 54.  6.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/cmaier/test.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf57.76.100
      Duration: 00:10:00.00, start: 0.000000, bitrate: 1036 kb/s
        Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 768x480, 1033 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
        Metadata:
          handler_name    : VideoHandler
    Stream mapping:
      Stream #0:0 (h264) -> scale
      Stream #0:0 (h264) -> crop
      Stream #0:0 (h264) -> crop
      Stream #0:0 (h264) -> overlay:main
      overlay -> Stream #0:0 (libx264)
    Press [q] to stop, [?] for help
    [libx264 @ 0x27b2ca0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
    [libx264 @ 0x27b2ca0] profile High, level 3.1
    [libx264 @ 0x27b2ca0] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x3:0x113 me=umh subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=abr mbtree=1 bitrate=1024 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    Output #0, mp4, to '/home/cmaier/out.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf57.76.100
        Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 768x480, q=-1--1, 1024 kb/s, 30 fps, 15360 tbn, 30 tbc (default)
        Metadata:
          encoder         : Lavc57.102.100 libx264
        Side data:
          cpb: bitrate max/min/avg: 0/0/1024000 buffer size: 0 vbv_delay: -1
    [mp4 @ 0x27b5a60] Starting second pass: moving the moov atom to the beginning of the file3.9x    
    frame= 9000 fps=117 q=-1.0 Lsize=   37827kB time=00:04:59.90 bitrate=1033.3kbits/s speed= 3.9x    
    video:37721kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.282333%
    [libx264 @ 0x27b2ca0] frame I:36    Avg QP:15.21  size: 50944
    [libx264 @ 0x27b2ca0] frame P:2723  Avg QP:20.12  size:  9593
    [libx264 @ 0x27b2ca0] frame B:6241  Avg QP:24.23  size:  1710
    [libx264 @ 0x27b2ca0] consecutive B-frames:  3.6%  6.9% 14.5% 75.0%
    [libx264 @ 0x27b2ca0] mb I  I16..4: 17.3% 58.5% 24.2%
    [libx264 @ 0x27b2ca0] mb P  I16..4:  0.5%  4.4%  0.9%  P16..4: 31.1% 20.7% 12.1%  0.0%  0.0%    skip:30.3%
    [libx264 @ 0x27b2ca0] mb B  I16..4:  0.0%  0.3%  0.1%  B16..8: 28.9%  5.5%  1.1%  direct: 1.1%  skip:63.1%  L0:37.5% L1:52.6% BI: 9.9%
    [libx264 @ 0x27b2ca0] final ratefactor: 19.69
    [libx264 @ 0x27b2ca0] 8x8 transform intra:72.8% inter:68.3%
    [libx264 @ 0x27b2ca0] direct mvs  spatial:99.9% temporal:0.1%
    [libx264 @ 0x27b2ca0] coded y,uvDC,uvAC intra: 74.5% 73.0% 30.4% inter: 13.0% 10.7% 0.2%
    [libx264 @ 0x27b2ca0] i16 v,h,dc,p: 49% 30%  3% 17%
    [libx264 @ 0x27b2ca0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  7% 14% 11%  7% 11%  8% 19%  8% 15%
    [libx264 @ 0x27b2ca0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:  9% 13%  5%  8% 14% 10% 17%  9% 16%
    [libx264 @ 0x27b2ca0] i8c dc,h,v,p: 42% 29% 15% 15%
    [libx264 @ 0x27b2ca0] Weighted P-Frames: Y:7.4% UV:2.9%
    [libx264 @ 0x27b2ca0] ref P L0: 59.2% 20.2% 11.5%  3.7%  4.3%  1.0%  0.1%
    [libx264 @ 0x27b2ca0] ref B L0: 87.5%  8.8%  2.7%  1.0%
    [libx264 @ 0x27b2ca0] ref B L1: 96.5%  3.5%
    [libx264 @ 0x27b2ca0] kb/s:1030.01
    

    On ffmpeg version N-93862-gf49cec2 (Ubuntu 18.04), the command fails immediately.

    # ffmpeg -ss 60 -i ~/test.mp4 -y -filter_complex "[0:v]scale=-2:'min(320,ih)'[vs0];[vs0]crop=in_w/9:in_h/2:0:0,boxblur=5:1:cr=3:ar=3[b0];[vs0]crop=in_w/9:in_h/2:in_w-out_w:0,boxblur=5:1:cr=3:ar=3[b1];[vs0]crop=(in_w-2*in_w/9):in_h/20:in_w/9:0,boxblur=5:1:cr=3:ar=3[b2];[vs0][b0]overlay=0:0[ovr0];[ovr0][b1]overlay=main_w-overlay_w:0[ovr1];[ovr1][b2]overlay=main_w/9:0[vs1]" -map [vs1] -an -ac 2 -b:a 128k -acodec aac -b:v 1024k -r 30 -vcodec libx264 -t 300 -y -preset slow -movflags faststart -pix_fmt yuv420p -f mp4 ~/out.mp4
    ffmpeg version N-93862-gf49cec2 Copyright (c) 2000-2019 the FFmpeg developers
      built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04)
      configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-openssl --enable-nonfree
      libavutil      56. 27.100 / 56. 27.100
      libavcodec     58. 52.101 / 58. 52.101
      libavformat    58. 27.103 / 58. 27.103
      libavdevice    58.  7.100 / 58.  7.100
      libavfilter     7. 53.100 /  7. 53.100
      libswscale      5.  4.101 /  5.  4.101
      libswresample   3.  4.100 /  3.  4.100
      libpostproc    55.  4.100 / 55.  4.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/root/test.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf57.76.100
      Duration: 00:10:00.00, start: 0.000000, bitrate: 1036 kb/s
        Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 768x480, 1033 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
        Metadata:
          handler_name    : VideoHandler
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x56055a5902c0] Invalid stream specifier: vs0.
        Last message repeated 1 times
    Stream specifier 'vs0' in filtergraph description [0:v]scale=-2:'min(320,ih)'[vs0];[vs0]crop=in_w/9:in_h/2:0:0,boxblur=5:1:cr=3:ar=3[b0];[vs0]crop=in_w/9:in_h/2:in_w-out_w:0,boxblur=5:1:cr=3:ar=3[b1];[vs0]crop=(in_w-2*in_w/9):in_h/20:in_w/9:0,boxblur=5:1:cr=3:ar=3[b2];[vs0][b0]overlay=0:0[ovr0];[ovr0][b1]overlay=main_w-overlay_w:0[ovr1];[ovr1][b2]overlay=main_w/9:0[vs1] matches no streams.
    
    
  • ffmpeg.js running extremely slow in iOS cordova (but fine in iOS safari ?)

    14 mai 2019, par PEWify

    I'm trying to create a phonegap app that converts videos into maybe 30 or so jpeg frames.. This page converts a bigbuckbunny video into 30 frames > https://www.pewify.com/test/ (taken from https://bgrins.github.io/videoconverter.js/demo/)

    It runs fine on an iPhone x running iOS 12 in mobile safari, it takes about 12-15 seconds to complete, but the same code packaged into a iOS cordova app running on the same phone will take almost 160 seconds to complete (both end results the same, but almost 10x as long), it works fine for android browsers or an android cordova app though

    I'm using cordova android 7.0 and cordova ios 4.5.4 (phonegap cli-8.0.0) for the app

    I've tried removing all unneeded plugins with just the bare minimum code but to no effect, it still runs just as slow

    From what i understand phonegap is just using a webview similar to safari to render the app but in this case it works but much slower, on top of that the phone starts to get heated up (presumably doing some intensive CPU?)

    Did read something about using WKWebview being faster in cordova instead but that messes up the app with lots of CORS and 'operation insecure" errors so have decided not to implement that for now (unless that is the solution?)

    Hopefully someone can point me in the right direction as i'm not exactly sure what is the issue here as it works somewhat flawlessly in android (both chrome and phonegap) but only in iOS safari and not the phonegap app

  • ffmpeg - Drawing rotated text on video with complex filters takes a very long time

    14 mai 2019, par Bedrule Paul

    I am trying to overlap different text pieces on some placeholders in a video, and I am using multiple complex filters of the following type:

    ffmpeg -i ~/Desktop/input.mp4 -filter_complex  \
        "color=black@0:100x100,format=yuva444p[c]; \
        [c][0]scale2ref[ct][mv31]; \
        [ct]setsar=1,split=1[t31];\
        [t31]\
        drawtext=text='text':x='main_w/2-text_w/2+70':y=210:fontsize="100":fontcolor=black,\
        drawtext=text='text2':x='main_w/2-text_w/2+75':y=340:fontsize="100":fontcolor=black,\
        rotate=-0.07:ow=rotw(-0.07):oh=roth(-0.07):c=black@0[txta31]; \
        [mv31][txta31]overlay=enable='between(t, 0, 1.15)':x='min(0,-H*sin(-0.07))':y='min(0,W*sin(-0.07))':shortest=1" \
           ~/Desktop/result.mp4 -y1
    

    My goal is to write differently rotated texts on different time intervals in the video. The problem is that at about 10-12 [t31]-like pieces(here is an example of only one command), the rendering time of the video is twice the time of the video, whereas drawing straight horizontal text takes about 10-20% of the total video length (examples, for a 1 minute video, it takes about 8-10 seconds to write straight horizontal text, and about 2 minutes to write the same amount of text, but inclined with an angle). Is there any better way to do these multiple rotated text bits with more performance?

  • How get video output on hardware acceleration with VAAPI on FFMPEG ?

    14 mai 2019, par HellBlood

    For my project I have to use hardware acceleration with VAAPI using FFMPEG, the problem is that with VAAPI we have to use the "vaapi_retrieve_data" function to download the GPU data. This is time consuming and I would like to be able to directly view the video via the GPU. The program is in C language and aims to decode videos. Do you have a solution to recover the output data without going through the function? Thank you in advance :) Have a good day