Recherche avancée

Médias (91)

Autres articles (60)

  • Modifier la date de publication

    21 juin 2013, par

    Comment changer la date de publication d’un média ?
    Il faut au préalable rajouter un champ "Date de publication" dans le masque de formulaire adéquat :
    Administrer > Configuration des masques de formulaires > Sélectionner "Un média"
    Dans la rubrique "Champs à ajouter, cocher "Date de publication "
    Cliquer en bas de la page sur Enregistrer

  • Les statuts des instances de mutualisation

    13 mars 2010, par

    Pour des raisons de compatibilité générale du plugin de gestion de mutualisations avec les fonctions originales de SPIP, les statuts des instances sont les mêmes que pour tout autre objets (articles...), seuls leurs noms dans l’interface change quelque peu.
    Les différents statuts possibles sont : prepa (demandé) qui correspond à une instance demandée par un utilisateur. Si le site a déjà été créé par le passé, il est passé en mode désactivé. publie (validé) qui correspond à une instance validée par un (...)

  • Soumettre améliorations et plugins supplémentaires

    10 avril 2011

    Si vous avez développé une nouvelle extension permettant d’ajouter une ou plusieurs fonctionnalités utiles à MediaSPIP, faites le nous savoir et son intégration dans la distribution officielle sera envisagée.
    Vous pouvez utiliser la liste de discussion de développement afin de le faire savoir ou demander de l’aide quant à la réalisation de ce plugin. MediaSPIP étant basé sur SPIP, il est également possible d’utiliser le liste de discussion SPIP-zone de SPIP pour (...)

