Recherche avancée

Médias (91)

Autres articles (83)

  • 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 (...)

  • Encoding and processing into web-friendly formats

    13 avril 2011, par

    MediaSPIP automatically converts uploaded files to internet-compatible formats.
    Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
    Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
    Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
    All uploaded files are stored online in their original format, so you can (...)

  • MediaSPIP Player : problèmes potentiels

    22 février 2011, par

    Le lecteur ne fonctionne pas sur Internet Explorer
    Sur Internet Explorer (8 et 7 au moins), le plugin utilise le lecteur Flash flowplayer pour lire vidéos et son. Si le lecteur ne semble pas fonctionner, cela peut venir de la configuration du mod_deflate d’Apache.
    Si dans la configuration de ce module Apache vous avez une ligne qui ressemble à la suivante, essayez de la supprimer ou de la commenter pour voir si le lecteur fonctionne correctement : /** * GeSHi (C) 2004 - 2007 Nigel McNie, (...)

Sur d’autres sites (7383)

  • ffmpeg when asked to map a .mov file's streams 0,1,3 actually maps streams 0,1,2

    15 septembre 2023, par user2258729

    I'm trying the following :

    


    Start with in.mov which has 4 streams 0:0 - 0:3.

    


    Audio, Video, Data (unknown), and mJpeg.

    


    Trying to map 0:0, 0:1, and 0:3 into out013.mov.

    


    ffmpeg -i in.mov -map 0 -map -0:2 -c copy out013.mov

    


    or

    


    ffmpeg -i in.mov -map 0:0 -map 0:1 -map 0:2 -c copy out013.mov

    


    ffmpeg tells me that 3 streams are mapped :

    


      Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #0:3 -> #0:2 (copy)


    


    ffprobe disagrees. According to it what really happened was :

    


      Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #0:2 -> #0:2 (copy)


    


    "Who needs a thumbnail image anyways, screw it !" I said. "Let's just get rid of the data."

    


    ffmpeg -i out013.mov -map 0:0 -map 0:1 -c copy out01.mov

    


    ffmpeg tells me that 2 streams are mapped :

    


      Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)


    


    ffprobe disagrees. According to it what really happened was :

    


      Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #0:2 -> #0:2 (copy)


    


    Seems like I can't rid myself of that data stream (0:2).

    


    Below is the output from the ffprobe and ffmpeg for the first scenario.

    


    Any ideas ?

    



    


    ffprobe in.mov

    


    ffprobe version 2023-09-07-git-9c9f48e7f2-essentials_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, 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-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-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --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
  libavutil      58. 19.100 / 58. 19.100
  libavcodec     60. 26.100 / 60. 26.100
  libavformat    60. 11.100 / 60. 11.100
  libavdevice    60.  2.101 / 60.  2.101
  libavfilter     9. 11.100 /  9. 11.100
  libswscale      7.  3.100 /  7.  3.100
  libswresample   4. 11.100 /  4. 11.100
  libpostproc    57.  2.100 / 57.  2.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000023b088f3300] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'in.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2023-08-22T21:23:09.000000Z
    title           : Redacted
    com.apple.quicktime.displayname: Redacted
    com.apple.quicktime.title: Redacted
  Duration: 00:00:30.03, start: 0.000000, bitrate: 152583 kb/s
  Stream #0:0[0x1](eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 2 channels, s32 (24 bit), 2304 kb/s (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Video: prores (Standard) (apcn / 0x6E637061), yuv422p10le(bt709, progressive), 1920x1080, 150213 kb/s, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 30k tbn (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : Apple ProRes 422
      timecode        : 00:00:00:00
  Stream #0:2[0x3](und): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Time Code
      timecode        : 00:00:00:00
  Stream #0:3[0x0]: Video: mjpeg (Progressive), yuvj420p(pc, bt470bg/unknown/unknown), 1920x1080 [SAR 72:72 DAR 16:9], 90k tbr, 90k tbn (attached pic)
Unsupported codec with id 0 for input stream 2


    



    


    ffmpeg -i in.mov -map 0:0 -map 0:1 -map 0:3 -c copy out013.mov

    


    ffmpeg version 2023-09-07-git-9c9f48e7f2-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, 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-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-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --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
  libavutil      58. 19.100 / 58. 19.100
  libavcodec     60. 26.100 / 60. 26.100
  libavformat    60. 11.100 / 60. 11.100
  libavdevice    60.  2.101 / 60.  2.101
  libavfilter     9. 11.100 /  9. 11.100
  libswscale      7.  3.100 /  7.  3.100
  libswresample   4. 11.100 /  4. 11.100
  libpostproc    57.  2.100 / 57.  2.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 000001f92e383880] stream 0, timescale not set
[aist#0:0/pcm_s24le @ 000001f92e50f400] Guessed Channel Layout: stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'in.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2023-08-22T21:23:09.000000Z
    title           : Redacted
    com.apple.quicktime.displayname: Redacted
    com.apple.quicktime.title: Redacted
  Duration: 00:00:30.03, start: 0.000000, bitrate: 152583 kb/s
  Stream #0:0[0x1](eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 2 channels, s32 (24 bit), 2304 kb/s (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Video: prores (Standard) (apcn / 0x6E637061), yuv422p10le(bt709, progressive), 1920x1080, 150213 kb/s, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 30k tbn (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : Apple ProRes 422
      timecode        : 00:00:00:00
  Stream #0:2[0x3](und): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Time Code
      timecode        : 00:00:00:00
  Stream #0:3[0x0]: Video: mjpeg (Progressive), yuvj420p(pc, bt470bg/unknown/unknown), 1920x1080 [SAR 72:72 DAR 16:9], 90k tbr, 90k tbn (attached pic)
Output #0, mov, to 'out013.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    com.apple.quicktime.title: Redacted
    title           : Redacted
    com.apple.quicktime.displayname: Redacted
    encoder         : Lavf60.11.100
  Stream #0:0(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Video: prores (Standard) (apcn / 0x6E637061), yuv422p10le(bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 150213 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)
    Metadata:
      creation_time   : 2023-08-22T21:23:09.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : Apple ProRes 422
      timecode        : 00:00:00:00
  Stream #0:2: Video: mjpeg (Progressive) (jpeg / 0x6765706A), yuvj420p(pc, bt470bg/unknown/unknown), 1920x1080 [SAR 72:72 DAR 16:9], q=2-31, 90k tbr, 90k tbn (attached pic)
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #0:3 -> #0:2 (copy)
Press [q] to stop, [?] for help
[out#0/mov @ 000001f92e398340] video:550881kB audio:8446kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame=  900 fps=0.0 q=-1.0 Lq=-1.0 size=  559116kB time=00:00:30.02 bitrate=152567.6kbits/s speed= 117x


    



    


    ffprobe out013.mov

    


    ffprobe version 2023-09-07-git-9c9f48e7f2-essentials_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, 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-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-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --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
  libavutil      58. 19.100 / 58. 19.100
  libavcodec     60. 26.100 / 60. 26.100
  libavformat    60. 11.100 / 60. 11.100
  libavdevice    60.  2.101 / 60.  2.101
  libavfilter     9. 11.100 /  9. 11.100
  libswscale      7.  3.100 /  7.  3.100
  libswresample   4. 11.100 /  4. 11.100
  libpostproc    57.  2.100 / 57.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out013.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    title           : Redacted
    encoder         : Lavf60.11.100
    timecode        : 00:00:00:00
  Duration: 00:00:30.03, start: 0.000000, bitrate: 152523 kb/s
  Stream #0:0[0x1](eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s (default)
    Metadata:
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2]: Video: prores (Standard) (apcn / 0x6E637061), yuv422p10le(bt709, progressive), 1920x1080, 150213 kb/s, SAR 1:1 DAR 16:9, 29.97 fps, 29.97 tbr, 30k tbn (default)
    Metadata:
      handler_name    : Core Media Video
      vendor_id       : FFMP
      encoder         : Apple ProRes 422
      timecode        : 00:00:00:00
  Stream #0:2[0x4](eng): Data: none (tmcd / 0x64636D74), 0 kb/s
    Metadata:
      handler_name    : Core Media Video
      timecode        : 00:00:00:00
Unsupported codec with id 0 for input stream 2



    


  • FFMPEG changes pixel values when reading and saving png without modification

    25 janvier 2023, par walrus

    This is a toy problem that is the result of my trying to identify a bug within a video pipeline I'm working on. The idea is that I want to take a frame from a YUV420 video, modify it as an RGB24 image, and reinsert it. To do this I convert YUV420 -> YUV444 -> RGB -> YUV444 -> YUV420. Doing this without any modification should result in the same frame however I noticed slight color transformations.

    


    I tried to isolate the problem using a toy 3x3 RGB32 png image. The function read_and_save_image reads the image and then saves it as new file. It returns the read pixel array. I run this function thrice successively using the output of the previous run as the input of the next. This is to demonstrate a perplexing fact. While passing an image through the function once causes the resulting image to have different pixel values, doing it twice does not change anything. Perhaps more confusing is that the pixel values returned by the function are all the same.

    


    tldr ; How can I load and save the toy image below using ffmpeg as a new file such that the pixel values of the new and original files are identical ?

    


    Here is the original image followed by the result from one and two passes through the function. Note that the pixel value displayed by when reading these images with Preview has changed ever so slightly. This becomes noticeable within a video.

    


    Test image (very small) ->&#xA;3x3 test image file <-

    &#xA;

    Here are the pixel values read (note that after being loaded and saved there is a change) :

    &#xA;

    original test image

    &#xA;

    test image after one pass

    &#xA;

    test image after two passes

    &#xA;

    Edit : here is an RGB24 frame extracted from a video I am using to test my pipeline. I had the same issue with pixel values changing after loading and saving with ffmpeg.

    &#xA;

    frame from video I was testing pipeline on

    &#xA;

    Here is a screenshot showing how the image is noticeably darker after ffmpeg. Same pixels on the top right corner of the image.

    &#xA;

    zoomed in top right corner

    &#xA;

    Here is the code of the toy problem :

    &#xA;

    import os&#xA;import ffmpeg&#xA;import numpy as np&#xA;&#xA;&#xA;def read_and_save_image(in_file, out_file, width, height, pix_fmt=&#x27;rgb32&#x27;):&#xA;    input_data, _ = (&#xA;        ffmpeg&#xA;        .input(in_file)&#xA;        .output(&#x27;pipe:&#x27;, format=&#x27;rawvideo&#x27;, pix_fmt=pix_fmt)&#xA;        .run(capture_stdout=True)&#xA;    )&#xA;  &#xA;    frame = np.frombuffer(input_data, np.uint8)&#xA;    print(in_file,&#x27;\n&#x27;, frame.reshape((height,width,-1)))&#xA;    &#xA;    save_data = (&#xA;        ffmpeg&#xA;            .input(&#x27;pipe:&#x27;, format=&#x27;rawvideo&#x27;, pix_fmt=pix_fmt, s=&#x27;{}x{}&#x27;.format(width, height))&#xA;            .output(out_file, pix_fmt=pix_fmt)&#xA;            .overwrite_output()&#xA;            .run_async(pipe_stdin=True)&#xA;    )&#xA;    &#xA;    &#xA;&#xA;    save_data.stdin.write(frame.tobytes())&#xA;    save_data.stdin.close()&#xA;    #save_data.wait()&#xA;&#xA;    return frame&#xA;&#xA;try:&#xA;    test_img = "test_image.png"&#xA;    test_img_1 = "test_image_1.png"&#xA;    test_img_2 = "test_image_2.png"&#xA;    test_img_3 = "test_image_3.png"&#xA;&#xA;    width, height, pix_fmt = 3,3,&#x27;rgb32&#x27;&#xA;    #width, height, pix_fmt = video_stream[&#x27;width&#x27;], video_stream[&#x27;height&#x27;],  &#x27;rgb24&#x27;&#xA;    test_img_pxls = read_and_save_image(test_img,test_img_1, width, height, pix_fmt)&#xA;    test_img_1_pxls = read_and_save_image(test_img_1,test_img_2, width, height, pix_fmt)&#xA;    test_img_2_pxls = read_and_save_image(test_img_2,test_img_3, width, height, pix_fmt)&#xA;&#xA;    print(np.array_equiv(test_img_pxls, test_img_1_pxls))&#xA;    print(np.array_equiv(test_img_1_pxls, test_img_2_pxls))&#xA;&#xA;except ffmpeg.Error as e:&#xA;    print(&#x27;stdout:&#x27;, e.stdout.decode(&#x27;utf8&#x27;))&#xA;    print(&#x27;stderr:&#x27;, e.stderr.decode(&#x27;utf8&#x27;))&#xA;    raise e&#xA;&#xA;&#xA;!mediainfo --Output=JSON --Full $test_img&#xA;!mediainfo --Output=JSON --Full $test_img_1&#xA;!mediainfo --Output=JSON --Full $test_img_2&#xA;

    &#xA;

    Here is the console output of the program that shows that the pixel arrays read by ffmpeg are the same despite the images being different.

    &#xA;

    test_image.png &#xA; [[[253 218 249 255]&#xA;  [252 213 248 255]&#xA;  [251 200 244 255]]&#xA;&#xA; [[253 227 250 255]&#xA;  [249 209 236 255]&#xA;  [243 169 206 255]]&#xA;&#xA; [[253 235 251 255]&#xA;  [245 195 211 255]&#xA;  [226 103 125 255]]]&#xA;test_image_1.png &#xA; [[[253 218 249 255]&#xA;  [252 213 248 255]&#xA;  [251 200 244 255]]&#xA;&#xA; [[253 227 250 255]&#xA;  [249 209 236 255]&#xA;  [243 169 206 255]]&#xA;&#xA; [[253 235 251 255]&#xA;  [245 195 211 255]&#xA;  [226 103 125 255]]]&#xA;test_image_2.png &#xA; [[[253 218 249 255]&#xA;  [252 213 248 255]&#xA;  [251 200 244 255]]&#xA;&#xA; [[253 227 250 255]&#xA;  [249 209 236 255]&#xA;  [243 169 206 255]]&#xA;&#xA; [[253 235 251 255]&#xA;  [245 195 211 255]&#xA;  [226 103 125 255]]]&#xA;True&#xA;True&#xA;{&#xA;"media": {&#xA;"@ref": "test_image.png",&#xA;"track": [&#xA;{&#xA;"@type": "General",&#xA;"ImageCount": "1",&#xA;"FileExtension": "png",&#xA;"Format": "PNG",&#xA;"FileSize": "4105",&#xA;"StreamSize": "0",&#xA;"File_Modified_Date": "UTC 2023-01-19 13:49:00",&#xA;"File_Modified_Date_Local": "2023-01-19 13:49:00"&#xA;},&#xA;{&#xA;"@type": "Image",&#xA;"Format": "PNG",&#xA;"Format_Compression": "LZ77",&#xA;"Width": "3",&#xA;"Height": "3",&#xA;"BitDepth": "32",&#xA;"Compression_Mode": "Lossless",&#xA;"StreamSize": "4105"&#xA;}&#xA;]&#xA;}&#xA;}&#xA;&#xA;{&#xA;"media": {&#xA;"@ref": "test_image_1.png",&#xA;"track": [&#xA;{&#xA;"@type": "General",&#xA;"ImageCount": "1",&#xA;"FileExtension": "png",&#xA;"Format": "PNG",&#xA;"FileSize": "128",&#xA;"StreamSize": "0",&#xA;"File_Modified_Date": "UTC 2023-01-24 15:31:58",&#xA;"File_Modified_Date_Local": "2023-01-24 15:31:58"&#xA;},&#xA;{&#xA;"@type": "Image",&#xA;"Format": "PNG",&#xA;"Format_Compression": "LZ77",&#xA;"Width": "3",&#xA;"Height": "3",&#xA;"BitDepth": "32",&#xA;"Compression_Mode": "Lossless",&#xA;"StreamSize": "128"&#xA;}&#xA;]&#xA;}&#xA;}&#xA;&#xA;{&#xA;"media": {&#xA;"@ref": "test_image_2.png",&#xA;"track": [&#xA;{&#xA;"@type": "General",&#xA;"ImageCount": "1",&#xA;"FileExtension": "png",&#xA;"Format": "PNG",&#xA;"FileSize": "128",&#xA;"StreamSize": "0",&#xA;"File_Modified_Date": "UTC 2023-01-24 15:31:59",&#xA;"File_Modified_Date_Local": "2023-01-24 15:31:59"&#xA;},&#xA;{&#xA;"@type": "Image",&#xA;"Format": "PNG",&#xA;"Format_Compression": "LZ77",&#xA;"Width": "3",&#xA;"Height": "3",&#xA;"BitDepth": "32",&#xA;"Compression_Mode": "Lossless",&#xA;"StreamSize": "128"&#xA;}&#xA;]&#xA;}&#xA;}&#xA;&#xA;

    &#xA;

  • ffmpeg doesn't work when the script is launched by cron - No protocol specified, Cannot open display :0.0

    14 janvier 2024, par a k

    ffmpeg in my script doesn't work when the script is launched by cron of the root

    &#xA;

    Error : No protocol specified, Cannot open display :0.0

    &#xA;

    OS : Ubuntu 20.04

    &#xA;

    #!/bin/bash&#xA;log=/var/log/log2/log2.txt&#xA;&#xA;echo ______________ $(date) >> "$log"&#xA;echo "$""DISPLAY" "=      "  "$DISPLAY" >> "$log" ;&#xA;echo whoami &#x27;         &#x27; $(whoami) >> "$log" &#xA;echo pwd &#x27;            &#x27; $(pwd) >> "$log" &#xA;echo "$""USER" "=" &#x27;        &#x27; "$USER" >> "$log"&#xA;echo PATH &#x27;           &#x27; "$PATH" >> "$log"&#xA;echo which ffmpeg &#x27;   &#x27; $(which ffmpeg)>> "$log" &#xA;echo whereis ffmpeg &#x27; &#x27; $(whereis ffmpeg) >> "$log" &#xA;echo "\nls -l /bin/* | grep ffmpeg" &#x27;        &#x27; >> "$log"&#xA;ls -l /usr/bin/* | grep ffmpeg >> "$log"&#xA;echo "ls -l /var/log | grep log2" &#x27; &#x27;>> "$log"&#xA;ls -l /var/log | grep log2 >> "$log"&#xA;&#xA;ffmpeg -y -f x11grab -s 1366x768 -i :0.0 -r 25 /var/log/log2/test.mp4 -loglevel error 2>>"$log" &amp;&#xA;&#xA;echo "pid ffmpeg ""$""!"" = " "$!" >> "$log" &#xA;sleep 5&#xA;kill "$!"&#xA;echo exit >> "$log"&#xA;exit&#xA;

    &#xA;

    When Cron (Cron of the root) launches the script, ffmpeg shows the error "No protocol specified, Cannot open display :0.0"

    &#xA;

    /var/log/log2/log2.txt :

    &#xA;

    ______________ ven. 05 mai 2023 04:10:01 CEST&#xA;$DISPLAY =       &#xA;whoami           root&#xA;pwd              /root&#xA;$USER =          &#xA;PATH             /usr/bin:/bin&#xA;which ffmpeg     /usr/bin/ffmpeg&#xA;whereis ffmpeg   ffmpeg: /usr/bin/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz&#xA;ls -l /usr/bin/* | grep ffmpeg  &#xA;-rwxr-xr-x 1 root   root      284976 mai   18  2022 /usr/bin/ffmpeg&#xA;ls -l /var/log | grep log2  &#xA;drwxrwxrwx  2 root              root               4096 mai    5 04:09 log2&#xA;pid ffmpeg $! =  74590&#xA;No protocol specified&#xA;[x11grab @ 0x56244aa06740] Cannot open display :0.0, error 1.&#xA;:0.0: Input/output error&#xA;exit&#xA;

    &#xA;

    When I launch the script manually as a not-root user (with sudo), everything work correctly :

    &#xA;

    ______________ ven. 05 mai 2023 04:10:47 CEST&#xA;$DISPLAY =       :0&#xA;whoami           root&#xA;pwd              /home/an&#xA;$USER =          root&#xA;PATH             /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin&#xA;which ffmpeg     /usr/bin/ffmpeg&#xA;whereis ffmpeg   ffmpeg: /usr/bin/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz&#xA;ls -l /usr/bin/* | grep ffmpeg  &#xA;-rwxr-xr-x 1 root   root      284976 mai   18  2022 /usr/bin/ffmpeg&#xA;ls -l /var/log | grep log2  &#xA;drwxrwxrwx  2 root              root               4096 mai    5 04:09 log2&#xA;pid ffmpeg $! =  74618&#xA;exit&#xA;

    &#xA;

    When I launch the script manually as the root, everything works correctly :

    &#xA;

    ______________ ven. 05 mai 2023 04:11:27 CEST&#xA;$DISPLAY =       :0&#xA;whoami           root&#xA;pwd              /root&#xA;$USER =          root&#xA;PATH             /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin&#xA;which ffmpeg     /usr/bin/ffmpeg&#xA;whereis ffmpeg   ffmpeg: /usr/bin/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz&#xA;ls -l /usr/bin/* | grep ffmpeg  &#xA;-rwxr-xr-x 1 root   root      284976 mai   18  2022 /usr/bin/ffmpeg&#xA;ls -l /var/log | grep log2  &#xA;drwxrwxrwx  2 root              root               4096 mai    5 04:11 log2&#xA;pid ffmpeg $! =  74683&#xA;exit&#xA;

    &#xA;

    When crontab of an ordinary user launches the script, it works correctly :

    &#xA;

    $DISPLAY =       &#xA;whoami           an&#xA;pwd              /home/an&#xA;$USER =          &#xA;PATH             /usr/bin:/bin&#xA;which ffmpeg     /usr/bin/ffmpeg&#xA;whereis ffmpeg   ffmpeg: /usr/bin/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz&#xA;ls -l /usr/bin/* | grep ffmpeg  &#xA;-rwxr-xr-x 1 root   root      284976 mai   18  2022 /usr/bin/ffmpeg&#xA;ls -l /var/log | grep log2  &#xA;drwxrwxrwx  2 root              root               4096 mai    5 05:05 log2&#xA;pid ffmpeg $! =  77601&#xA;exit&#xA;

    &#xA;

    I have tried to put into the script :

    &#xA;

    export DISPLAY=":0"

    &#xA;

    export DISPLAY=":0.0"

    &#xA;

    export DISPLAY=":1"

    &#xA;