Recherche avancée

Médias (1)

Mot : - Tags -/musée

Autres articles (81)

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

Sur d’autres sites (3542)

  • FFMPEG Without Headers is Causing Video To Be Height 0X0

    21 novembre 2022, par Devin Dixon

    I am grabbing a stream from X11 and streaming it to other sources like Node Media Server and Twitch. Except, I get audio only with no video and the resolution size says 0X0.

    


    My ffmpeg is command is this :

    


     /usr/bin/ffmpeg -hide_banner -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -video_size 1920x1080 -y -v info -f x11grab -draw_mouse 0 -r 60 -s 1920x1080 -thread_queue_size 14000 -i :0.0+0,0 -f alsa -thread_queue_size 14000 -i plug:bsnoop -acodec aac -strict -2 -ar 44100 -b:a 128k -af aresample=async=1 -c:v h264_vaapi -vf format=nv12,hwupload,scale_vaapi=w=1920:h=1080 -attempt_recovery 1 -max_recovery_attempts 2 -drop_pkts_on_overflow 1 -video_size 1920x1080 -crf 19 -preset medium -maxrate 14000k -bufsize 14000k -r 60 -crf 25 -g 120 -tune zerolatency -f flv rtmp://[some_other_source]


    


    The ffmpeg output is as follows :

    


    2022-11-21 13:42:45.527 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (rtmp://[some_other_sorce]) 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.
2022-11-21 13:42:45.527 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption tune (The metric that the encoder tunes for. Automatically chosen by the encoder by default) specified for output file #0 (rtmp://[some_other_source]) 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.
2022-11-21 13:42:45.527 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption preset (Encoding preset) specified for output file #0 (rtmp://relay.bingewave.com/live/e3057272-271d-40d5-90d1-f9065c5dfa37-broadcast?sign=1669642928-17aa73baeaedaad786140b5b2cca9d2b) 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.
2022-11-21 13:42:45.527 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption preset (Encoding preset) specified for output file #1 (rtmp://127.0.0.1:1935/live/e3057272-271d-40d5-90d1-f9065c5dfa37-broadcast?sign=1669642928-17aa73baeaedaad786140b5b2cca9d2b) 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.
2022-11-21 13:42:45.527 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption tune (The metric that the encoder tunes for. Automatically chosen by the encoder by default) specified for output file #1 (rtmp://127.0.0.1:1935/live/['for_reording']) 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.
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption crf (Select the quality for constant quality mode) specified for output file #1 (rtmp://127.0.0.1:1935/live/e3057272-271d-40d5-90d1-f9065c5dfa37-broadcast?sign=1669642928-17aa73baeaedaad786140b5b2cca9d2b) 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.
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Stream mapping:
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_vaapi))
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #0:0 -> #1:0 (rawvideo (native) -> h264 (h264_vaapi))
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #1:0 -> #1:1 (pcm_s16le (native) -> mp3 (libmp3lame))
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Press [q] to stop, [?] for help
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df06980] No quality level set; using default (20).
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df06980] Buffering settings are ignored in CQP RC mode.
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df06980] Driver does not support some wanted packed headers (wanted 0xd, found 0).
2022-11-21 13:42:45.550 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df06980] Driver does not support packed sequence headers, but a global header is requested.
2022-11-21 13:42:45.583 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df06980] No global header will be written: this may result in a stream which is not usable for some purposes (e.g. not muxable to some containers).
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df0a700] Driver does not support some wanted packed headers (wanted 0xd, found 0).
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df0a700] Driver does not support packed sequence headers, but a global header is requested.
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [h264_vaapi @ 0x55a02df0a700] No global header will be written: this may result in a stream which is not usable for some purposes (e.g. not muxable to some containers).
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Output #0, flv, to 'rtmp://relay.bingewave.com/live/[some_other_source]':
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Metadata:
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:     encoder         : Lavf59.27.100
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #0:0: Video: h264 (High) ([7][0][0][0] / 0x0007), vaapi(tv, progressive), 1920x1080, q=2-31, 60 fps, 1k tbn
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:     Metadata:
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:       encoder         : Lavc59.37.100 h264_vaapi
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 128 kb/s
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:     Metadata:
2022-11-21 13:42:45.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:       encoder         : Lavc59.37.100 aac
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Output #1, flv, to 'rtmp://127.0.0.1:1935/live/e3057272-271d-40d5-90d1-f9065c5dfa37-broadcast?sign=1669642928-17aa73baeaedaad786140b5b2cca9d2b':
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Metadata:
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:     encoder         : Lavf59.27.100
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #1:0: Video: h264 (High) ([7][0][0][0] / 0x0007), vaapi(tv, progressive), 1920x1080, q=2-31, 15000 kb/s, 60 fps, 1k tbn
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:     Metadata:
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:       encoder         : Lavc59.37.100 h264_vaapi
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #1:1: Audio: mp3 ([2][0][0][0] / 0x0002), 48000 Hz, stereo, s16p
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:     Metadata:
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:       encoder         : Lavc59.37.100 libmp3lame
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: frame=    1 fps=0.0 q=-0.0 q=-0.0 size=       7kB time=00:00:00.06 bitrate= 875.5kbits/s speed=1.31x    
2022-11-21 13:42:46.584 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: frame=   31 fps=0.0 q=-0.0 q=-0.0 size=     281kB time=00:00:00.55 bitrate=4133.2kbits/s speed=1.01x    
2022-11-21 13:42:47.325 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: frame=   60 fps= 57 q=-0.0 q=-0.0 size=     546kB time=00:00:01.18 bitrate=3774.7kbits/s speed=1.12x    
2022-11-21 13:42:47.325 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: frame=   91 fps= 58 q=-0.0 q=-0.0 size=     828kB time=00:00:01.69 bitrate=4003.3kbits/s speed=1.08x    
2022-11-21 13:42:47.325 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [flv @ 0x55a02df10e00] Failed to update header with correct duration.
2022-11-21 13:42:47.325 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [flv @ 0x55a02df10e00] Failed to update header with correct filesize.
2022-11-21 13:42:47.325 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [flv @ 0x55a02df15500] Failed to update header with correct duration.
2022-11-21 13:42:47.325 INFO: [658] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [flv @ 0x55a02df15500] Failed to update header with correct filesize.


    


    I've noticed there are several errors the headers going out. For VAAPI, how do I set resolution header ?

    


  • FFMPEG No such filter : 'format=nv12|vaapi,hwupload'

    14 novembre 2022, par Devin Dixon

    I'm on a AWS g4ad instance and I am trying to get hardware accelleration with the GPU to work. with ffmpeg. A base line test is this :

    


     ffmpeg -y -vaapi_device /dev/dri/renderD128 -v info -thread_queue_size 10000  -i video.mp4 -c:v h264_vaapi -vf 'format=nv12|vaapi,hwupload' -crf 25 -tune zerolatency -g 120  -r 60 -pix_fmt yuv420p -preset faster -maxrate 14000k -bufsize 14000k -strict -2 -ar 44100 -b:a 128k -af aresample=async=1 -acodec aac file_out.mp4


    


    The above works, GPU is installed and working correctly. In my actual use case, I am grabbing the screen from an X11Grab, which works without the GPU and normal libx264 but fails when I add try to use h264_vaapi. The command I use is below :

    


    /usr/bin/ffmpeg -vaapi_device /dev/dri/renderD128 -y -v info -f x11grab -draw_mouse 0 -r 60 -s 1920x1080 -thread_queue_size 10000 -i :0.0+0,0 -f alsa -thread_queue_size 10000 -i plug:bsnoop -acodec aac -strict -2 -ar 44100 -b:a 128k -af aresample=async=1 -c:v h264_vaapi -vf 'format=nv12|vaapi,hwupload' -preset faster -maxrate 14000k -bufsize 14000k -pix_fmt yuv420p -r 60 -crf 25 -g 120 -tune zerolatency -f flv rtmp://[to_an_rtmp source]

