Recherche avancée

Médias (91)

Autres articles (19)

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

  • Les vidéos

    21 avril 2011, par

    Comme les documents de type "audio", Mediaspip affiche dans la mesure du possible les vidéos grâce à la balise html5 .
    Un des inconvénients de cette balise est qu’elle n’est pas reconnue correctement par certains navigateurs (Internet Explorer pour ne pas le nommer) et que chaque navigateur ne gère en natif que certains formats de vidéos.
    Son avantage principal quant à lui est de bénéficier de la prise en charge native de vidéos dans les navigateur et donc de se passer de l’utilisation de Flash et (...)

  • Submit bugs and patches

    13 avril 2011

    Unfortunately a software is never perfect.
    If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
    If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
    You may also (...)

Sur d’autres sites (1800)

  • FFmpeg Successfully Pushes Stream to Nginx RTMP but Unable to Play with ffplay or VLC [closed]

    2 août 2024, par ShaoKun Lou

    FFmpeg Successfully Pushes Stream to Nginx RTMP but Unable to Play with ffplay or VLC

    


    I followed the tutorial below :tutorial

    


    to set up an RTMP server using Nginx, and successfully pushed a stream with FFmpeg.
Here is the nginx.conf file :

    


    rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                deny publish all;

                application live {
                        live on;
                        record off;
                        allow play all;
                }
        }
}


    


    and here is the console output from pushing the stream :

    


    ffmpeg -re -i bejeweled.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/stream
ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
  configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bejeweled.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.29.100
    description     : Bilibili VXCode Swarm Transcoder v0.7.43
  Duration: 00:03:18.39, start: 0.000000, bitrate: 424 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 352 kb/s, 23.98 fps, 23.98 tbr, 16k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 65 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0x58b1ca9cee80] using SAR=1/1
[libx264 @ 0x58b1ca9cee80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x58b1ca9cee80] profile High, level 3.0, 4:2:0, 8-bit
[libx264 @ 0x58b1ca9cee80] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - 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=11 lookahead_threads=1 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=23 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, flv, to 'rtmp://127.0.0.1/live/stream':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    description     : Bilibili VXCode Swarm Transcoder v0.7.43
    encoder         : Lavf60.16.100
  Stream #0:0(und): Video: h264 ([7][0][0][0] / 0x0007), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 1k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
  Stream #0:1(und): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 aac
frame=    0 fps=0.0 q=0.0 size=       1kB time=00:00:00.60 bitrate=   7.2kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:01.11 bitrate=   3.9kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:01.62 bitrate=   2.7kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:02.13 bitrate=   2.0kbits/sframe=    0 fps=0.0 q=0.0 size=       1kB time=00:00:02.62 bitrate=   1.7kbits/sframe=    6 fps=2.2 q=28.0 size=       6kB time=00:00:03.15 bitrate=  16.2kbits/...


    


    But when I try to play the stream using ffplay or VLC, it gets stuck in a waiting state.
this is the console output :

    


    leo@leo-devp:~$ ffplay rtmp://127.0.0.1/live/stream
ffplay version 6.1.1-3ubuntu5 Copyright (c) 2003-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
  configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
^Cleo@leo-devp:~$ 0 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0 


    


    and this is /var/log/nginx/access.log :

    


    127.0.0.1 [02/Aug/2024:14:56:38 +0800] PUBLISH "live" "stream" "" - 415 529 "" "FMLE/3.0 (compatible; Lavf60.16" (0s)
