Ffmpeg looking for calculation of wrong byte range?

I am having a problem trying to extract thumbnails from a movie file with a specific timestamp. As a rule, I had no problems with this, but I came across a set of movie files that get an error in the requested range of bytes (416 Requested Range Not Satisfiable).

It is strange that the server correctly returns the length of the content in the partial content request, but when it requests a movie file, it requests a length that exceeds this.

It's a little over my head, so I'm not sure what can happen here. Any insight would be great.

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 

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 

Content 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 

Whole magazine:

 # /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 

Result of FFprobe:

 # /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] 
+5
source share
1 answer

I watched the same BUG, โ€‹โ€‹and digging into the ffmpeg source code confirmed this. The problem is that instead of using Content-Length as the file size, ffmpeg incorrectly uses the last value inside the Content-Range.

A workaround exists with potential performance impacts - it's just adding -seekable 0

0
source

Source: https://habr.com/ru/post/1238449/


All Articles