Sur d’autres sites (7887)

  • FileNotFoundError : [WinError 2] The system cannot find the file specified - FFMPEG

    5 avril 2024, par shiftyscales

    I am running a script using conda environment on Windows and getting this error (stack trace below), which is apparently caused by python executable not being able to find the ffmpeg.exe. There are numerous questions about this, but none of the solutions unfortunately worked for me, so I hope someone has fresh ideas.

    


    What I tried :

    


      

    • conda install -c conda-forge ffmpeg (after this I can run ffmpeg in command line, but still getting the error)
    • 


    • pip install ffmpeg-python
    • 


    • Added the folder where ffmpeg.exe is located in conda env to the Windows Path as well as to sys.path in python.
    • 


    • copied the same ffmpeg.exe a) to the location of python.exe in conda env, b) to the location of the script I am running, c) to the location of subprocess.py.
    • 


    • Downloaded ffmpeg windows binary and repeated the last two steps with that file.
    • 


    


    Is there anything else that I can try to make it work ?

    


    ---------------------------------------------------------------------------&#xA;FileNotFoundError                         Traceback (most recent call last)&#xA;Cell In[10], line 22&#xA;     19 truncate_second = 8.2         # Video end = start_second &#x2B; truncate_second&#xA;     21 # Extract Video CAVP Features &amp; New Video Path:&#xA;---> 22 cavp_feats, new_video_path = extract_cavp(video_path, start_second, truncate_second, tmp_path=tmp_path)&#xA;&#xA;File D:\Software\Anaconda\envs\diff_foley\Lib\site-packages\torch\nn\modules\module.py:1518, in Module._wrapped_call_impl(self, *args, **kwargs)&#xA;   1516     return self._compiled_call_impl(*args, **kwargs)  # type: ignore[misc]&#xA;   1517 else:&#xA;-> 1518     return self._call_impl(*args, **kwargs)&#xA;&#xA;File D:\Software\Anaconda\envs\diff_foley\Lib\site-packages\torch\nn\modules\module.py:1527, in Module._call_impl(self, *args, **kwargs)&#xA;   1522 # If we don&#x27;t have any hooks, we want to skip the rest of the logic in&#xA;   1523 # this function, and just call forward.&#xA;   1524 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks&#xA;   1525         or _global_backward_pre_hooks or _global_backward_hooks&#xA;   1526         or _global_forward_hooks or _global_forward_pre_hooks):&#xA;-> 1527     return forward_call(*args, **kwargs)&#xA;   1529 try:&#xA;   1530     result = None&#xA;&#xA;File D:\Software\Anaconda\envs\diff_foley\Lib\site-packages\torch\utils\_contextlib.py:115, in context_decorator.<locals>.decorate_context(*args, **kwargs)&#xA;    112 @functools.wraps(func)&#xA;    113 def decorate_context(*args, **kwargs):&#xA;    114     with ctx_factory():&#xA;--> 115         return func(*args, **kwargs)&#xA;&#xA;File D:\Work\DIff-Foley\Diff-Foley\inference\demo_util.py:131, in Extract_CAVP_Features.forward(self, video_path, start_second, truncate_second, tmp_path)&#xA;    129 print("truncate second: ", truncate_second)&#xA;    130 # Load the video, change fps:&#xA;--> 131 video_path_low_fps = reencode_video_with_diff_fps(video_path, self.tmp_path, self.fps, start_second, truncate_second)&#xA;    132 video_path_high_fps = reencode_video_with_diff_fps(video_path, self.tmp_path, 21.5, start_second, truncate_second)&#xA;    134 # read the video:&#xA;&#xA;File D:\Work\DIff-Foley\Diff-Foley\inference\demo_util.py:42, in reencode_video_with_diff_fps(video_path, tmp_path, extraction_fps, start_second, truncate_second)&#xA;     31 def reencode_video_with_diff_fps(video_path: str, tmp_path: str, extraction_fps: int, start_second, truncate_second) -> str:&#xA;     32     &#x27;&#x27;&#x27;Reencodes the video given the path and saves it to the tmp_path folder.&#xA;     33 &#xA;     34     Args:&#xA;   (...)&#xA;     40         str: The path where the tmp file is stored. To be used to load the video from&#xA;     41     &#x27;&#x27;&#x27;&#xA;---> 42     assert which_ffmpeg() != &#x27;&#x27;, &#x27;Is ffmpeg installed? Check if the conda environment is activated.&#x27;&#xA;     43     # assert video_path.endswith(&#x27;.mp4&#x27;), &#x27;The file does not end with .mp4. Comment this if expected&#x27;&#xA;     44     # create tmp dir if doesn&#x27;t exist&#xA;     45     os.makedirs(tmp_path, exist_ok=True)&#xA;&#xA;File D:\Work\DIff-Foley\Diff-Foley\inference\demo_util.py:26, in which_ffmpeg()&#xA;     20 def which_ffmpeg() -> str:&#xA;     21     &#x27;&#x27;&#x27;Determines the path to ffmpeg library&#xA;     22 &#xA;     23     Returns:&#xA;     24         str -- path to the library&#xA;     25     &#x27;&#x27;&#x27;&#xA;---> 26     result = subprocess.run([&#x27;which&#x27;, &#x27;ffmpeg&#x27;], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)&#xA;     27     ffmpeg_path = result.stdout.decode(&#x27;utf-8&#x27;).replace(&#x27;\n&#x27;, &#x27;&#x27;)&#xA;     28     return ffmpeg_path&#xA;&#xA;File D:\Software\Anaconda\envs\diff_foley\Lib\subprocess.py:548, in run(input, capture_output, timeout, check, *popenargs, **kwargs)&#xA;    545     kwargs[&#x27;stdout&#x27;] = PIPE&#xA;    546     kwargs[&#x27;stderr&#x27;] = PIPE&#xA;--> 548 with Popen(*popenargs, **kwargs) as process:&#xA;    549     try:&#xA;    550         stdout, stderr = process.communicate(input, timeout=timeout)&#xA;&#xA;File D:\Software\Anaconda\envs\diff_foley\Lib\subprocess.py:1026, in Popen.__init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, user, group, extra_groups, encoding, errors, text, umask, pipesize, process_group)&#xA;   1022         if self.text_mode:&#xA;   1023             self.stderr = io.TextIOWrapper(self.stderr,&#xA;   1024                     encoding=encoding, errors=errors)&#xA;-> 1026     self._execute_child(args, executable, preexec_fn, close_fds,&#xA;   1027                         pass_fds, cwd, env,&#xA;   1028                         startupinfo, creationflags, shell,&#xA;   1029                         p2cread, p2cwrite,&#xA;   1030                         c2pread, c2pwrite,&#xA;   1031                         errread, errwrite,&#xA;   1032                         restore_signals,&#xA;   1033                         gid, gids, uid, umask,&#xA;   1034                         start_new_session, process_group)&#xA;   1035 except:&#xA;   1036     # Cleanup if the child failed starting.&#xA;   1037     for f in filter(None, (self.stdin, self.stdout, self.stderr)):&#xA;&#xA;File D:\Software\Anaconda\envs\diff_foley\Lib\subprocess.py:1538, in Popen._execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_gid, unused_gids, unused_uid, unused_umask, unused_start_new_session, unused_process_group)&#xA;   1536 # Start the process&#xA;   1537 try:&#xA;-> 1538     hp, ht, pid, tid = _winapi.CreateProcess(executable, args,&#xA;   1539                              # no special security&#xA;   1540                              None, None,&#xA;   1541                              int(not close_fds),&#xA;   1542                              creationflags,&#xA;   1543                              env,&#xA;   1544                              cwd,&#xA;   1545                              startupinfo)&#xA;   1546 finally:&#xA;   1547     # Child is launched. Close the parent&#x27;s copy of those pipe&#xA;   1548     # handles that only the child should have open.  You need&#xA;   (...)&#xA;   1551     # pipe will not close when the child process exits and the&#xA;   1552     # ReadFile will hang.&#xA;   1553     self._close_pipe_fds(p2cread, p2cwrite,&#xA;   1554                          c2pread, c2pwrite,&#xA;   1555                          errread, errwrite)&#xA;&#xA;FileNotFoundError: [WinError 2] The system cannot find the file specified&#xA;</locals>

    &#xA;

  • Empty audio backends for torchaudio list audio backends, with ffmpeg installed on system libraries [closed]

    28 mars, par Alberto Agudo Dominguez

    I installed torchaudio 2.5.1 and a system install of ffmpeg on Windows and get :

    &#xA;

    PS C:\Users\> ffmpeg -version&#xA;ffmpeg version 2025-01-05-git-19c95ecbff-essentials_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers&#xA;built with gcc 14.2.0 (Rev1, Built by MSYS2 project)&#xA;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-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --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-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband&#xA;libavutil      59. 54.101 / 59. 54.101&#xA;libavcodec     61. 31.100 / 61. 31.100&#xA;libavfilter    10.  6.101 / 10.  6.101&#xA;libswresample   5.  4.100 /  5.  4.100&#xA;libpostproc    58.  4.100 / 58.  4.100&#xA;&#xA;PS C:\Users\> python&#xA;Python 3.12.5 (tags/v3.12.5:ff3bc82, Aug  6 2024, 20:45:27) [MSC v.1940 64 bit (AMD64)] on win32&#xA;Type "help", "copyright", "credits" or "license" for more information.&#xA;>>> import torchaudio&#xA;>>> torchaudio.list_audio_backends()&#xA;[]&#xA;

    &#xA;

    Hence ffmpeg is added to the path and recognized by the console, but not by torchaudio.

    &#xA;

  • FFMPEG convert NV12 format to NV12 with the same height and width

    7 septembre 2022, par Chun Wang

    I want to use FFmpeg4.2.2 to convert the input NV12 format to output NV12 format with the same height and width. I used sws_scale conversion, but the output frame's colors are all green.

    &#xA;

    P.S. It seems no need to use swscale to get the same width,same height and same format frame,but it is neccessary in my project for dealing with other frames.

    &#xA;

    I have successfully converted the input NV12 format to output NV12 format with the different height and width, the output frame's colors were right.But I FAILED to convert NV12 to NV12 with the same height and width. It was so weird, I couldn't know why :(

    &#xA;

    I want to know what the reason is and what I should do.&#xA;The following is my code.swsCtx4 was used for converting NV12 format to output NV12 format. Others were used for other formats converted test.&#xA;Thank you for you help 

    &#xA;

    //the main code is    &#xA;    AVFrame* frame_nv12 = av_frame_alloc();&#xA;    frame_nv12->width = in_width;&#xA;    frame_nv12->height = in_height;&#xA;    frame_nv12->format = AV_PIX_FMT_NV12;&#xA;    uint8_t* frame_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width, in_height , 1));&#xA;    av_image_fill_arrays(frame_nv12->data, frame_nv12->linesize, frame_buffer_nv12, AV_PIX_FMT_NV12, in_width, in_height, 1);&#xA;&#xA;&#xA;    AVFrame* frame2_nv12 = av_frame_alloc();&#xA;    frame2_nv12->width = in_width1;&#xA;    frame2_nv12->height = in_height1;&#xA;    frame2_nv12->format = AV_PIX_FMT_NV12;&#xA;&#xA;    uint8_t* frame2_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width1, in_height1, 1));&#xA;    av_image_fill_arrays(frame2_nv12->data, frame2_nv12->linesize, frame2_buffer_nv12, AV_PIX_FMT_NV12, in_width1, in_height1, 1);&#xA; &#xA;    SwsContext* swsCtx4 = nullptr;&#xA;    swsCtx4 = sws_getContext(in_width, in_height, AV_PIX_FMT_NV12, in_width1, in_height1, AV_PIX_FMT_NV12,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx4\n");&#xA; &#xA;    ret = sws_scale(swsCtx4, frame_nv12->data, frame_nv12->linesize, 0, frame_nv12->height, frame2_nv12->data, frame2_nv12->linesize);&#xA;        if (ret &lt; 0) {&#xA;            printf("sws_4scale failed\n");&#xA;        }&#xA; &#xA;

    &#xA;

    //the complete code&#xA;extern "C" {&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavutil></libavutil>imgutils.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;}&#xA;#include <seeker></seeker>loggerApi.h>&#xA;#include "seeker/common.h"&#xA;#include <iostream>&#xA;&#xA;//解决原因:pts设置为0,dts设置为0&#xA;#define FILE_SRC "testPicFilter.yuv" //源文件&#xA;#define FILE_DES "test11.yuv" //源文件&#xA;&#xA;int count = 0;&#xA;&#xA;&#xA;int main(int argc, char* argv[])&#xA;{&#xA;    av_register_all();&#xA;&#xA;    int ret = 0;&#xA;    &#xA;    //std::this_thread::sleep_for(std::chrono::milliseconds(5000));&#xA;    int count1 = 1;&#xA;    int piccount;&#xA;    int align = 1;&#xA;&#xA;&#xA;    /*打开输入yuv文件*/&#xA;    FILE* fp_in = fopen(FILE_SRC, "rb&#x2B;");&#xA;    if (fp_in == NULL)&#xA;    {&#xA;        printf("文件打开失败\n");&#xA;        return 0;&#xA;    }&#xA;    int in_width = 640;&#xA;    int in_height = 360;&#xA;    int in_width1 = 640;&#xA;    int in_height1 = 360;&#xA;    &#xA;&#xA;&#xA;    /*处理后的文件*/&#xA;    FILE* fp_out = fopen(FILE_DES, "wb&#x2B;");&#xA;    if (fp_out == NULL)&#xA;    {&#xA;        printf("文件创建失败\n");&#xA;        return 0;&#xA;    }&#xA;    char buff[50];&#xA;&#xA;    AVFrame* frame_in = av_frame_alloc();&#xA;    unsigned char* frame_buffer_in;&#xA;    frame_buffer_in = (unsigned char*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_YUV420P, in_width, in_height, 1));&#xA;    /*根据图像设置图像指针和内存对齐方式*/&#xA;    av_image_fill_arrays(frame_in->data, frame_in->linesize, frame_buffer_in, AV_PIX_FMT_YUV420P, in_width, in_height, 1);&#xA;&#xA;    frame_in->width = in_width;&#xA;    frame_in->height = in_height;&#xA;    frame_in->format = AV_PIX_FMT_YUV420P;&#xA;&#xA;&#xA;    //输入yuv转成frame_nv12&#xA;    AVFrame* frame_nv12 = av_frame_alloc();&#xA;    frame_nv12->width = in_width;&#xA;    frame_nv12->height = in_height;&#xA;    frame_nv12->format = AV_PIX_FMT_NV12;&#xA;    uint8_t* frame_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width, in_height , 1));&#xA;    av_image_fill_arrays(frame_nv12->data, frame_nv12->linesize, frame_buffer_nv12, AV_PIX_FMT_NV12, in_width, in_height, 1);&#xA;&#xA;&#xA;    AVFrame* frame2_nv12 = av_frame_alloc();&#xA;    frame2_nv12->width = in_width1;&#xA;    frame2_nv12->height = in_height1;&#xA;    frame2_nv12->format = AV_PIX_FMT_NV12;&#xA;&#xA;    uint8_t* frame2_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width1, in_height1, 1));&#xA;    av_image_fill_arrays(frame2_nv12->data, frame2_nv12->linesize, frame2_buffer_nv12, AV_PIX_FMT_NV12, in_width1, in_height1, 1);&#xA;&#xA;&#xA;    &#xA;    //输入rgb转成yuv&#xA;    AVFrame* frame_yuv = av_frame_alloc();&#xA;    frame_yuv->width = in_width;&#xA;    frame_yuv->height = in_height;&#xA;    frame_yuv->format = AV_PIX_FMT_YUV420P;&#xA;    uint8_t* frame_buffer_yuv = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_YUV420P, in_width, in_height, 1));&#xA;    av_image_fill_arrays(frame_yuv->data, frame_yuv->linesize, frame_buffer_yuv,&#xA;        AV_PIX_FMT_YUV420P, in_width, in_height, 1);&#xA;&#xA;&#xA;&#xA;    SwsContext* swsCtx = nullptr;&#xA;    swsCtx = sws_getContext(in_width, in_height, AV_PIX_FMT_YUV420P, in_width, in_height, AV_PIX_FMT_NV12,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx\n");&#xA;&#xA;    SwsContext* swsCtx4 = nullptr;&#xA;    swsCtx4 = sws_getContext(in_width, in_height, AV_PIX_FMT_NV12, in_width1, in_height1, AV_PIX_FMT_NV12,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx4\n");&#xA;&#xA;    &#xA;    SwsContext* swsCtx2 = nullptr;&#xA;    swsCtx2 = sws_getContext(in_width1, in_height1, AV_PIX_FMT_NV12, in_width, in_height, AV_PIX_FMT_YUV420P,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx2\n");&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;    while (1)&#xA;    {&#xA;&#xA;&#xA;        count&#x2B;&#x2B;;&#xA;&#xA;        if (fread(frame_buffer_in, 1, in_width * in_height * 3 / 2, fp_in) != in_width * in_height * 3 / 2)&#xA;        {&#xA;            break;&#xA;        }&#xA;&#xA;        frame_in->data[0] = frame_buffer_in;&#xA;        frame_in->data[1] = frame_buffer_in &#x2B; in_width * in_height;&#xA;        frame_in->data[2] = frame_buffer_in &#x2B; in_width * in_height * 5 / 4;&#xA;&#xA;&#xA;            //转NV12格式&#xA;        int ret = sws_scale(swsCtx, frame_in->data, frame_in->linesize, 0, frame_in->height, frame_nv12->data, frame_nv12->linesize);&#xA;        if (ret &lt; 0) {&#xA;            printf("sws_scale swsCtx failed\n");&#xA;        }&#xA;&#xA;&#xA;        ret = sws_scale(swsCtx4, frame_nv12->data, frame_nv12->linesize, 0, frame_nv12->height, frame2_nv12->data, frame2_nv12->linesize);&#xA;        if (ret &lt; 0) {&#xA;            printf("sws_scale  swsCtx4 failed\n");&#xA;        }&#xA;        &#xA;&#xA;        if (ret > 0) {&#xA;        &#xA;            int ret2 = sws_scale(swsCtx2, frame2_nv12->data, frame2_nv12->linesize, 0, frame2_nv12->height, frame_yuv->data, frame_yuv->linesize);&#xA;            if (ret2 &lt; 0) {&#xA;                printf("sws_scale swsCtx2 failed\n");&#xA;            }&#xA;            I_LOG("frame_yuv:{},{}", frame_yuv->width, frame_yuv->height);&#xA;&#xA;        &#xA;            //I_LOG("frame_yuv:{}", frame_yuv->format);&#xA;&#xA;            if (frame_yuv->format == AV_PIX_FMT_YUV420P)&#xA;            {&#xA;&#xA;                for (int i = 0; i &lt; frame_yuv->height; i&#x2B;&#x2B;)&#xA;                {&#xA;                    fwrite(frame_yuv->data[0] &#x2B; frame_yuv->linesize[0] * i, 1, frame_yuv->width, fp_out);&#xA;                }&#xA;                for (int i = 0; i &lt; frame_yuv->height / 2; i&#x2B;&#x2B;)&#xA;                {&#xA;                    fwrite(frame_yuv->data[1] &#x2B; frame_yuv->linesize[1] * i, 1, frame_yuv->width / 2, fp_out);&#xA;                }&#xA;                for (int i = 0; i &lt; frame_yuv->height / 2; i&#x2B;&#x2B;)&#xA;                {&#xA;                    fwrite(frame_yuv->data[2] &#x2B; frame_yuv->linesize[2] * i, 1, frame_yuv->width / 2, fp_out);&#xA;                }&#xA;                printf("yuv to file\n");&#xA;            }&#xA;        }&#xA;&#xA;    }&#xA;&#xA;&#xA;    fclose(fp_in);&#xA;    fclose(fp_out);&#xA;    av_frame_free(&amp;frame_in);&#xA;    av_frame_free(&amp;frame_nv12);&#xA;    av_frame_free(&amp;frame_yuv);&#xA;    sws_freeContext(swsCtx);&#xA;    sws_freeContext(swsCtx2);&#xA;    sws_freeContext(swsCtx4);&#xA;&#xA;    //std::this_thread::sleep_for(std::chrono::milliseconds(8000));&#xA;&#xA;    return 0;&#xA;&#xA;}&#xA;&#xA;&#xA;&#xA;</iostream>

    &#xA;