Newest 'ffmpeg' Questions - Stack Overflow

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

Les articles publiés sur le site

  • Split videos after concatenation using ffmpeg

    29 août 2017, par Dzung Nguyen

    I concatenated multiple videos using the following ffmpeg command:

    ffmpeg -i video1.avi video2.avi -f concat -c copy -safe 0 -o concat.mov
    

    Are there any chance that original files could be splitted back from concat.mov? Since this is a concat and copy, are there any markers in concat.mov that I could utilize?

    Update: original video codecs:

    Input #0, avi, from 'DVR___2017-08-10_09.17.56.AVI':
      Metadata:
        encoder         : DVR ZIR32  SW: 1.1.001
      Duration: 00:20:00.00, start: 0.000000, bitrate: 897 kb/s
        Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 640x360 [SAR 1:1 DAR 16:9], 703 kb/s, 5 fps, 5 tbr, 5 tbn, 5 tbc
        Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 12000 Hz, mono, s16, 192 kb/s
    

    Concatenated file:

    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'DVR___2017-08-07_19.55.36.AVI.mov':
      Metadata:
        major_brand     : qt
        minor_version   : 512
        compatible_brands: qt
        encoder         : Lavf57.71.100
      Duration: 00:52:58.80, start: 0.000000, bitrate: 875 kb/s
        Stream #0:0(eng): Video: mjpeg (jpeg / 0x6765706A), yuvj422p(pc, bt470bg/unknown/unknown), 640x360 [SAR 1:1 DAR 16:9], 682 kb/s, 5 fps, 5 tbr, 10240 tbn, 10240 tbc (default)
        Metadata:
          handler_name    : DataHandler
        Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 12000 Hz, mono, s16, 192 kb/s (default)
        Metadata:
          handler_name    : DataHandler
    
  • FFmpeg c++ how to get the timestamp, in seconds since epoch that a frame was taken at

    29 août 2017, par Derek Halden

    I've been looking around for this, and Can't seem to find it. I have an RTSP stream that I am pulling from using ffmpeg. Objects at my disposal include an AVPacket, AVFrame, AVCodecContext, and an AVFormatContext . I would like to get the absolute time that a frame was taken at. (ideally with granularity as small as milliseconds, though that's not completely necessary).

    Is there an easy way to do this using the ffmpeg libraries? I've looked at av_frame_get_best_effort_timestamp as well as codec_context->time_base, but that seems to give the answers in seconds since the beginning of the video, and I don't necessarily know when the video started.

  • FFMPEG RGB Lossless conversion video

    29 août 2017, par DCDCDC

    I have been experiencing difficulty in finding many answers with FFMPEG documentation, forums and here. What I am trying to do is a compress a screen capture video but with just RGB data. The steps I am currently taking are;

    ffmpeg -f avfoundation -pix_fmt 0rgb -r "30" -i "1" -vcodec libx264rgb -pix_fmt rgb24 -crf 0 -t 25 -q 0 -y ~/Desktop/RGB.mkv 
    
    south-58-45:~ danielcarter$ ffmpeg -f avfoundation -pix_fmt 0rgb -r "30" -i "1" -vcodec libx264rgb -pix_fmt rgb24 -crf 0 -t 170 -q 0 -y -v info ~/Desktop/output.mkv
    ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
      built with Apple LLVM version 8.1.0 (clang-802.0.41)
      configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
      libavutil      55. 58.100 / 55. 58.100
      libavcodec     57. 89.100 / 57. 89.100
      libavformat    57. 71.100 / 57. 71.100
      libavdevice    57.  6.100 / 57.  6.100
      libavfilter     6. 82.100 /  6. 82.100
      libavresample   3.  5.  0 /  3.  5.  0
      libswscale      4.  6.100 /  4.  6.100
      libswresample   2.  7.100 /  2.  7.100
      libpostproc    54.  5.100 / 54.  5.100
    [avfoundation @ 0x7fc39d004c00] Stream #0: not enough frames to estimate rate; consider increasing probesize
    Input #0, avfoundation, from '1':
      Duration: N/A, start: 175270.249500, bitrate: N/A
        Stream #0:0: Video: rawvideo ([0]RGB / 0x42475200), 0rgb, 1440x900, 1000k tbr, 1000k tbn, 1000k tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264rgb))
    Press [q] to stop, [?] for help
    [libx264rgb @ 0x7fc39d13ea00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
    [libx264rgb @ 0x7fc39d13ea00] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-bit
    [libx264rgb @ 0x7fc39d13ea00] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc=cqp mbtree=0 qp=0
    Output #0, matroska, to '/Users/danielcarter/Desktop/output.mkv':
      Metadata:
        encoder         : Lavf57.71.100
        Stream #0:0: Video: h264 (libx264rgb) (H264 / 0x34363248), rgb24, 1440x900, q=-1--1, 30 fps, 1k tbn, 30 tbc
        Metadata:
          encoder         : Lavc57.89.100 libx264rgb
        Side data:
          cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    frame= 5100 fps= 30 q=-1.0 Lsize=   12167kB time=00:02:49.96 bitrate= 586.4kbits/s speed=0.999x    
    video:12134kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.267659%
    [libx264rgb @ 0x7fc39d13ea00] frame I:21    Avg QP: 0.00  size:430796
    [libx264rgb @ 0x7fc39d13ea00] frame P:5079  Avg QP: 0.00  size:   665
    [libx264rgb @ 0x7fc39d13ea00] mb I  I16..4: 61.3%  0.0% 38.7%
    [libx264rgb @ 0x7fc39d13ea00] mb P  I16..4:  0.1%  0.0%  0.0%  P16..4:  0.0%  0.0%  0.0%  0.0%  0.0%    skip:99.9%
    [libx264rgb @ 0x7fc39d13ea00] 8x8 transform intra:0.0% inter:11.2%
    [libx264rgb @ 0x7fc39d13ea00] coded y,u,v intra: 48.0% 31.6% 29.0% inter: 0.0% 0.0% 0.0%
    [libx264rgb @ 0x7fc39d13ea00] i16 v,h,dc,p: 76% 22%  2%  0%
    [libx264rgb @ 0x7fc39d13ea00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 35%  7%  2%  2%  1%  1%  1%  3%
    [libx264rgb @ 0x7fc39d13ea00] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264rgb @ 0x7fc39d13ea00] ref P L0: 83.1%  6.4%  5.3%  5.2%
    [libx264rgb @ 0x7fc39d13ea00] kb/s:584.71
    

    This captures the screen on my mac. To the best of my knowledge, this creates a lossless file and I have compared screen shots that confirm this. The next step is where I think I have an issue. Because I want to run the compression on raw RGB data I need to convert the MKV to an RGB file;

    ffmpeg -i ~/Desktop/RGB.mkv -c:v rawvideo -pix_fmt rgb24 -crf 0 -ss 00:00:03 -to 00:02:01 -q 0 -y ~/Desktop/out.rgb
    
    south-58-45:~ danielcarter$ ffmpeg -i ~/Desktop/output.mkv -c:v rawvideo -pix_fmt rgb24 -crf 0 -ss 00:00:03 -to 00:02:01 -q 0 -y ~/Desktop/out.rgb
    ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
      built with Apple LLVM version 8.1.0 (clang-802.0.41)
      configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
      libavutil      55. 58.100 / 55. 58.100
      libavcodec     57. 89.100 / 57. 89.100
      libavformat    57. 71.100 / 57. 71.100
      libavdevice    57.  6.100 / 57.  6.100
      libavfilter     6. 82.100 /  6. 82.100
      libavresample   3.  5.  0 /  3.  5.  0
      libswscale      4.  6.100 /  4.  6.100
      libswresample   2.  7.100 /  2.  7.100
      libpostproc    54.  5.100 / 54.  5.100
    Input #0, matroska,webm, from '/Users/danielcarter/Desktop/output.mkv':
      Metadata:
        ENCODER         : Lavf57.71.100
      Duration: 00:02:50.00, start: 0.000000, bitrate: 586 kb/s
        Stream #0:0: Video: h264 (High 4:4:4 Predictive), gbrp(tv, gbr/unknown/unknown, progressive), 1440x900, 30 fps, 30 tbr, 1k tbn, 60 tbc (default)
        Metadata:
          ENCODER         : Lavc57.89.100 libx264rgb
          DURATION        : 00:02:50.000000000
    Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (/Users/danielcarter/Desktop/out.rgb) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
    Press [q] to stop, [?] for help
    Output #0, rawvideo, to '/Users/danielcarter/Desktop/out.rgb':
      Metadata:
        encoder         : Lavf57.71.100
        Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1440x900, q=2-31, 933120 kb/s, 30 fps, 30 tbn, 30 tbc (default)
        Metadata:
          DURATION        : 00:02:50.000000000
          encoder         : Lavc57.89.100 rawvideo
    frame= 3540 fps=111 q=-0.0 Lsize=13440938kB time=00:01:58.00 bitrate=933120.0kbits/s speed=3.68x    
    video:13440938kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
    

    Once I have this I can then compress and decompress successfully. I then get a working file to play back using;

    ffmpeg -f rawvideo -vcodec rawvideo -s 1440x900 -r 30 -pix_fmt rgb24 -i ~/Desktop/out.rgb -c:v libx264rgb -pix_fmt rgb24 -x264opts keyint=300:min-keyint=300:no-scenecut -y -crf 0 ~/Desktop/rgbplay.mkv
    
    south-58-45:~ danielcarter$ ffmpeg -f rawvideo -vcodec rawvideo -s 1440x900 -r 30 -pix_fmt rgb24 -i ~/Desktop/out.rgb -c:v libx264rgb -pix_fmt rgb24 -x264opts keyint=300:min-keyint=300:no-scenecut -y -crf 0 ~/Desktop/rgbplay.mkv
    ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
      built with Apple LLVM version 8.1.0 (clang-802.0.41)
      configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
      libavutil      55. 58.100 / 55. 58.100
      libavcodec     57. 89.100 / 57. 89.100
      libavformat    57. 71.100 / 57. 71.100
      libavdevice    57.  6.100 / 57.  6.100
      libavfilter     6. 82.100 /  6. 82.100
      libavresample   3.  5.  0 /  3.  5.  0
      libswscale      4.  6.100 /  4.  6.100
      libswresample   2.  7.100 /  2.  7.100
      libpostproc    54.  5.100 / 54.  5.100
    [rawvideo @ 0x7fb1f9002600] Estimating duration from bitrate, this may be inaccurate
    Input #0, rawvideo, from '/Users/danielcarter/Desktop/out.rgb':
      Duration: 00:01:58.00, start: 0.000000, bitrate: 933120 kb/s
        Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1440x900, 933120 kb/s, 30 tbr, 30 tbn, 30 tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264rgb))
    Press [q] to stop, [?] for help
    [libx264rgb @ 0x7fb1f9010c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
    [libx264rgb @ 0x7fb1f9010c00] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-bit
    [libx264rgb @ 0x7fb1f9010c00] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=2 keyint=300 keyint_min=151 scenecut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0
    Output #0, matroska, to '/Users/danielcarter/Desktop/rgbplay.mkv':
      Metadata:
        encoder         : Lavf57.71.100
        Stream #0:0: Video: h264 (libx264rgb) (H264 / 0x34363248), rgb24, 1440x900, q=-1--1, 30 fps, 1k tbn, 30 tbc
        Metadata:
          encoder         : Lavc57.89.100 libx264rgb
        Side data:
          cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    frame= 3540 fps= 64 q=-1.0 Lsize=    8319kB time=00:01:57.96 bitrate= 577.7kbits/s speed=2.13x    
    video:8297kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.273154%
    [libx264rgb @ 0x7fb1f9010c00] frame I:12    Avg QP: 0.00  size:437670
    [libx264rgb @ 0x7fb1f9010c00] frame P:3528  Avg QP: 0.00  size:   919
    [libx264rgb @ 0x7fb1f9010c00] mb I  I16..4: 61.9%  0.0% 38.1%
    [libx264rgb @ 0x7fb1f9010c00] mb P  I16..4:  0.1%  0.0%  0.0%  P16..4:  0.0%  0.0%  0.0%  0.0%  0.0%    skip:99.8%
    [libx264rgb @ 0x7fb1f9010c00] 8x8 transform intra:0.0% inter:15.1%
    [libx264rgb @ 0x7fb1f9010c00] coded y,u,v intra: 49.7% 36.5% 33.7% inter: 0.0% 0.0% 0.0%
    [libx264rgb @ 0x7fb1f9010c00] i16 v,h,dc,p: 73% 25%  1%  0%
    [libx264rgb @ 0x7fb1f9010c00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 45% 36%  7%  2%  2%  2%  2%  1%  3%
    [libx264rgb @ 0x7fb1f9010c00] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264rgb @ 0x7fb1f9010c00] ref P L0: 81.3%  7.7%  6.7%  4.3%
    [libx264rgb @ 0x7fb1f9010c00] kb/s:575.96
    

    But here I have pixel variance. My guess is there is a RGB-YUV-RGB conversion happening somewhere but I am not smart enough to work out where. If any of you can help I would forever grateful.

    Here is a picture of the two stills side by side that shows the differences;

    pixel difference

    If you need anything more I can post it also. Cheers, DC

  • Converting .hav and .dav video files

    29 août 2017, par user2535621

    Is there any library that would allow me to convert .hav and .dav video files to some more known file type? Ffmpeg on node.js seems to have some problems, so here is my code for that (it is also reducing the frame rate of the video), in case I did something wrong:

        new ffmpeg('./dist/orig_videos/07.hav', function (err, video) {
            if (!err) {
                video.setVideoFrameRate(10);
                var extension = '.mp4';
    
                video.save('./dist/compressed_videos/conv-video' + extension, function (error, file) {
                    if (error) {
                        console.log('Save error: ' + error);
                    }
    
                    fs.stat('./dist/video/conv-video' + extension, function(error, stats) {
                        if (error) {
                            console.log('Stat error: ' + error);
    
                            res.header('Content-type', 'text/html');
                            return res.end('0');
                        } else {
                            res.header('Content-type', 'text/html');
                            return res.end(stats.size.toString());
                        }
                    });
                });
            } else {
                console.log('Error: ' + err);
    
                res.header('Content-type', 'text/html');
                return res.end('');
            }
        });
    
  • Convert from NV12 to RGB/YUV420P using libswscale

    29 août 2017, par Ruben Sanchez Castellano

    I'm developing an application which needs to transform NV12 frames from h264_cuvid decoder to RGB in order to modify those frames. I checked this question but I don't not the 'Stride' value.

    My code is the following:

    uint8_t *inData[2] = { videoFrame->data[0], videoFrame->data[0] + videoFrame->width * videoFrame->height };
    int inLinesize[2] = { videoFrame->width, videoFrame->width };
    
    sws_scale(convert_yuv_to_rgb, inData, inLinesize, 0, videoFrame->height, aux_frame->data, aux_frame->linesize);
    

    But it does not work. Although the problem is on colours because I can see the luminance plane correctly.