Recherche avancée

Médias (3)

Mot : - Tags -/pdf

Autres articles (35)

  • Participer à sa documentation

    10 avril 2011

    La documentation est un des travaux les plus importants et les plus contraignants lors de la réalisation d’un outil technique.
    Tout apport extérieur à ce sujet est primordial : la critique de l’existant ; la participation à la rédaction d’articles orientés : utilisateur (administrateur de MediaSPIP ou simplement producteur de contenu) ; développeur ; la création de screencasts d’explication ; la traduction de la documentation dans une nouvelle langue ;
    Pour ce faire, vous pouvez vous inscrire sur (...)

  • Contribute to a better visual interface

    13 avril 2011

    MediaSPIP is based on a system of themes and templates. Templates define the placement of information on the page, and can be adapted to a wide range of uses. Themes define the overall graphic appearance of the site.
    Anyone can submit a new graphic theme or template and make it available to the MediaSPIP community.

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

Sur d’autres sites (7282)

  • ffmpeg seek calculating wrong byte range ?

    12 mars 2020, par user4455

    I’m running into an issue while trying to extract thumbnails from a movie file at a specific timestamp. Generally I’ve had no issues with this, but I’ve come across a set of movie files that are getting an error about the byte range requested (416 Requested Range Not Satisfiable).

    The odd thing is that the server is correctly returning the content length in the partial content request, yet when it requests the movie file it requests a length that exceeds that.

    This is a bit over my head, so I’m not sure what could be happening here. Any insight would be great.

    The Command :

    /usr/bin/ffmpeg -y -ss 1400 -i 'https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4' -qscale:v 2 -f image2 -vframes 1 -filter:v 'scale=192:108' -loglevel debug /data/www/storage/test.jpg 2>&1

    The Error :

    [https @ 0x22e1e00] header='HTTP/1.1 416 Requested Range Not Satisfiable'
    [https @ 0x22e1e00] http_code=416
    [https @ 0x22e1e00] HTTP error 416 Requested Range Not Satisfiable

    Source File Size :

    1776706045 bytes

    Source Content Duration :

    2897.624271

    Partial Content Request :

    [https @ 0x22e1e00] header='HTTP/1.1 206 Partial Content'
    [https @ 0x22e1e00] http_code=206
    [https @ 0x22e1e00] header='x-amz-id-2: 4J1pgHExIUA0GxIxSBmGJjrRqliHbsIjXeuGzVfTlaaoVXbyZI5FQNma8fGaifcovkXfxJev5yU='
    [https @ 0x22e1e00] header='x-amz-request-id: 78B3BDBB0356EF40'
    [https @ 0x22e1e00] header='Date: Wed, 16 Dec 2015 23:51:29 GMT'
    [https @ 0x22e1e00] header='x-amz-meta-content-length: 2898'
    [https @ 0x22e1e00] header='x-amz-meta-cb-modifiedtime: Tue, 15 Dec 2015 17:59:51 GMT'
    [https @ 0x22e1e00] header='Last-Modified: Wed, 16 Dec 2015 23:44:59 GMT'
    [https @ 0x22e1e00] header='ETag: "6341a8022630667a8070a83575e542e7-27"'
    [https @ 0x22e1e00] header='Accept-Ranges: bytes'
    [https @ 0x22e1e00] header='Content-Range: bytes 0-1776706044/1776706045'
    [https @ 0x22e1e00] header='Content-Type: video/mp4'
    [https @ 0x22e1e00] header='Content-Length: 1776706045'
    [https @ 0x22e1e00] header='Server: AmazonS3'
    [https @ 0x22e1e00] header='Connection: close'

    FFmpeg Request :

    request: GET /my-bucket/mymoviefile.mp4 HTTP/1.1
    User-Agent: Lavf/56.25.101
    Accept: */*
    Range: bytes=1781732960-
    Connection: close
    Host: s3-us-west-2.amazonaws.com
    Icy-MetaData: 1

    Entire Log :

    # /usr/bin/ffmpeg -y -ss 1400 -i 'https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4' -qscale:v 2 -f image2 -vframes 1 -filter:v 'scale=192:108' -loglevel debug /data/www/storage/test.jpg 2>&1
    ffmpeg version 2.6.4 Copyright (c) 2000-2015 the FFmpeg developers
     built with gcc 4.9.2 (Debian 4.9.2-10)
     configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/x86_64-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libpulse --disable-mips32r2 --disable-mipsdspr1 --disable-mipsdspr2 --enable-libvidstab --enable-libzvbi --enable-avresample --disable-htmlpages --disable-podpages --enable-libutvideo --enable-libfdk-aac --enable-libx265 --enable-libiec61883 --enable-vaapi --enable-libdc1394 --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
     libavutil      54. 20.100 / 54. 20.100
     libavcodec     56. 26.100 / 56. 26.100
     libavformat    56. 25.101 / 56. 25.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 11.102 /  5. 11.102
     libavresample   2.  1.  0 /  2.  1.  0
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  3.100 / 53.  3.100
    Splitting the commandline.
    Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
    Reading option '-ss' ... matched as option 'ss' (set the start time offset) with argument '1400'.
    Reading option '-i' ... matched as input file with argument 'https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4'.
    Reading option '-qscale:v' ... matched as option 'qscale' (use fixed quality scale (VBR)) with argument '2'.
    Reading option '-f' ... matched as option 'f' (force format) with argument 'image2'.
    Reading option '-vframes' ... matched as option 'vframes' (set the number of video frames to output) with argument '1'.
    Reading option '-filter:v' ... matched as option 'filter' (set stream filtergraph) with argument 'scale=192:108'.
    Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
    Reading option '/data/www/storage/test.jpg' ... matched as output file.
    Finished splitting the commandline.
    Parsing a group of options: global .
    Applying option y (overwrite output files) with argument 1.
    Applying option loglevel (set logging level) with argument debug.
    Successfully parsed a group of options.
    Parsing a group of options: input file https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4.
    Applying option ss (set the start time offset) with argument 1400.
    Successfully parsed a group of options.
    Opening an input file: https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4.
    [https @ 0x22e1e00] request: GET /my-bucket/mymoviefile.mp4 HTTP/1.1
    User-Agent: Lavf/56.25.101
    Accept: */*
    Range: bytes=0-
    Connection: close
    Host: s3-us-west-2.amazonaws.com
    Icy-MetaData: 1


    [https @ 0x22e1e00] header='HTTP/1.1 206 Partial Content'
    [https @ 0x22e1e00] http_code=206
    [https @ 0x22e1e00] header='x-amz-id-2: 4J1pgHExIUA0GxIxSBmGJjrRqliHbsIjXeuGzVfTlaaoVXbyZI5FQNma8fGaifcovkXfxJev5yU='
    [https @ 0x22e1e00] header='x-amz-request-id: 78B3BDBB0356EF40'
    [https @ 0x22e1e00] header='Date: Wed, 16 Dec 2015 23:51:29 GMT'
    [https @ 0x22e1e00] header='x-amz-meta-content-length: 2898'
    [https @ 0x22e1e00] header='x-amz-meta-cb-modifiedtime: Tue, 15 Dec 2015 17:59:51 GMT'
    [https @ 0x22e1e00] header='Last-Modified: Wed, 16 Dec 2015 23:44:59 GMT'
    [https @ 0x22e1e00] header='ETag: "6341a8022630667a8070a83575e542e7-27"'
    [https @ 0x22e1e00] header='Accept-Ranges: bytes'
    [https @ 0x22e1e00] header='Content-Range: bytes 0-1776706044/1776706045'
    [https @ 0x22e1e00] header='Content-Type: video/mp4'
    [https @ 0x22e1e00] header='Content-Length: 1776706045'
    [https @ 0x22e1e00] header='Server: AmazonS3'
    [https @ 0x22e1e00] header='Connection: close'
    [https @ 0x22e1e00] header=''
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x22e1740] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x22e1740] ISO: File Type Major Brand: mp42
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x22e1740] Before avformat_find_stream_info() pos: 1647960 bytes read:1652200 seeks:0
    [h264 @ 0x22e92c0] no picture
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x22e1740] All info found
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x22e1740] After avformat_find_stream_info() pos: 1862326 bytes read:1878504 seeks:0 frames:16
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4':
     Metadata:
       major_brand     : mp42
       minor_version   : 1
       compatible_brands: isommp41avc1
       creation_time   : 2015-11-18 02:34:41
     Duration: 00:48:17.70, start: 0.000000, bitrate: 4905 kb/s
       Stream #0:0(und), 15, 1/2997: Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, left), 1920x1080 (1920x1088) [SAR 1:1 DAR 16:9], 1001/60000, 9994 kb/s, 29.97 fps, 29.97 tbr, 2997 tbn, 59.94 tbc (default)
       Metadata:
         creation_time   : 2015-11-18 02:34:41
         handler_name    : ?Apple Video Media Handler
       Stream #0:1(und), 1, 1/48000: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s (default)
       Metadata:
         creation_time   : 2015-11-18 02:34:41
         handler_name    : ?Apple Sound Media Handler
    Successfully opened the file.
    Parsing a group of options: output file /data/www/storage/test.jpg.
    Applying option qscale:v (use fixed quality scale (VBR)) with argument 2.
    Applying option f (force format) with argument image2.
    Applying option vframes (set the number of video frames to output) with argument 1.
    Applying option filter:v (set stream filtergraph) with argument scale=192:108.
    Successfully parsed a group of options.
    Opening an output file: /data/www/storage/test.jpg.
    Successfully opened the file.
    detected 2 logical cores
    [Parsed_scale_0 @ 0x22cd4c0] Setting 'w' to value '192'
    [Parsed_scale_0 @ 0x22cd4c0] Setting 'h' to value '108'
    [Parsed_scale_0 @ 0x22cd4c0] Setting 'flags' to value '0x4'
    [Parsed_scale_0 @ 0x22cd4c0] w:192 h:108 flags:'0x4' interl:0
    [graph 0 input from stream 0:0 @ 0x22ccfe0] Setting 'video_size' to value '1920x1080'
    [graph 0 input from stream 0:0 @ 0x22ccfe0] Setting 'pix_fmt' to value '0'
    [graph 0 input from stream 0:0 @ 0x22ccfe0] Setting 'time_base' to value '1/2997'
    [graph 0 input from stream 0:0 @ 0x22ccfe0] Setting 'pixel_aspect' to value '1/1'
    [graph 0 input from stream 0:0 @ 0x22ccfe0] Setting 'sws_param' to value 'flags=2'
    [graph 0 input from stream 0:0 @ 0x22ccfe0] Setting 'frame_rate' to value '2997/100'
    [graph 0 input from stream 0:0 @ 0x22ccfe0] w:1920 h:1080 pixfmt:yuv420p tb:1/2997 fr:2997/100 sar:1/1 sws_param:flags=2
    [format @ 0x2798640] compat: called with args=[yuvj420p|yuvj422p|yuvj444p]
    [format @ 0x2798640] Setting 'pix_fmts' to value 'yuvj420p|yuvj422p|yuvj444p'
    [AVFilterGraph @ 0x22cda60] query_formats: 5 queried, 4 merged, 0 already done, 0 delayed
    [Parsed_scale_0 @ 0x22cd4c0] picking yuvj420p out of 3 ref:yuv420p alpha:0
    [swscaler @ 0x22c3c80] deprecated pixel format used, make sure you did set range correctly
    [Parsed_scale_0 @ 0x22cd4c0] w:1920 h:1080 fmt:yuv420p sar:1/1 -> w:192 h:108 fmt:yuvj420p sar:1/1 flags:0x4
    [mjpeg @ 0x2854e20] intra_quant_bias = 96 inter_quant_bias = 0
    [mjpeg @ 0x28716c0] intra_quant_bias = 96 inter_quant_bias = 0
    [mjpeg @ 0x2795320] intra_quant_bias = 96 inter_quant_bias = 0
    Output #0, image2, to '/data/www/storage/test.jpg':
     Metadata:
       major_brand     : mp42
       minor_version   : 1
       compatible_brands: isommp41avc1
       encoder         : Lavf56.25.101
       Stream #0:0(und), 0, 100/2997: Video: mjpeg, yuvj420p(pc, left), 192x108 [SAR 1:1 DAR 16:9], 100/2997, q=2-31, 200 kb/s, 29.97 fps, 29.97 tbn, 29.97 tbc (default)
       Metadata:
         creation_time   : 2015-11-18 02:34:41
         handler_name    : ?Apple Video Media Handler
         encoder         : Lavc56.26.100 mjpeg
    Stream mapping:
     Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
    Press [q] to stop, [?] for help
    [https @ 0x22e1e00] request: GET /my-bucket/mymoviefile.mp4 HTTP/1.1
    User-Agent: Lavf/56.25.101
    Accept: */*
    Range: bytes=1781732960-
    Connection: close
    Host: s3-us-west-2.amazonaws.com
    Icy-MetaData: 1


    [https @ 0x22e1e00] header='HTTP/1.1 416 Requested Range Not Satisfiable'
    [https @ 0x22e1e00] http_code=416
    [https @ 0x22e1e00] HTTP error 416 Requested Range Not Satisfiable
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x22e1740] stream 0, offset 0x6a331660: partial file
    https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4: Invalid data found when processing input
    [output stream 0:0 @ 0x22d7500] EOF on sink link output stream 0:0:default.
    No more output streams to write to, finishing.
    frame=    0 fps=0.0 q=0.0 Lsize=N/A time=00:00:00.00 bitrate=N/A
    video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    Input file #0 (https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4):
     Input stream #0:0 (video): 0 packets read (0 bytes); 0 frames decoded;
     Input stream #0:1 (audio): 0 packets read (0 bytes);
     Total: 0 packets (0 bytes) demuxed
    Output file #0 (/data/www/storage/test.jpg):
     Output stream #0:0 (video): 0 frames encoded; 0 packets muxed (0 bytes);
     Total: 0 packets (0 bytes) muxed
    Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
    0 frames successfully decoded, 0 decoding errors
    [AVIOContext @ 0x27ab100] Statistics: 1878504 bytes read, 0 seeks

    FFprobe Result :

    # /usr/bin/ffprobe -show_format -show_streams -i 'https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4'
    ffprobe version 2.6.4 Copyright (c) 2007-2015 the FFmpeg developers
     built with gcc 4.9.2 (Debian 4.9.2-10)
     configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --enable-libvo-aacenc --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libaacplus --libdir=/usr/lib/x86_64-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libpulse --disable-mips32r2 --disable-mipsdspr1 --disable-mipsdspr2 --enable-libvidstab --enable-libzvbi --enable-avresample --disable-htmlpages --disable-podpages --enable-libutvideo --enable-libfdk-aac --enable-libx265 --enable-libiec61883 --enable-vaapi --enable-libdc1394 --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
     libavutil      54. 20.100 / 54. 20.100
     libavcodec     56. 26.100 / 56. 26.100
     libavformat    56. 25.101 / 56. 25.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 11.102 /  5. 11.102
     libavresample   2.  1.  0 /  2.  1.  0
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  3.100 / 53.  3.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4':
     Metadata:
       major_brand     : mp42
       minor_version   : 1
       compatible_brands: isommp41avc1
       creation_time   : 2015-11-18 02:34:41
     Duration: 00:48:17.70, start: 0.000000, bitrate: 4905 kb/s
       Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], 9994 kb/s, 29.97 fps, 29.97 tbr, 2997 tbn, 59.94 tbc (default)
       Metadata:
         creation_time   : 2015-11-18 02:34:41
         handler_name    : ?Apple Video Media Handler
       Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s (default)
       Metadata:
         creation_time   : 2015-11-18 02:34:41
         handler_name    : ?Apple Sound Media Handler
    [STREAM]
    index=0
    codec_name=h264
    codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
    profile=High
    codec_type=video
    codec_time_base=1001/60000
    codec_tag_string=avc1
    codec_tag=0x31637661
    width=1920
    height=1080
    has_b_frames=1
    sample_aspect_ratio=1:1
    display_aspect_ratio=16:9
    pix_fmt=yuv420p
    level=40
    color_range=tv
    color_space=unknown
    color_transfer=unknown
    color_primaries=unknown
    chroma_location=left
    timecode=N/A
    refs=3
    is_avc=1
    nal_length_size=4
    id=N/A
    r_frame_rate=2997/100
    avg_frame_rate=2997/100
    time_base=1/2997
    start_pts=0
    start_time=0.000000
    duration_ts=8684300
    duration=2897.664331
    bit_rate=9994429
    max_bit_rate=N/A
    bits_per_raw_sample=8
    nb_frames=86843
    nb_read_frames=N/A
    nb_read_packets=N/A
    DISPOSITION:default=1
    DISPOSITION:dub=0
    DISPOSITION:original=0
    DISPOSITION:comment=0
    DISPOSITION:lyrics=0
    DISPOSITION:karaoke=0
    DISPOSITION:forced=0
    DISPOSITION:hearing_impaired=0
    DISPOSITION:visual_impaired=0
    DISPOSITION:clean_effects=0
    DISPOSITION:attached_pic=0
    TAG:creation_time=2015-11-18 02:34:41
    TAG:language=und
    TAG:handler_name=Apple Video Media Handler
    [/STREAM]
    [STREAM]
    index=1
    codec_name=aac
    codec_long_name=AAC (Advanced Audio Coding)
    profile=LC
    codec_type=audio
    codec_time_base=1/48000
    codec_tag_string=mp4a
    codec_tag=0x6134706d
    sample_fmt=fltp
    sample_rate=48000
    channels=2
    channel_layout=stereo
    bits_per_sample=0
    id=N/A
    r_frame_rate=0/0
    avg_frame_rate=0/0
    time_base=1/48000
    start_pts=0
    start_time=0.000000
    duration_ts=139085965
    duration=2897.624271
    bit_rate=192002
    max_bit_rate=N/A
    bits_per_raw_sample=N/A
    nb_frames=135828
    nb_read_frames=N/A
    nb_read_packets=N/A
    DISPOSITION:default=1
    DISPOSITION:dub=0
    DISPOSITION:original=0
    DISPOSITION:comment=0
    DISPOSITION:lyrics=0
    DISPOSITION:karaoke=0
    DISPOSITION:forced=0
    DISPOSITION:hearing_impaired=0
    DISPOSITION:visual_impaired=0
    DISPOSITION:clean_effects=0
    DISPOSITION:attached_pic=0
    TAG:creation_time=2015-11-18 02:34:41
    TAG:language=und
    TAG:handler_name=Apple Sound Media Handler
    [/STREAM]
    [FORMAT]
    filename=https://s3-us-west-2.amazonaws.com/my-bucket/mymoviefile.mp4
    nb_streams=2
    nb_programs=0
    format_name=mov,mp4,m4a,3gp,3g2,mj2
    format_long_name=QuickTime / MOV
    start_time=0.000000
    duration=2897.695000
    size=1776706045
    bit_rate=4905156
    probe_score=100
    TAG:major_brand=mp42
    TAG:minor_version=1
    TAG:compatible_brands=isommp41avc1
    TAG:creation_time=2015-11-18 02:34:41
    [/FORMAT]
  • c++ - using FFmpeg encode and UDP with a Webcam

    14 mars, par Rendres

    I'm trying to get frames from a Webcam using OpenCV, encode them with FFmpeg and send them using UDP.

    



    I did before a similar project that instead of sending the packets with UDP, it saved them in a video file.

    



    My code is.

    



    #include &#xA;#include &#xA;#include &#xA;#include &#xA;&#xA;extern "C" {&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavutil></libavutil>opt.h>&#xA;#include <libavutil></libavutil>imgutils.h>&#xA;#include <libavutil></libavutil>mathematics.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;#include <libswresample></libswresample>swresample.h>&#xA;}&#xA;&#xA;#include <opencv2></opencv2>opencv.hpp>&#xA;&#xA;using namespace std;&#xA;using namespace cv;&#xA;&#xA;#define WIDTH 640&#xA;#define HEIGHT 480&#xA;#define CODEC_ID AV_CODEC_ID_H264&#xA;#define STREAM_PIX_FMT AV_PIX_FMT_YUV420P&#xA;&#xA;static AVFrame *frame, *pFrameBGR;&#xA;&#xA;int main(int argc, char **argv)&#xA;{&#xA;VideoCapture cap(0);&#xA;const char *url = "udp://127.0.0.1:8080";&#xA;&#xA;AVFormatContext *formatContext;&#xA;AVStream *stream;&#xA;AVCodec *codec;&#xA;AVCodecContext *c;&#xA;AVDictionary *opts = NULL;&#xA;&#xA;int ret, got_packet;&#xA;&#xA;if (!cap.isOpened())&#xA;{&#xA;    return -1;&#xA;}&#xA;&#xA;av_log_set_level(AV_LOG_TRACE);&#xA;&#xA;av_register_all();&#xA;avformat_network_init();&#xA;&#xA;avformat_alloc_output_context2(&amp;formatContext, NULL, "h264", url);&#xA;if (!formatContext)&#xA;{&#xA;    av_log(NULL, AV_LOG_FATAL, "Could not allocate an output context for &#x27;%s&#x27;.\n", url);&#xA;}&#xA;&#xA;codec = avcodec_find_encoder(CODEC_ID);&#xA;if (!codec)&#xA;{&#xA;    av_log(NULL, AV_LOG_ERROR, "Could not find encoder.\n");&#xA;}&#xA;&#xA;stream = avformat_new_stream(formatContext, codec);&#xA;&#xA;c = avcodec_alloc_context3(codec);&#xA;&#xA;stream->id = formatContext->nb_streams - 1;&#xA;stream->time_base = (AVRational){1, 25};&#xA;&#xA;c->codec_id = CODEC_ID;&#xA;c->bit_rate = 400000;&#xA;c->width = WIDTH;&#xA;c->height = HEIGHT;&#xA;c->time_base = stream->time_base;&#xA;c->gop_size = 12;&#xA;c->pix_fmt = STREAM_PIX_FMT;&#xA;&#xA;if (formatContext->flags &amp; AVFMT_GLOBALHEADER)&#xA;    c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;&#xA;av_dict_set(&amp;opts, "preset", "fast", 0);&#xA;&#xA;av_dict_set(&amp;opts, "tune", "zerolatency", 0);&#xA;&#xA;ret = avcodec_open2(c, codec, NULL);&#xA;if (ret &lt; 0)&#xA;{&#xA;    av_log(NULL, AV_LOG_ERROR, "Could not open video codec.\n");&#xA;}&#xA;&#xA;pFrameBGR = av_frame_alloc();&#xA;if (!pFrameBGR)&#xA;{&#xA;    av_log(NULL, AV_LOG_ERROR, "Could not allocate video frame.\n");&#xA;}&#xA;&#xA;frame = av_frame_alloc();&#xA;if (!frame)&#xA;{&#xA;    av_log(NULL, AV_LOG_ERROR, "Could not allocate video frame.\n");&#xA;}&#xA;&#xA;frame->format = c->pix_fmt;&#xA;frame->width = c->width;&#xA;frame->height = c->height;&#xA;&#xA;ret = avcodec_parameters_from_context(stream->codecpar, c);&#xA;if (ret &lt; 0)&#xA;{&#xA;    av_log(NULL, AV_LOG_ERROR, "Could not open video codec.\n");&#xA;}&#xA;&#xA;av_dump_format(formatContext, 0, url, 1);&#xA;&#xA;ret = avformat_write_header(formatContext, NULL);&#xA;if (ret != 0)&#xA;{&#xA;    av_log(NULL, AV_LOG_ERROR, "Failed to connect to &#x27;%s&#x27;.\n", url);&#xA;}&#xA;&#xA;Mat image(Size(HEIGHT, WIDTH), CV_8UC3);&#xA;SwsContext *swsctx = sws_getContext(WIDTH, HEIGHT, AV_PIX_FMT_BGR24, WIDTH, HEIGHT, AV_PIX_FMT_YUV420P, SWS_BILINEAR, NULL, NULL, NULL);&#xA;int frame_pts = 0;&#xA;&#xA;while (1)&#xA;{&#xA;    cap >> image;&#xA;&#xA;    int numBytesYUV = av_image_get_buffer_size(STREAM_PIX_FMT, WIDTH, HEIGHT, 1);&#xA;    uint8_t *bufferYUV = (uint8_t *)av_malloc(numBytesYUV * sizeof(uint8_t));&#xA;&#xA;    avpicture_fill((AVPicture *)pFrameBGR, image.data, AV_PIX_FMT_BGR24, WIDTH, HEIGHT);&#xA;    avpicture_fill((AVPicture *)frame, bufferYUV, STREAM_PIX_FMT, WIDTH, HEIGHT);&#xA;&#xA;    sws_scale(swsctx, (uint8_t const *const *)pFrameBGR->data, pFrameBGR->linesize, 0, HEIGHT, frame->data, frame->linesize);&#xA;&#xA;    AVPacket pkt = {0};&#xA;    av_init_packet(&amp;pkt);&#xA;&#xA;    frame->pts = frame_pts;&#xA;&#xA;    ret = avcodec_encode_video2(c, &amp;pkt, frame, &amp;got_packet);&#xA;    if (ret &lt; 0)&#xA;    {&#xA;        av_log(NULL, AV_LOG_ERROR, "Error encoding frame\n");&#xA;    }&#xA;&#xA;    if (got_packet)&#xA;    {&#xA;        pkt.pts = av_rescale_q_rnd(pkt.pts, c->time_base, stream->time_base, AVRounding(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));&#xA;        pkt.dts = av_rescale_q_rnd(pkt.dts, c->time_base, stream->time_base, AVRounding(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));&#xA;        pkt.duration = av_rescale_q(pkt.duration, c->time_base, stream->time_base);&#xA;        pkt.stream_index = stream->index;&#xA;&#xA;        return av_interleaved_write_frame(formatContext, &amp;pkt);&#xA;&#xA;        cout &lt;&lt; "Seguro que si" &lt;&lt; endl;&#xA;    }&#xA;    frame_pts&#x2B;&#x2B;;&#xA;}&#xA;&#xA;avcodec_free_context(&amp;c);&#xA;av_frame_free(&amp;frame);&#xA;avformat_free_context(formatContext);&#xA;&#xA;return 0;&#xA;}&#xA;

    &#xA;&#xA;

    The code compiles but it returns Segmentation fault in the function av_interleaved_write_frame(). I've tried several implementations or several codecs (in this case I'm using libopenh264, but using mpeg2video returns the same segmentation fault). I tried also with av_write_frame() but it returns the same error.

    &#xA;&#xA;

    As I told before, I only want to grab frames from a webcam connected via USB, encode them to H264 and send the packets through UDP to another PC.

    &#xA;&#xA;

    My console log when I run the executable is.

    &#xA;&#xA;

    [100%] Built target display&#xA;[OpenH264] this = 0x0x244b4f0, Info:CWelsH264SVCEncoder::SetOption():ENCODER_OPTION_TRACE_CALLBACK callback = 0x7f0c302a87c0.&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Info:CWelsH264SVCEncoder::InitEncoder(), openh264 codec version = 5a5c4f1&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Info:iUsageType = 0,iPicWidth= 640;iPicHeight= 480;iTargetBitrate= 400000;iMaxBitrate= 400000;iRCMode= 0;iPaddingFlag= 0;iTemporalLayerNum= 1;iSpatialLayerNum= 1;fFrameRate= 25.000000f;uiIntraPeriod= 12;eSpsPpsIdStrategy = 0;bPrefixNalAddingCtrl = 0;bSimulcastAVC=0;bEnableDenoise= 0;bEnableBackgroundDetection= 1;bEnableSceneChangeDetect = 1;bEnableAdaptiveQuant= 1;bEnableFrameSkip= 0;bEnableLongTermReference= 0;iLtrMarkPeriod= 30, bIsLosslessLink=0;iComplexityMode = 0;iNumRefFrame = 1;iEntropyCodingModeFlag = 0;uiMaxNalSize = 0;iLTRRefNum = 0;iMultipleThreadIdc = 1;iLoopFilterDisableIdc = 0 (offset(alpha/beta): 0,0;iComplexityMode = 0,iMaxQp = 51;iMinQp = 0)&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Info:sSpatialLayers[0]: .iVideoWidth= 640; .iVideoHeight= 480; .fFrameRate= 25.000000f; .iSpatialBitrate= 400000; .iMaxSpatialBitrate= 400000; .sSliceArgument.uiSliceMode= 1; .sSliceArgument.iSliceNum= 0; .sSliceArgument.uiSliceSizeConstraint= 1500;uiProfileIdc = 66;uiLevelIdc = 41&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Warning:SliceArgumentValidationFixedSliceMode(), unsupported setting with Resolution and uiSliceNum combination under RC on! So uiSliceNum is changed to 6!&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Info:Setting MaxSpatialBitrate (400000) the same at SpatialBitrate (400000) will make the    actual bit rate lower than SpatialBitrate&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Warning:bEnableFrameSkip = 0,bitrate can&#x27;t be controlled for RC_QUALITY_MODE,RC_BITRATE_MODE and RC_TIMESTAMP_MODE without enabling skip frame.&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Warning:Change QP Range from(0,51) to (12,42)&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Info:WELS CPU features/capacities (0x4007fe3f) detected:   HTT:      Y, MMX:      Y, MMXEX:    Y, SSE:      Y, SSE2:     Y, SSE3:     Y, SSSE3:    Y, SSE4.1:   Y, SSE4.2:   Y, AVX:      Y, FMA:      Y, X87-FPU:  Y, 3DNOW:    N, 3DNOWEX:  N, ALTIVEC:  N, CMOV:     Y, MOVBE:    Y, AES:      Y, NUMBER OF LOGIC PROCESSORS ON CHIP: 8, CPU CACHE LINE SIZE (BYTES):        64&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Info:WelsInitEncoderExt() exit, overall memory usage: 4542878 bytes&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Info:WelsInitEncoderExt(), pCtx= 0x0x245a400.&#xA;Output #0, h264, to &#x27;udp://192.168.100.39:8080&#x27;:&#xA;Stream #0:0, 0, 1/25: Video: h264 (libopenh264), 1 reference frame, yuv420p, 640x480 (0x0), 0/1, q=2-31, 400 kb/s, 25 tbn&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Debug:RcUpdateIntraComplexity iFrameDqBits = 385808,iQStep= 2016,iIntraCmplx = 777788928&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Debug:[Rc]Layer 0: Frame timestamp = 0, Frame type = 2, encoding_qp = 30, average qp = 30, max qp = 33, min qp = 27, index = 0, iTid = 0, used = 385808, bitsperframe = 16000, target = 64000, remainingbits = -257808, skipbuffersize = 200000&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Debug:WelsEncoderEncodeExt() OutputInfo iLayerNum = 2,iFrameSize = 48252&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Debug:WelsEncoderEncodeExt() OutputInfo iLayerId = 0,iNalType = 0,iNalCount = 2, first Nal Length=18,uiSpatialId = 0,uiTemporalId = 0,iSubSeqId = 0&#xA;[libopenh264 @ 0x244aa00] [OpenH264] this = 0x0x244b4f0, Debug:WelsEncoderEncodeExt() OutputInfo iLayerId = 1,iNalType = 1,iNalCount = 6, first Nal Length=6057,uiSpatialId = 0,uiTemporalId = 0,iSubSeqId = 0&#xA;[libopenh264 @ 0x244aa00] 6 slices&#xA;./scriptBuild.sh: line 20: 10625 Segmentation fault      (core dumped) ./display&#xA;

    &#xA;&#xA;

    As you can see, FFmpeg uses libopenh264 and configures it correctly. However, no matter what. It always returns the same Segmentation fault error...

    &#xA;&#xA;

    I've used commands like this.

    &#xA;&#xA;

    ffmpeg -s 640x480 -f video4linux2 -i /dev/video0 -r 30 -vcodec libopenh264 -an -f h264 udp://127.0.0.1:8080&#xA;

    &#xA;&#xA;

    And it works perfectly, but I need to process the frames before sending them. Thats why I'm trying to use the libs.

    &#xA;&#xA;

    My FFmpeg version is.

    &#xA;&#xA;

    ffmpeg version 3.3.6 Copyright (c) 2000-2017 the FFmpeg developers&#xA;built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)&#xA;configuration: --disable-yasm --enable-shared --enable-libopenh264 --cc=&#x27;gcc -fPIC&#x27;&#xA;libavutil      55. 58.100 / 55. 58.100&#xA;libavcodec     57. 89.100 / 57. 89.100&#xA;libavformat    57. 71.100 / 57. 71.100&#xA;libavdevice    57.  6.100 / 57.  6.100&#xA;libavfilter     6. 82.100 /  6. 82.100&#xA;libswscale      4.  6.100 /  4.  6.100&#xA;libswresample   2.  7.100 /  2.  7.100&#xA;

    &#xA;&#xA;

    I tried to get more information of the error using gbd, but it didn't give me debugging info.

    &#xA;&#xA;

    How can I solve this problem ? I don't know what else can I try...

    &#xA;&#xA;

    Thank you !

    &#xA;

  • Why does ffmpeg report different durations ?

    18 mai 2012, par kenitech

    Source videos : http://www.artworknotavailable.com/tmp/ffmpegtest

    Quicktime Pro 7.7.1 Inspector (Win 7) reports the following for the file 2398.mov

    4.19MB
    H.264
    Movie FPS : 23.98
    Data Rate : 2.35 mbits/Sec
    Duration 14:97

    ffmpeg reports the following (see full ffmpeg version info at bottom of post)

    ffmpeg -i 2398.mov

    Seems stream 1 codec frame rate differs from container frame rate : 47952.00 (47952/1) -> >23.98 (2997/125)
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2398.mov' :
    Metadata :
    major_brand : qt

    minor_version : 537199360
    compatible_brands : qt
    Duration : 00:00:15.97, start : 0.-963005, bitrate : 2210 kb/s
    Stream #0.0(eng) : Audio : aac, 48000 Hz, stereo, s16, 152 kb/s
    Stream #0.1(eng) : Video : h264, yuv420p, 848x480, 2060 kb/s, 23.98 fps, 23.98 tbr, 23976 tbn, 47952 tbc

    One second longer than what Quicktime reports.

    As an experiment I exported this file from Quicktime Pro using the following settings :

    Frame Rate : Current
    Key Frames : Every 24 frames
    Frame Reordering On
    Quality : High
    Encoding Best
    Data Rate : Automatic
    Optimized for Download
    Output file : qtime-export-2398.mov

    Quicktime Inspector reports :

    5.62 MB
    H.264
    Movie FPS : 23.98
    Data Rate : 3.15 mbits/Sec
    Duration 14:97

    ffmpeg now reports :

    ffmpeg -i qtime-export-2398.mov

    Seems stream 1 codec frame rate differs from container frame rate : 1200.00 (1200/1) -> 23.98 (24000/1001)
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'qtime-export-2398.mov' :
    Metadata :
    major_brand : qt
    minor_version : 537199360
    compatible_brands : qt
    Duration : 00:00:14.96, start : 0.000000, bitrate : 3153 kb/s
    Stream #0.0(eng) : Audio : pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
    Stream #0.1(eng) : Video : h264, yuv420p, 678x384, 1738 kb/s, 23.98 fps, 23.98 tbr, 600 tbn, 1200 tbc

    ffmpeg's report on duration went from 15.97 to 14.96 (I can live with .1)

    Is this duration calculated from the bitrate ?

    I need to accurately report the duration of uploaded videos as well as convert them to FLV. Can somebody tell me what is going on here and how I might get around this ?

    ffmpeg info below. I've tried this on 2 completely different installs/versions of ffmpeg. Same result.

    FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers
    built on Jan 29 2012 23:55:02 with gcc 4.1.2 20080704 (Red Hat 4.1.2-51)
    configuration : —prefix=/usr —libdir=/usr/lib64 —shlibdir=/usr/lib64 —mandir=/usr/share/man —incdir=/usr/include —disable-avisynth —extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector —param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' —enable-avfilter —enable-avfilter-lavf —enable-libdirac —enable-libfaac —enable-libfaad —enable-libfaadbin —enable-libgsm —enable-libmp3lame —enable-libopencore-amrnb —enable-libopencore-amrwb —enable-libx264 —enable-gpl —enable-nonfree —enable-postproc —enable-pthreads —enable-shared —enable-swscale —enable-vdpau —enable-version3 —enable-x11grab
    libavutil 50.15. 1 / 50.15. 1
    libavcodec 52.72. 2 / 52.72. 2
    libavformat 52.64. 2 / 52.64. 2
    libavdevice 52. 2. 0 / 52. 2. 0
    libavfilter 1.19. 0 / 1.19. 0
    libswscale 0.11. 0 / 0.11. 0
    libpostproc 51. 2. 0 / 51. 2. 0
    FFmpeg 0.6.5
    libavutil 50.15. 1 / 50.15. 1
    libavcodec 52.72. 2 / 52.72. 2
    libavformat 52.64. 2 / 52.64. 2
    libavdevice 52. 2. 0 / 52. 2. 0
    libavfilter 1.19. 0 / 1.19. 0
    libswscale 0.11. 0 / 0.11. 0
    libpostproc 51. 2. 0 / 51. 2. 0