127.0.0.1 [02/Aug/2024:14:59:59 +0800] PUBLISH "live" "stream" "" - 10501019 529 "" "FMLE/3.0 (compatible; Lavf60.16" (3m 18s)
127.0.0.1 [02/Aug/2024:15:01:21 +0800] PLAY "live" "stream" "" - 401 490 "" "LNX 9,0,124,2" (4m 35s)
127.0.0.1 [02/Aug/2024:15:09:49 +0800] PUBLISH "live" "stream" "" - 2733579 529 "" "FMLE/3.0 (compatible; Lavf60.16" (52s)
127.0.0.1 [02/Aug/2024:15:10:15 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (54s)
127.0.0.1 [02/Aug/2024:15:11:52 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (17s)
127.0.0.1 [02/Aug/2024:15:13:24 +0800] PLAY "live" "stream" "" - 393 472 "" "LNX 9,0,124,2" (3m 5s)
127.0.0.1 [02/Aug/2024:15:13:24 +0800] PUBLISH "live" "stream" "" - 23343914 529 "" "FMLE/3.0 (compatible; Lavf60.16" (3m 18s)
127.0.0.1 [02/Aug/2024:15:13:39 +0800] PLAY "live" "stream" "" - 372 436 "" "LNX 9,0,124,2" (10s)
127.0.0.1 [02/Aug/2024:15:15:48 +0800] PLAY "live" "stream" "" - 393 472 "" "LNX 9,0,124,2" (3m 34s)


    


    There are no relevant log records in /var/log/nginx/error.log

    


    the firwall status :

    


    leo@leo-devp:~$ sudo ufw status


    


    [sudo] leo 的密码:
状态: 激活

    


    至 动作 来自

    



    


    3306/tcp ALLOW Anywhere
    
1935/tcp ALLOW Anywhere
    
19355/tcp ALLOW Anywhere
    
19355 ALLOW Anywhere
    
1935 ALLOW Anywhere
    
3306/tcp (v6) ALLOW Anywhere (v6)
    
1935/tcp (v6) ALLOW Anywhere (v6)
    
19355/tcp (v6) ALLOW Anywhere (v6)
    
19355 (v6) ALLOW Anywhere (v6)
    
1935 (v6) ALLOW Anywhere (v6)

    


    Please point out what I did wrong and how to correct it. Thank you.

    


  • ffmpeg error Error sending frames to consumers : No space left on device [closed]

    4 août 2024, par Bernard Vatonen Bern

    I do use a short funtion , to convert videos in a needed format ,, I used this function all the time , worked no problems ,
Lately I mado some chnages , and now geting an critical error : like : "no space left on device"
" \[af#0:1 @ 0x600001ad9cb0\] Error sending frames to consumers: No space left on device \[af#0:1 @ 0x600001ad9cb0\] Task finished with error code: -28 (No space left on device) \[af#0:1 @ 0x600001ad9cb0\] Terminating thread with return code -28 (No space left on device)"

    


    I do have this function saved in my file : .zshrc

    


    


    function indianull() 
ffmpeg -i movies/$1.* -i /Documents/indianul3.png -filter_complex "[1][0]scale2ref=w=ohmdar:h=ih0.1[logo][video] ;[video][logo]overlay=x=main_w-overlay_w-(main_w0.04):y=main_h0.14,subtitles=subs/$1.srt:force_style='FontSize=22,WrapStyle=0,MarginV=35" -preset fast -s 720x480 -vcodec libx264 -shortest output/$1-sub.mp4

    


    


    


    \`indianull tt0066763


    


    ffmpeg version 7.0.1 Copyright (c) 2000-2024 the FFmpeg developers
built with Apple clang version 15.0.0 (clang-1500.3.9.4)
configuration : —prefix=/opt/homebrew/Cellar/ffmpeg/7.0.1 —enable-shared —enable-pthreads —enable-version3 —cc=clang —host-cflags= —host-ldflags='-Wl,-ld_classic' —enable-ffplay —enable-gnutls —enable-gpl —enable-libaom —enable-libaribb24 —enable-libbluray —enable-libdav1d —enable-libharfbuzz —enable-libjxl —enable-libmp3lame —enable-libopus —enable-librav1e —enable-librist —enable-librubberband —enable-libsnappy —enable-libsrt —enable-libssh —enable-libsvtav1 —enable-libtesseract —enable-libtheora —enable-libvidstab —enable-libvmaf —enable-libvorbis —enable-libvpx —enable-libwebp —enable-libx264 —enable-libx265 —enable-libxml2 —enable-libxvid —enable-lzma —enable-libfontconfig —enable-libfreetype —enable-frei0r —enable-libass —enable-libopencore-amrnb —enable-libopencore-amrwb —enable-libopenjpeg —enable-libspeex —enable-libsoxr —enable-libzmq —enable-libzimg —disable-libjack —disable-indev=jack —enable-videotoolbox —enable-audiotoolbox —enable-neon
libavutil 59. 8.100 / 59. 8.100
libavcodec 61. 3.100 / 61. 3.100
libavformat 61. 1.100 / 61. 1.100
libavdevice 61. 1.100 / 61. 1.100
libavfilter 10. 1.100 / 10. 1.100
libswscale 8. 1.100 / 8. 1.100
libswresample 5. 1.100 / 5. 1.100
libpostproc 58. 1.100 / 58. 1.100

    


    \[Parsed_subtitles_2 @ 0x600001fd8bb0\] libass API version: 0x1703000
\[Parsed_subtitles_2 @ 0x600001fd8bb0\] libass source: tarball: 0.17.3
\[Parsed_subtitles_2 @ 0x600001fd8bb0\] Shaper: FriBidi 1.0.15 (SIMPLE) HarfBuzz-ng 9.0.0 (COMPLEX)
\[Parsed_subtitles_2 @ 0x600001fd8bb0\] Using font provider coretext`


    


    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'movies/tt0066763.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
title           : Anand.1971.720p.BluRay.x264-x0r
encoder         : Lavf57.83.100
Duration: 02:02:08.08, start: 0.000000, bitrate: 1212 kb/s
Chapters:
Chapter #0:0: start 0.000000, end 209.375000
Stream #0:0\[0x1\](hin): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 \[SAR 1:1 DAR 16:9\], 1079 kb/s, 24 fps, 24 tbr, 12288 tbn (default)
Metadata:
handler_name    : VideoHandler
vendor_id       : \[0\]\[0\]\[0\]\[0\]
Stream #0:1\[0x2\](hin): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name    : SoundHandler
vendor_id       : \[0\]\[0\]\[0\]\[0\]
Stream #0:2\[0x3\](eng): Data: bin_data (text / 0x74786574)
Metadata:
handler_name    : SubtitleHandler
Input #1, png_pipe, from '/Users/bv2004/Documents/indianul3.png':
Duration: N/A, bitrate: N/A
Stream #1:0: Video: png, rgba(pc, gbr/unknown/unknown), 630x124, 25 fps, 25 tbr, 25 tbn
File 'output/tt0066763-sub.mp4' already exists. Overwrite? \[y/N\] y
Stream mapping:
Stream #0:0 (h264) -\> scale2ref (graph 0)
Stream #1:0 (png) -\> scale2ref (graph 0)
subtitles:default (graph 0) -\> Stream #0:0 (libx264)
Stream #0:1 -\> #0:1 (aac (native) -\> aac (native))
Press \[q\] to stop, \[?\] for help
\[Parsed_subtitles_2 @ 0x600001fcc420\] libass API version: 0x1703000
\[Parsed_subtitles_2 @ 0x600001fcc420\] libass source: tarball: 0.17.3
\[Parsed_subtitles_2 @ 0x600001fcc420\] Shaper: FriBidi 1.0.15 (SIMPLE) HarfBuzz-ng 9.0.0 (COMPLEX)
\[Parsed_subtitles_2 @ 0x600001fcc420\] Using font provider coretext
\[vost#0:0/libx264 @ 0x128e07bb0\] No filtered frames for output stream, trying to initialize anyway.
\[libx264 @ 0x128e084e0\] using SAR=32/27
\[libx264 @ 0x128e084e0\] using cpu capabilities: ARMv8 NEON
\[libx264 @ 0x128e084e0\] profile High, level 3.0, 4:2:0, 8-bit
\[libx264 @ 0x128e084e0\] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=2 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=6 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=15 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=1 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc_lookahead=30 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 'output/tt0066763-sub.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
title           : Anand.1971.720p.BluRay.x264-x0r
encoder         : Lavf61.1.100

        encoder         : Lavc61.3.100 aac


    


    \[af#0:1 @ 0x600001ad9cb0\] Error sending frames to consumers: No space left on device
\[af#0:1 @ 0x600001ad9cb0\] Task finished with error code: -28 (No space left on device)
\[af#0:1 @ 0x600001ad9cb0\] Terminating thread with return code -28 (No space left on device)
\[out#0/mp4 @ 0x600001dd8540\] video:0KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
\[out#0/mp4 @ 0x600001dd8540\] Output file is empty, nothing was encoded(check -ss / -t / -frames parameters if used)
frame=    0 fps=0.0 q=0.0 Lsize=       2KiB time=N/A bitrate=N/A speed=N/A
\[aac @ 0x128e09070\] Qavg: nan
Conversion failed!`


    


    df -h
Filesystem        Size    Used   Avail Capacity iused ifree %iused  Mounted on
/dev/disk3s3s1   926Gi   9.6Gi   539Gi     2%    404k  4.3G    0%   /
devfs            200Ki   200Ki     0Bi   100%     693     0  100%   /dev
/dev/disk3s6     926Gi   1.0Gi   539Gi     1%       1  5.7G    0%   /System/Volumes/VM
/dev/disk3s4     926Gi   5.7Gi   539Gi     2%    1.1k  5.7G    0%   /System/Volumes/Preboot
/dev/disk3s2     926Gi    89Mi   539Gi     1%      53  5.7G    0%   /System/Volumes/Update
/dev/disk1s2     500Mi   6.0Mi   479Mi     2%       1  4.9M    0%   /System/Volumes/xarts
/dev/disk1s1     500Mi   6.1Mi   479Mi     2%      31  4.9M    0%   /System/Volumes/iSCPreboot
/dev/disk1s3     500Mi   3.9Mi   479Mi     1%      57  4.9M    0%   /System/Volumes/Hardware
/dev/disk3s1     926Gi   370Gi   539Gi    41%    778k  5.7G    0%   /System/Volumes/Data
map auto_home      0Bi     0Bi     0Bi   100%       0     0     -   /System/Volumes/Data/home\`


    


    I run the funtion indianull and expected it to convert a video , in my desired format + add logo + add subtitles ! Takes the original Video from on folder , Subtitles from another folder , and converts the video , and saves it in another folder ..

    


    the issue i see only is :
"\[af#0:1 @ 0x600001ad9cb0\] Error sending frames to consumers: No space left on device \[af#0:1 @ 0x600001ad9cb0\] Task finished with error code: -28 (No space left on device) \[af#0:1 @ 0x600001ad9cb0\] Terminating thread with return code -28 (No space left on device) \[out#0/mp4 @ 0x600001dd8540\] video:0KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown"

    


    I do defenitly have over 400GB free on My SSD !
Is an an speciffic folder that is full ? and can not hold any files ?

    


    Any idea how to solve this ? or any suggestion how to try to solve ?

    


  • How to extract the first frame from a video ?

    10 août 2024, par Andrew

    I am trying to extract the first frame from a video to save it as a preview.

    


    Here's an almost working solution using ffmpeg :

    


    func extractFirstFrame(videoBytes []byte) ([]byte, error) {
    input := bytes.NewReader(videoBytes)

    var output bytes.Buffer

    err := ffmpeg.Input("pipe:0").
        Filter("select", ffmpeg.Args{"gte(n,1)"}).
        Output(
            "pipe:1",
            ffmpeg.KwArgs{
                "vframes": 1,
                "format":  "image2",
                "vcodec":  "mjpeg",
            }).
        WithInput(input).
        WithOutput(&output).
        Run()

    if err != nil {
        return nil, fmt.Errorf("error extracting frame: %v", err)
    }

    return output.Bytes(), nil
}


    


    The problem with this is that it can only process horizontal videos. For some reason it will throw a 0xbebbb1b7 error for a vertical videos. I don't understand why is that, probably because this is my very first time with ffmpeg.

    


    Also, I am concerned if this solution is optimal. My assumption is that the whole video will be loaded into the memory first, which is kinda bad and I would like to avoid that

    


    I use https://github.com/u2takey/ffmpeg-go, but errors are the same even if I run it using exec :

    


        cmd := exec.Command(
        "ffmpeg",
        "-i", "pipe:0",
        "-vf", "select=eq(n\\,0)",
        "-q:v", "3",
        "-f", "image2",
        "pipe:1",
    )


    


    Interestingly enough, I noticed that running command in the terminal will work as expected with any type of video ffmpeg -i .\video_2024-08-10_00-03-00.mp4 -vf "select=eq(n\,0)"  -q:v 3 output_image.jpg, so the problem may be on how I send those videos to my server. I useFiber and send videos as multipart/form-data and then read it like this :

    


        form_data, err := c.FormFile("image")
    file, err := form_data.Open()
    bytes, err := io.ReadAll(file)
    ....
    preview, err := extractFirstFrame(bytes)



    


    I also managed to find logs for the failed attempt :

    


    
ffmpeg version 7.0.2-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 000002a562ff0e80] stream 0, offset 0x30: partial file
[mov,mp4,m4a,3gp,3g2,mj2 @ 000002a562ff0e80] Could not find codec parameters for stream 1 (Video: h264 (avc1 / 0x31637661), none, 720x1280, 3093 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'pipe:0':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2024-08-09T20:00:29.000000Z
  Duration: 00:00:06.80, start: 0.000000, bitrate: N/A
  Stream #0:0[0x1](eng): Audio: aac (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 74 kb/s (default)
      Metadata:
        creation_time   : 2024-08-09T20:00:23.000000Z
        handler_name    : SoundHandle
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](eng): Video: h264 (avc1 / 0x31637661), none, 720x1280, 3093 kb/s, 30 fps, 30 tbr, 90k tbn (default)
      Metadata:
        creation_time   : 2024-08-09T20:00:23.000000Z
        handler_name    : VideoHandle
        vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> mjpeg (native))
[mov,mp4,m4a,3gp,3g2,mj2 @ 000002a562ff0e80] stream 1, offset 0x5d: partial file
[in#0/mov,mp4,m4a,3gp,3g2,mj2 @ 000002a562fda2c0] Error during demuxing: Invalid data found when processing input
Cannot determine format of input 0:1 after EOF
[vf#0:0 @ 000002a5636c0ec0] Task finished with error code: -1094995529 (Invalid data found when processing input)
[vf#0:0 @ 000002a5636c0ec0] Terminating thread with return code -1094995529 (Invalid data found when processing input)
[vost#0:0/mjpeg @ 000002a5636c0400] Could not open encoder before EOF
[vost#0:0/mjpeg @ 000002a5636c0400] Task finished with error code: -22 (Invalid argument)
[vost#0:0/mjpeg @ 000002a5636c0400] Terminating thread with return code -22 (Invalid argument)
[out#0/image2 @ 000002a562ff5640] Nothing was written into output file, because at least one of its streams received no packets.
frame=    0 fps=0.0 q=0.0 Lsize=       0KiB time=N/A bitrate=N/A speed=N/A
Conversion failed!


    


    Logs for the same video, but ran via terminal :

    


    ffmpeg version 7.0.2-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\video_2024-08-10_00-03-00.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2024-08-09T20:00:29.000000Z
  Duration: 00:00:06.80, start: 0.000000, bitrate: 3175 kb/s
  Stream #0:0[0x1](eng): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 74 kb/s (default)
      Metadata:
        creation_time   : 2024-08-09T20:00:23.000000Z
        handler_name    : SoundHandle
        vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 720x1280, 3093 kb/s, 30 fps, 30 tbr, 90k tbn (default)
      Metadata:
        creation_time   : 2024-08-09T20:00:23.000000Z
        handler_name    : VideoHandle
        vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 00000219eb4d0c00] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'output_image.jpg':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf61.1.100
  Stream #0:0(eng): Video: mjpeg, yuvj420p(pc, unknown/bt709/bt709, progressive), 720x1280, q=2-31, 200 kb/s, 30 fps, 30 tbn (default)
      Metadata:
        creation_time   : 2024-08-09T20:00:23.000000Z
        handler_name    : VideoHandle
        vendor_id       : [0][0][0][0]
        encoder         : Lavc61.3.100 mjpeg
      Side data:
        cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[image2 @ 00000219e7aa51c0] The specified filename 'output_image.jpg' does not contain an image sequence pattern or a pattern is invalid.
[image2 @ 00000219e7aa51c0] Use a pattern such as %03d for an image sequence or use the -update option (with -frames:v 1 if needed) to write a single image.
[out#0/image2 @ 00000219e7b5e400] video:49KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame=    1 fps=0.0 q=3.0 Lsize=N/A time=00:00:00.03 bitrate=N/A speed=0.322x


    


    I also realized that the problem was not related to the video orientation, but to to the video from a specific source uploaded specifically on my server 🤡 Such a weird coincidence that I decided to test my video upload with those files, but anyway. And those are.... Downloaded instagram reels lol. But again, ffmpeg works just fine when ran in terminal