Newest 'ffmpeg' Questions - Stack Overflow

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

Les articles publiés sur le site

  • FFMPEG - Why can't i record a video for more than 10 seconds ?

    12 février 2020, par gabriel

    I'm developing a screen recorder for windows with python but for some reason i can't record the video for more than 10 seconds.However i can record the audio for more than 10 seconds. Also i'm using:

    FFMPEG - to record the video with mp4 extension

    PYAUDIO - to record the sound

    TKINTER - to design the GUI

    Since the problem is with the video recording i will leave the code that i used with ffmpeg:

    """
    cmdGen.py generates ffmpeg commands to record your screen
    
    """
    import os
    
    class cmdGen:
        def __init__(self):
            self.fps = 60
            self.source = "desktop"
            self.encoder = 'mpeg4'
            self.hwaccel = None
            self.drawMouse = 1
            self.enableWebcam = False
            self.audList = 0
        def config(self,
                    fps=None,source=None,encoder=None,
                    hwaccel='unchanged',drawMouse=None,
                    webcam=None,audList=None):
            if fps: self.fps = fps
            if source: self.source = source
            if encoder: self.encoder = encoder
            if hwaccel != 'unchanged': self.hwaccel = hwaccel
            if drawMouse: self.drawMouse = 0 if not self.drawMouse else 1
            if webcam: self.enableWebcam = bool(webcam)
            if audList: self.audList = audList
        def setSource(self,isWindow,windowName=""):
            if not isWindow:
                self.source = "desktop"
            else:
                self.source = "title="+windowName
        def setFps(self,fps):
            self.fps = fps
        def setEncode(self,encoder):
            self.encoder = encoder
        def getCmd(self,filename):
            print("ACK")
            finalCmd = ["ffmpeg.exe","-f","gdigrab"]
            finalCmd.extend(['-i',self.source])
            finalCmd.extend(['-framerate',str(self.fps)])
            finalCmd.extend(['-c:v',self.encoder])
            if self.encoder == 'mpeg4':
                finalCmd.extend(['-q:v','7'])
            if self.hwaccel: 
                finalCmd.extend(['-hwaccel',self.hwaccel])
            finalCmd.extend(['-draw_mouse',str(self.drawMouse)])
            finalCmd.extend(["-y", filename])
            print(finalCmd)
            return finalCmd
        def getCvtCmd(self,filename):
                # if self.rcchecked.get():
                #     self.mergeProcess = subprocess.Popen(args= ["ffmpeg","-i",'tmp/tmp.mkv','-i','tmp/tmp.wav','-i','tmp/webcamtmp.mkv','-filter_complex','[2:v] scale=640:-1 [inner]; [0:0][inner] overlay=0:0 [out]',"-shortest",'-map','[out]','-y',"ScreenCaptures/"+self.filename])
                # else:
                #     self.mergeProcess = subprocess.Popen(args= ["ffmpeg","-i",'tmp/tmp.mkv','-i','tmp/tmp.wav',"-shortest",'-y',"ScreenCaptures/"+self.filename], startupinfo=startupinfo)
            print("ACK")
            finalCmd = ["ffmpeg.exe"]
            finalCmd.extend(['-i','tmp/tmp.mkv'])
            for i in range(len(self.audList)):
                finalCmd.extend(['-i','tmp/tmp_'+str(i)+'.wav'])
            if len(self.audList) > 0:
                finalCmd.extend(['-filter_complex','amerge=inputs='+str(len(self.audList)),'-ac',str(len(self.audList))])
            # finalCmd.extend(['-c:v',self.encoder])
            if self.enableWebcam:
                finalCmd.extend(['-i','tmp/webcamtmp.mkv','-filter_complex','[2:v] scale=640:-1 [inner]; [0:0][inner] '
                                                                            'overlay=0:0 [out]','-map','[out]'])
    
            #finalCmd.extend(['-shortest'])
            finalCmd.extend(["-y", filename])
            print(finalCmd)
            return finalCmd
    
    if __name__ == "__main__":
        cg = cmdGen()
        cg.setEncode("h264_nvenc")
        cg.setFps(60)
        cg.setSource(False)
        print(cg.getCmd("tmp"))
    

    Thanks guys

    Full log trying to record 1 minute :

    C:\Users\FabianoFreitas\AppData\Local\Programs\Python\Python37\python.exe C:/Users/FabianoFreitas/Desktop/PowerShare-v2.0/screenRecorder.py
    ACK
    ['ffmpeg.exe', '-f', 'gdigrab', '-i', 'desktop', '-framerate', '60', '-c:v', 'mpeg4', '-q:v', '7', '-draw_mouse', '1', '-y', 'tmp/tmp.mkv']
    * recording
    ACK
    ['ffmpeg.exe', '-i', 'tmp/tmp.mkv', '-i', 'tmp/tmp_0.wav', '-filter_complex', 'amerge=inputs=1', '-ac', '1', '-y', 'Videos/ScreenCapture24.mp4']
    * done recording
    ffmpeg version git-2020-02-05-e6891d1 Copyright (c) 2000-2020 the FFmpeg developers
      built with gcc 9.2.1 (GCC) 20200122
      configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
      libavutil      56. 39.100 / 56. 39.100
      libavcodec     58. 67.101 / 58. 67.101
      libavformat    58. 37.100 / 58. 37.100
      libavdevice    58.  9.103 / 58.  9.103
      libavfilter     7. 74.100 /  7. 74.100
      libswscale      5.  6.100 /  5.  6.100
      libswresample   3.  6.100 /  3.  6.100
      libpostproc    55.  6.100 / 55.  6.100
    Input #0, matroska,webm, from 'tmp/tmp.mkv':
      Metadata:
        ENCODER         : Lavf58.37.100
      Duration: N/A, start: 0.000000, bitrate: N/A
        Stream #0:0: Video: mpeg4 (Simple Profile), yuv420p, 2560x1080 [SAR 1:1 DAR 64:27], 29.97 fps, 29.97 tbr, 1k tbn, 30k tbc (default)
        Metadata:
          ENCODER         : Lavc58.67.101 mpeg4
    Guessed Channel Layout for Input Stream #1.0 : stereo
    Input #1, wav, from 'tmp/tmp_0.wav':
      Duration: 00:01:09.08, bitrate: 1411 kb/s
        Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Stream mapping:
      Stream #1:0 (pcm_s16le) -> amerge (graph 0)
      amerge (graph 0) -> Stream #0:0 (aac)
      Stream #0:0 -> #0:1 (mpeg4 (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    [Parsed_amerge_0 @ 00000218cb4c1640] No channel layout for input 1
    [libx264 @ 00000218cb4acdc0] using SAR=1/1
    [libx264 @ 00000218cb4acdc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 00000218cb4acdc0] profile High, level 5.0, 4:2:0, 8-bit
    [libx264 @ 00000218cb4acdc0] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 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=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    Output #0, mp4, to 'Videos/ScreenCapture24.mp4':
      Metadata:
        encoder         : Lavf58.37.100
        Stream #0:0: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 69 kb/s
        Metadata:
          encoder         : Lavc58.67.101 aac
        Stream #0:1: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 2560x1080 [SAR 1:1 DAR 64:27], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
        Metadata:
          encoder         : Lavc58.67.101 libx264
        Side data:
          cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    [matroska,webm @ 00000218cb44af00] File ended prematurely
    frame=  297 fps=113 q=-1.0 Lsize=    2325kB time=00:01:09.07 bitrate= 275.8kbits/s dup=22 drop=0 speed=26.2x    
    video:1713kB audio:591kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.900237%
    [aac @ 00000218cb4ab780] Qavg: 24995.135
    [libx264 @ 00000218cb4acdc0] frame I:4     Avg QP:15.13  size:199596
    [libx264 @ 00000218cb4acdc0] frame P:85    Avg QP:21.15  size:  9466
    [libx264 @ 00000218cb4acdc0] frame B:208   Avg QP:24.93  size:   725
    [libx264 @ 00000218cb4acdc0] consecutive B-frames:  5.1%  2.7%  6.1% 86.2%
    [libx264 @ 00000218cb4acdc0] mb I  I16..4: 48.0% 45.3%  6.7%
    [libx264 @ 00000218cb4acdc0] mb P  I16..4:  1.6%  1.9%  0.8%  P16..4:  1.4%  0.4%  0.3%  0.0%  0.0%    skip:93.7%
    [libx264 @ 00000218cb4acdc0] mb B  I16..4:  0.1%  0.1%  0.0%  B16..8:  3.0%  0.1%  0.0%  direct: 0.0%  skip:96.6%  L0:51.2% L1:48.3% BI: 0.6%
    [libx264 @ 00000218cb4acdc0] 8x8 transform intra:44.4% inter:69.1%
    [libx264 @ 00000218cb4acdc0] coded y,uvDC,uvAC intra: 23.8% 27.4% 19.5% inter: 0.2% 0.3% 0.1%
    [libx264 @ 00000218cb4acdc0] i16 v,h,dc,p: 54% 45%  1%  0%
    [libx264 @ 00000218cb4acdc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 20% 41%  2%  2%  1%  2%  1%  5%
    [libx264 @ 00000218cb4acdc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 35% 17%  2%  3%  3%  4%  2%  4%
    [libx264 @ 00000218cb4acdc0] i8c dc,h,v,p: 61% 25% 11%  2%
    [libx264 @ 00000218cb4acdc0] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 00000218cb4acdc0] ref P L0: 68.0%  6.3% 16.6%  9.1%
    [libx264 @ 00000218cb4acdc0] ref B L0: 70.2% 23.7%  6.1%
    [libx264 @ 00000218cb4acdc0] ref B L1: 91.1%  8.9%
    [libx264 @ 00000218cb4acdc0] kb/s:1415.80
    
  • ffmpeg erorr as "video4linux2 Dequeued v4l2 buffer contains corrupted data (0 bytes). " when captured image,in beaglebone black,

    12 février 2020, par Deepak Poul

    when i'm capturing a image using ffmpeg 4.2.1 in debian 9.5 of Beaglebone black its not showing this error as [video4linux2,v4l2 @ 0x2e0f1e0] Dequeued v4l2 buffer contains corrupted data (0 bytes). i used this command to capture image "ffmpeg -y -i /dev/video0 -ss 00:00:06 -vframes 1 image.jpg"

  • is that possible to serv hls and dash mpeg both at a time

    12 février 2020, par Rahul M

    actually i'm a kind a newbie to the Nginx RTMP server. I had setup my nginx.conf file to accept both hls and dash-mpeg. but the now problem is at a once I can able to serve either of the hls or dash-mpeg. so now my question is that possible to serve both hls and dash-mpeg at the same time for two different videos? I'm streaming video from OBS Studio.
    here are my MPEG and hls code in nginx.conf file

    rtmp {
    server {
        listen 1935; # Listen on standard RTMP port
        chunk_size 4000;
    
        application show {
            live on;
            # Turn on HLS
            hls on;
            hls_path /nginx/hls/;
            hls_fragment 3;
            hls_playlist_length 60;
            deny play all;
        }
        application dash {
                live on;
                dash on;
                dash_path /nginx/dash;
    
        }
    }
    

    }

    thank you advance.

  • PHP-FFMPeg Converts Video Twice

    12 février 2020, par 127-0-0-1

    I'm using FFMpeg's library for PHP (see https://github.com/PHP-FFMpeg/PHP-FFMpeg). After starting the convert process, the converted video's file size gradually increases (I constantly refresh the folder) and after converting finishes, the file size becomes 0 again and converting starts again. So converting is done twice, I could not understand if it is normal or there is something wrong.

    My converting code is:

    require 'vendor/autoload.php';
    $ffmpeg = FFMpeg\FFMpeg::create([
            'ffmpeg.binaries'  => 'C:/ffmpeg/ffmpeg.exe', 
            'ffprobe.binaries' => 'C:/ffmpeg/ffprobe.exe',
            'timeout'          => 0 
        ]);
    
    $video = $ffmpeg->open($fileName);
    $video
        ->filters()
        ->resize(new FFMpeg\Coordinate\Dimension(1920, 1080 ))
        ->synchronize();
    
    $format = new FFMpeg\Format\Video\X264('libmp3lame');
    
    try {
        $video->save($format, $outFileName);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    
  • how do surface blur to a video using FFMPEG common line ?

    12 février 2020, par zuiluo

    enter image description here enter image description here

    like above two image , it is one frame of the video ,

    origin video:https://youtu.be/Qmoc7VyX2f8

    surface blur video:https://youtu.be/zbw1XVXjn4c

    Is there a way to use FFMPEG common line do that , thank you very much