And my output is this:

2022-11-14 02:08:30.928 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: ffmpeg version 5.1.2-0ubuntu1~18.04.sav1.1 Copyright (c) 2000-2022 the FFmpeg developers
2022-11-14 02:08:30.928 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   built with gcc 7 (Ubuntu 7.5.0-6ubuntu2~18.04.sav0)
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   configuration: --prefix=/usr --extra-version='0ubuntu1~18.04.sav1.1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-lcms2 --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libjxl --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-sndio --enable-pocketsphinx --enable-librsvg --enable-crystalhd --enable-libmfx --enable-libsvtav1 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libavutil      57. 28.100 / 57. 28.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libavcodec     59. 37.100 / 59. 37.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libavformat    59. 27.100 / 59. 27.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libavdevice    59.  7.100 / 59.  7.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libavfilter     8. 44.100 /  8. 44.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libswscale      6.  7.100 /  6.  7.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libswresample   4.  7.100 /  4.  7.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   libpostproc    56.  6.100 / 56.  6.100
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [x11grab @ 0x56155ee70ac0] Stream #0: not enough frames to estimate rate; consider increasing probesize
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Input #0, x11grab, from ':0.0+0,0':
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Duration: N/A, start: 1668391710.975066, bitrate: 3981312 kb/s
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 3981312 kb/s, 60 fps, 1000k tbr, 1000k tbn
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Guessed Channel Layout for Input Stream #1.0 : stereo
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Input #1, alsa, from 'plug:bsnoop':
2022-11-14 02:08:31.105 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Duration: N/A, start: 1668391710.731953, bitrate: 1536 kb/s
2022-11-14 02:08:31.106 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
2022-11-14 02:08:31.106 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (rtmp://ingest.bingewave.com/live/ce98c9bb-78b0-4ee5-8a8e-af35160da695-broadcast?sign=1668996507-c340acfb5219383f660d41057a050de6) 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.
2022-11-14 02:08:31.106 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption preset (Encoding preset) specified for output file #0 (rtmp://ingest.bingewave.com/live/ce98c9bb-78b0-4ee5-8a8e-af35160da695-broadcast?sign=1668996507-c340acfb5219383f660d41057a050de6) 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.
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Codec AVOption tune (The metric that the encoder tunes for. Automatically chosen by the encoder by default) specified for output file #0 (rtmp://ingest.bingewave.com/live/ce98c9bb-78b0-4ee5-8a8e-af35160da695-broadcast?sign=1668996507-c340acfb5219383f660d41057a050de6) 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.
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Stream mapping:
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_vaapi))
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42:   Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Press [q] to stop, [?] for help
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: [AVFilterGraph @ 0x56155ee5d880] No such filter: 'format=nv12|vaapi,hwupload'
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Error reinitializing filters!
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Failed to inject frame into filter network: Invalid argument
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Error while processing the decoded data for stream #0:0
2022-11-14 02:08:31.237 INFO: [557] LoggingUtils$Companion$OutputLogger$1.invoke$lambda-0#42: Conversion failed!
root@ip-172-31-90-180:~# 


    


    I see that is failing because No such filter : 'format=nv12|vaapi,hwupload', which I don't get when I run the other command. What am I doing wrong here ?

    


  • Saving frames as JPG with FFMPEG (Visual Studio / C++)

    10 novembre 2022, par Diego Satizabal

    I am trying to save all frames from a mp4 video in separate JPG files, I have a code that runs and actually saves something to JPG files but files are not recognized as images and nothing is showing.

    


    Below my full code, I am using Visual Studio 2022 in Windows 11 and FFMPEG 5.1. The function that saves the images is save_frame_as_jpeg which is actually an adaption from the code provided here but changing the use of avcodec_encode_video2 for avcodec_send_frame/avcodec_receive_packet as indicated in the documentation.

    


    I am obiously doing something wrong but cannot quite find it, BTW, I know that a simple command (ffmpeg -i input.mp4 -vf fps=1 vid_%d.png) will do this but I am requiring to do it by code.

    


    Any help is appreciated, thanks in advance !

    


        // FfmpegTests.cpp : This file contains the &#x27;main&#x27; function. Program execution begins and ends there.&#xA;//&#xA;#pragma warning(disable : 4996)&#xA;extern "C"&#xA;{&#xA;    #include "libavformat/avformat.h"&#xA;    #include "libavcodec/avcodec.h"&#xA;    #include "libavfilter/avfilter.h"&#xA;    #include "libavutil/opt.h"&#xA;    #include "libavutil/avutil.h"&#xA;    #include "libavutil/error.h"&#xA;    #include "libavfilter/buffersrc.h"&#xA;    #include "libavfilter/buffersink.h"&#xA;    #include "libswscale/swscale.h"&#xA;}&#xA;&#xA;#pragma comment(lib, "avcodec.lib")&#xA;#pragma comment(lib, "avformat.lib")&#xA;#pragma comment(lib, "avfilter.lib")&#xA;#pragma comment(lib, "avutil.lib")&#xA;#pragma comment(lib, "swscale.lib")&#xA;&#xA;#include <cstdio>&#xA;#include <iostream>&#xA;#include <chrono>&#xA;#include <thread>&#xA;&#xA;&#xA;static AVFormatContext* fmt_ctx;&#xA;static AVCodecContext* dec_ctx;&#xA;AVFilterGraph* filter_graph;&#xA;AVFilterContext* buffersrc_ctx;&#xA;AVFilterContext* buffersink_ctx;&#xA;static int video_stream_index = -1;&#xA;&#xA;const char* filter_descr = "scale=78:24,transpose=cclock";&#xA;static int64_t last_pts = AV_NOPTS_VALUE;&#xA;&#xA;static int open_input_file(const char* filename)&#xA;{&#xA;    const AVCodec* dec;&#xA;    int ret;&#xA;&#xA;    if ((ret = avformat_open_input(&amp;fmt_ctx, filename, NULL, NULL)) &lt; 0) {&#xA;        av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");&#xA;        return ret;&#xA;    }&#xA;&#xA;    if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) &lt; 0) {&#xA;        av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");&#xA;        return ret;&#xA;    }&#xA;&#xA;    /* select the video stream */&#xA;    ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &amp;dec, 0);&#xA;    if (ret &lt; 0) {&#xA;        av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file\n");&#xA;        return ret;&#xA;    }&#xA;    video_stream_index = ret;&#xA;&#xA;    /* create decoding context */&#xA;    dec_ctx = avcodec_alloc_context3(dec);&#xA;    if (!dec_ctx)&#xA;        return AVERROR(ENOMEM);&#xA;    avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[video_stream_index]->codecpar);&#xA;&#xA;    /* init the video decoder */&#xA;    if ((ret = avcodec_open2(dec_ctx, dec, NULL)) &lt; 0) {&#xA;        av_log(NULL, AV_LOG_ERROR, "Cannot open video decoder\n");&#xA;        return ret;&#xA;    }&#xA;&#xA;    return 0;&#xA;}&#xA;&#xA;static int init_filters(const char* filters_descr)&#xA;{&#xA;    char args[512];&#xA;    int ret = 0;&#xA;    const AVFilter* buffersrc = avfilter_get_by_name("buffer");&#xA;    const AVFilter* buffersink = avfilter_get_by_name("buffersink");&#xA;    AVFilterInOut* outputs = avfilter_inout_alloc();&#xA;    AVFilterInOut* inputs = avfilter_inout_alloc();&#xA;    AVRational time_base = fmt_ctx->streams[video_stream_index]->time_base;&#xA;    enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE };&#xA;&#xA;    filter_graph = avfilter_graph_alloc();&#xA;    if (!outputs || !inputs || !filter_graph) {&#xA;        ret = AVERROR(ENOMEM);&#xA;        goto end;&#xA;    }&#xA;&#xA;    /* buffer video source: the decoded frames from the decoder will be inserted here. */&#xA;    snprintf(args, sizeof(args),&#xA;        "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",&#xA;        dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt,&#xA;        time_base.num, time_base.den,&#xA;        dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);&#xA;&#xA;    ret = avfilter_graph_create_filter(&amp;buffersrc_ctx, buffersrc, "in",&#xA;        args, NULL, filter_graph);&#xA;    if (ret &lt; 0) {&#xA;        av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");&#xA;        goto end;&#xA;    }&#xA;&#xA;    /* buffer video sink: to terminate the filter chain. */&#xA;    ret = avfilter_graph_create_filter(&amp;buffersink_ctx, buffersink, "out",&#xA;        NULL, NULL, filter_graph);&#xA;    if (ret &lt; 0) {&#xA;        av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");&#xA;        goto end;&#xA;    }&#xA;&#xA;    ret = av_opt_set_int_list(buffersink_ctx, "pix_fmts", pix_fmts, AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN);&#xA;    if (ret &lt; 0) {&#xA;        av_log(NULL, AV_LOG_ERROR, "Cannot set output pixel format\n");&#xA;        goto end;&#xA;    }&#xA;&#xA;    outputs->name = av_strdup("in");&#xA;    outputs->filter_ctx = buffersrc_ctx;&#xA;    outputs->pad_idx = 0;&#xA;    outputs->next = NULL;&#xA;&#xA;    inputs->name = av_strdup("out");&#xA;    inputs->filter_ctx = buffersink_ctx;&#xA;    inputs->pad_idx = 0;&#xA;    inputs->next = NULL;&#xA;&#xA;    if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,&#xA;        &amp;inputs, &amp;outputs, NULL)) &lt; 0)&#xA;        goto end;&#xA;&#xA;    if ((ret = avfilter_graph_config(filter_graph, NULL)) &lt; 0)&#xA;        goto end;&#xA;&#xA;end:&#xA;    avfilter_inout_free(&amp;inputs);&#xA;    avfilter_inout_free(&amp;outputs);&#xA;&#xA;    return ret;&#xA;}&#xA;&#xA;static void display_frame(const AVFrame* frame, AVRational time_base)&#xA;{&#xA;    int x, y;&#xA;    uint8_t* p0, * p;&#xA;    int64_t delay;&#xA;&#xA;    if (frame->pts != AV_NOPTS_VALUE) {&#xA;        if (last_pts != AV_NOPTS_VALUE) {&#xA;            /* sleep roughly the right amount of time;&#xA;             * usleep is in microseconds, just like AV_TIME_BASE. */&#xA;            AVRational timeBaseQ;&#xA;            timeBaseQ.num = 1;&#xA;            timeBaseQ.den = AV_TIME_BASE;&#xA;&#xA;            delay = av_rescale_q(frame->pts - last_pts, time_base, timeBaseQ);&#xA;            if (delay > 0 &amp;&amp; delay &lt; 1000000)&#xA;                std::this_thread::sleep_for(std::chrono::microseconds(delay));&#xA;        }&#xA;        last_pts = frame->pts;&#xA;    }&#xA;&#xA;    /* Trivial ASCII grayscale display. */&#xA;    p0 = frame->data[0];&#xA;    puts("\033c");&#xA;    for (y = 0; y &lt; frame->height; y&#x2B;&#x2B;) {&#xA;        p = p0;&#xA;        for (x = 0; x &lt; frame->width; x&#x2B;&#x2B;)&#xA;            putchar(" .-&#x2B;#"[*(p&#x2B;&#x2B;) / 52]);&#xA;        putchar(&#x27;\n&#x27;);&#xA;        p0 &#x2B;= frame->linesize[0];&#xA;    }&#xA;    fflush(stdout);&#xA;}&#xA;&#xA;int save_frame_as_jpeg(AVCodecContext* pCodecCtx, AVFrame* pFrame, int FrameNo) {&#xA;    int ret = 0;&#xA;&#xA;    const AVCodec* jpegCodec = avcodec_find_encoder(AV_CODEC_ID_JPEG2000);&#xA;    if (!jpegCodec) {&#xA;        return -1;&#xA;    }&#xA;    AVCodecContext* jpegContext = avcodec_alloc_context3(jpegCodec);&#xA;    if (!jpegContext) {&#xA;        return -1;&#xA;    }&#xA;&#xA;    jpegContext->pix_fmt = pCodecCtx->pix_fmt;&#xA;    jpegContext->height = pFrame->height;&#xA;    jpegContext->width = pFrame->width;&#xA;    jpegContext->time_base = AVRational{ 1,10 };&#xA;&#xA;    ret = avcodec_open2(jpegContext, jpegCodec, NULL);&#xA;    if (ret &lt; 0) {&#xA;        return ret;&#xA;    }&#xA;    FILE* JPEGFile;&#xA;    char JPEGFName[256];&#xA;&#xA;    AVPacket packet;&#xA;    packet.data = NULL;&#xA;    packet.size = 0;&#xA;    av_init_packet(&amp;packet);&#xA;&#xA;    int gotFrame;&#xA;&#xA;    ret = avcodec_send_frame(jpegContext, pFrame);&#xA;    if (ret &lt; 0) {&#xA;        return ret;&#xA;    }&#xA;&#xA;    ret = avcodec_receive_packet(jpegContext, &amp;packet);&#xA;    if (ret &lt; 0) {&#xA;        return ret;&#xA;    }&#xA;&#xA;    sprintf(JPEGFName, "c:\\folder\\dvr-%06d.jpg", FrameNo);&#xA;    JPEGFile = fopen(JPEGFName, "wb");&#xA;    fwrite(packet.data, 1, packet.size, JPEGFile);&#xA;    fclose(JPEGFile);&#xA;&#xA;    av_packet_unref(&amp;packet);&#xA;    avcodec_close(jpegContext);&#xA;    return 0;&#xA;}&#xA;&#xA;int main(int argc, char** argv)&#xA;{&#xA;    AVFrame* frame;&#xA;    AVFrame* filt_frame;&#xA;    AVPacket* packet;&#xA;    int ret;&#xA;&#xA;    if (argc != 2) {&#xA;        fprintf(stderr, "Usage: %s file\n", argv[0]);&#xA;        exit(1);&#xA;    }&#xA;&#xA;    frame = av_frame_alloc();&#xA;    filt_frame = av_frame_alloc();&#xA;    packet = av_packet_alloc();&#xA;&#xA;    if (!frame || !filt_frame || !packet) {&#xA;        fprintf(stderr, "Could not allocate frame or packet\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    if ((ret = open_input_file(argv[1])) &lt; 0)&#xA;        goto end;&#xA;    if ((ret = init_filters(filter_descr)) &lt; 0)&#xA;        goto end;&#xA;&#xA;    while (true)&#xA;    {&#xA;        if ((ret = av_read_frame(fmt_ctx, packet)) &lt; 0)&#xA;            break;&#xA;&#xA;        if (packet->stream_index == video_stream_index) {&#xA;            ret = avcodec_send_packet(dec_ctx, packet);&#xA;            if (ret &lt; 0) {&#xA;                av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");&#xA;                break;&#xA;            }&#xA;&#xA;            while (ret >= 0)&#xA;            {&#xA;                ret = avcodec_receive_frame(dec_ctx, frame);&#xA;                if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {&#xA;                    break;&#xA;                }&#xA;                else if (ret &lt; 0) {&#xA;                    av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");&#xA;                    goto end;&#xA;                }&#xA;&#xA;                frame->pts = frame->best_effort_timestamp;&#xA;&#xA;                /* push the decoded frame into the filtergraph */&#xA;                if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) &lt; 0) {&#xA;                    av_log(NULL, AV_LOG_ERROR, "Error while feeding the filtergraph\n");&#xA;                    break;&#xA;                }&#xA;&#xA;                /* pull filtered frames from the filtergraph */&#xA;                while (1) {&#xA;                    ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);&#xA;                    if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)&#xA;                        break;&#xA;                    if (ret &lt; 0)&#xA;                        goto end;&#xA;                    display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);&#xA;                    av_frame_unref(filt_frame);&#xA;                    &#xA;                    ret = save_frame_as_jpeg(dec_ctx, frame, dec_ctx->frame_number);&#xA;                    if (ret &lt; 0)&#xA;                        goto end;&#xA;                }&#xA;                av_frame_unref(frame);&#xA;            }&#xA;        }&#xA;        av_packet_unref(packet);&#xA;    }&#xA;&#xA;end:&#xA;    avfilter_graph_free(&amp;filter_graph);&#xA;    avcodec_free_context(&amp;dec_ctx);&#xA;    avformat_close_input(&amp;fmt_ctx);&#xA;    av_frame_free(&amp;frame);&#xA;    av_frame_free(&amp;filt_frame);&#xA;    av_packet_free(&amp;packet);&#xA;&#xA;    if (ret &lt; 0 &amp;&amp; ret != AVERROR_EOF) {&#xA;        char errBuf[AV_ERROR_MAX_STRING_SIZE]{0};&#xA;        int res = av_strerror(ret, errBuf, AV_ERROR_MAX_STRING_SIZE);&#xA;        fprintf(stderr, "Error:  %s\n", errBuf);&#xA;        exit(1);&#xA;    }&#xA;&#xA;    exit(0);&#xA;}&#xA;</thread></chrono></iostream></cstdio>

    &#xA;