{"id":6651,"date":"2024-12-31T11:40:50","date_gmt":"2024-12-31T10:40:50","guid":{"rendered":"https:\/\/olivier.hoarau.site\/?p=6651"},"modified":"2025-05-04T16:53:18","modified_gmt":"2025-05-04T15:53:18","slug":"enregistrer-le-flux-video-dune-box-internet","status":"publish","type":"post","link":"https:\/\/olivier.hoarau.org\/?p=6651","title":{"rendered":"Enregistrer le flux vid\u00e9o d&rsquo;une box internet"},"content":{"rendered":"\n<p>Pendant longtemps je me suis servi d&rsquo;un enregistreur <strong>AverMedia<\/strong> pour enregistrer le flux TV de ma box internet comme expliqu\u00e9 dans <a href=\"https:\/\/olivier.hoarau.org\/?p=1941\">ce post<\/a>.  Il se trouve  que mon bo\u00eetier AverMedia pr\u00e9sentait des signes de faiblesse ces derniers temps avec une mauvaise reconnaissance du disque dur externe et d&rsquo;autres dysfonctionnements, je me suis d\u00e9cid\u00e9 \u00e0 le changer. Plut\u00f4t que de partir sur un \u00e9quivalent actuel avec enregistrement int\u00e9gr\u00e9, je suis parti sur quelque chose de plus simple, un dispositif de capture vid\u00e9o <strong>HDMI<\/strong> qui renvoie le flux via <strong>USB<\/strong> pour enregistrement sur un PC, bien moins cher.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/video-capture-usb.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"565\" src=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/video-capture-usb.jpg?resize=474%2C565&#038;ssl=1\" alt=\"\" class=\"wp-image-6652\" style=\"width:304px;height:auto\" srcset=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/video-capture-usb.jpg?w=790&amp;ssl=1 790w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/video-capture-usb.jpg?resize=252%2C300&amp;ssl=1 252w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/video-capture-usb.jpg?resize=768%2C916&amp;ssl=1 768w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>J&rsquo;ai achet\u00e9 ce mod\u00e8le <a href=\"https:\/\/amzn.to\/4iYPwNX\">l\u00e0<\/a> pour \u00eatre pr\u00e9cis. Il en reste pas moins qu&rsquo;il subsiste la probl\u00e9matique du flux <strong>HDMI<\/strong> qui est prot\u00e9g\u00e9 en sortie de la box au format <a href=\"https:\/\/fr.wikipedia.org\/wiki\/High-bandwidth_Digital_Content_Protection\">HDCP<\/a>. En fait il existe des splitters <strong>HDMI<\/strong> qui permettent de faire sauter cette protection, celui que j&rsquo;utilise n&rsquo;existe plus depuis des ann\u00e9es, mais pour m\u00e9moire c&rsquo;est un  <strong>HDelite HDMI splitter 3D 2 ports<\/strong> qui ressemble \u00e0 \u00e7a :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/hdelite.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"216\" height=\"146\" src=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/hdelite.jpg?resize=216%2C146&#038;ssl=1\" alt=\"\" class=\"wp-image-6653\"\/><\/a><\/figure>\n<\/div>\n\n\n<p>Je ne peux vous conseiller d&rsquo;autres splitters, mais il faudra veiller qu&rsquo;ils soient compatibles avec la version de HDMI renvoy\u00e9e par la box. <\/p>\n\n\n\n<p>Le sch\u00e9ma du  branchement r\u00e9seau est ci-dessous, le splitter s&rsquo;intercale entre la box et le boitier de capture vid\u00e9o, tout l&rsquo;enregistrement se fait maintenant sur un PC branch\u00e9 en <strong>USB<\/strong> contrairement \u00e0 mon ancien AverMedia qui disposait d&rsquo;un enregistrement int\u00e9gr\u00e9.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/reseau-video.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"306\" height=\"444\" src=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/reseau-video.jpg?resize=306%2C444&#038;ssl=1\" alt=\"\" class=\"wp-image-6654\" srcset=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/reseau-video.jpg?w=306&amp;ssl=1 306w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/reseau-video.jpg?resize=207%2C300&amp;ssl=1 207w\" sizes=\"auto, (max-width: 306px) 100vw, 306px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p>Maintenant sur le PC il existe plusieurs moyens d&rsquo;enregistrer, beaucoup de personnes sous Linux utilisent <a href=\"https:\/\/obsproject.com\/\">OBS Studio<\/a> qui reconnait tr\u00e8s bien ces dispositifs de capture vid\u00e9o USB, j&rsquo;ai opt\u00e9 sur une solution plus simple bas\u00e9e sur <a href=\"https:\/\/ffmpeg.org\/\/\">ffmpeg<\/a>. <\/p>\n\n\n\n<p>Je pr\u00e9cise tout de suite pour ceux qui auraient quelques craintes sur la l\u00e9galit\u00e9 de ce dispositif, je vous invite \u00e0 lire ce <a href=\"https:\/\/olivier.hoarau.org\/?p=5584\">post sur l\u2019exception de copie priv\u00e9e<\/a>.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Revenons \u00e0 des consid\u00e9rations plus techniques, tout d&rsquo;abord quand on le branche sur le PC, <strong>systemd<\/strong> me renvoie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>d\u00e9c. 20 19:15:53 cilaos.kervao.fr kernel: usbcore: registered new interface driver snd-usb-audio\nd\u00e9c. 20 19:15:53 cilaos.kervao.fr mtp-probe&#91;19296]: checking bus 2, device 2: \"\/sys\/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-6\"\nd\u00e9c. 20 19:15:53 cilaos.kervao.fr mtp-probe&#91;19296]: bus: 2, device: 2 was not an MTP device\nd\u00e9c. 20 19:15:53 cilaos.kervao.fr systemd&#91;3141]: Reached target sound.target.\nd\u00e9c. 20 19:15:54 cilaos.kervao.fr wireplumber&#91;3158]: s-monitors-utils: skipping device libcamera:\\_SB_.PCI0.XHC_.RHUB.SS06-6:1.0-345f:2131<\/code><\/pre>\n\n\n\n<p>Un <strong>lsusb<\/strong> donnera<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bus 002 Device 002: ID 345f:2131 MACROSILICON MiraBox Video Capture<\/code><\/pre>\n\n\n\n<p>Et la commande <strong>v4l2-ctl &#8211;list-devices <\/strong>listera les fichiers sp\u00e9ciaux vid\u00e9o du p\u00e9riph\u00e9rique pour pouvoir y acc\u00e9der :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MiraBox Video Capture: MiraBox  (usb-0000:00:14.0-6):\n        \/dev\/video2\n        \/dev\/video3\n        \/dev\/media1\n\nIntegrated Camera: Integrated C (usb-0000:00:14.0-8):\n        \/dev\/video0\n        \/dev\/video1\n        \/dev\/media0<\/code><\/pre>\n\n\n\n<p>Le p\u00e9riph\u00e9rique vid\u00e9o est identifi\u00e9 sous le terme <strong>Mirabox<\/strong> et accessible via<strong> \/dev\/video2<\/strong>. La commande <strong>arecord -l<\/strong> donne le num\u00e9ro de la carte audio pour avoir le son :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>**** List of CAPTURE Hardware Devices ****\ncard 0: PCH &#91;HDA Intel PCH], device 0: ALC298 Analog &#91;ALC298 Analog]\n  Subdevices: 1\/1\n  Subdevice #0: subdevice #0\ncard 1: Capture &#91;MiraBox Video Capture], device 0: USB Audio &#91;USB Audio]\n  Subdevices: 1\/1\n  Subdevice #0: subdevice #0<\/code><\/pre>\n\n\n\n<p>Le p\u00e9riph\u00e9rique audio sera accessible via<strong> hw,1<\/strong>.  Pour visualiser la vid\u00e9o (sans le son), on tapera <strong>ffplay -f v4l2 -i \/dev\/video2<\/strong> et pour le son (sans la vid\u00e9o) <strong>ffplay -f alsa -i hw:1<\/strong>.  Ces fichiers sp\u00e9ciaux audio et vid\u00e9o ne sont pas toujours les m\u00eames. Pour l&rsquo;enregistrement en utilisant le conteneur mp4 et le codec vid\u00e9o H264 la commande \u00e0 taper sera :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ffmpeg -f alsa -i hw:1 -f video4linux2 -i \/dev\/video2 -vcodec h264 -preset ultrafast -max_muxing_queue_size 9999 essai.mp4<\/code><\/pre>\n\n\n\n<p>L&rsquo;option <strong>max_muxing_queue_size<\/strong> est mise pour contrer l&rsquo;erreur <strong>Too many packets buffered for output stream<\/strong>. Le r\u00e9sultat de l&rsquo;enregistrement donne :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Input #0, alsa, from 'hw:1':\n  Duration: N\/A, start: 1734898311.920705, bitrate: 1536 kb\/s\n  Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb\/s\nInput #1, video4linux2,v4l2, from '\/dev\/video2':\n  Duration: N\/A, start: 208.942297, bitrate: 1990656 kb\/s\n  Stream #1:0: Video: rawvideo (YUY2 \/ 0x32595559), yuyv422, 1920x1080, 1990656 kb\/s, 60 fps, 60 tbr, 1000k tbn\nStream mapping:\n  Stream #1:0 -&gt; #0:0 (rawvideo (native) -&gt; h264 (libx264))\n  Stream #0:0 -&gt; #0:1 (pcm_s16le (native) -&gt; aac (native))\nPress &#91;q] to stop, &#91;?] for help\n&#91;libx264 @ 0x284a08c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2\n&#91;libx264 @ 0x284a08c0] profile High 4:2:2, level 4.2, 4:2:2, 8-bit\n&#91;libx264 @ 0x284a08c0] 264 - core 164 - H.264\/MPEG-4 AVC codec - Copyleft 2003-2024 - http:\/\/www.videolan.org\/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0\nOutput #0, mp4, to '\/ginette\/video\/essai.mp4':\n  Metadata:\n    encoder         : Lavf61.1.100\n  Stream #0:0: Video: h264 (avc1 \/ 0x31637661), yuv422p(progressive), 1920x1080, q=2-31, 60 fps, 15360 tbn\n      Metadata:\n        encoder         : Lavc61.3.100 libx264\n      Side data:\n        cpb: bitrate max\/min\/avg: 0\/0\/0 buffer size: 0 vbv_delay: N\/A\n  Stream #0:1: Audio: aac (LC) (mp4a \/ 0x6134706D), 48000 Hz, stereo, fltp, 128 kb\/s\n      Metadata:\n        encoder         : Lavc61.3.100 aac\n&#91;out#0\/mp4 @ 0x2849f700] video:6438195KiB audio:122390KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.212900%\nframe=468000 fps= 60 q=-1.0 Lsize= 6574553KiB time=02:10:00.00 bitrate=6905.0kbits\/s dup=16 drop=14626 speed=   1x\n&#91;libx264 @ 0x284a08c0] frame I:1872  Avg QP:16.84  size:145122\n&#91;libx264 @ 0x284a08c0] frame P:466128 Avg QP:19.62  size: 13561\n&#91;libx264 @ 0x284a08c0] mb I  I16..4: 100.0%  0.0%  0.0%\n&#91;libx264 @ 0x284a08c0] mb P  I16..4:  3.2%  0.0%  0.0%  P16..4: 24.2%  0.0%  0.0%  0.0%  0.0%    skip:72.6%\n&#91;libx264 @ 0x284a08c0] coded y,uvDC,uvAC intra: 20.6% 41.3% 5.2% inter: 9.1% 11.2% 0.4%\n&#91;libx264 @ 0x284a08c0] i16 v,h,dc,p: 51% 21% 14% 14%\n&#91;libx264 @ 0x284a08c0] i8c dc,h,v,p: 46% 16% 26% 11%\n&#91;libx264 @ 0x284a08c0] kb\/s:6761.75\n&#91;aac @ 0x284a4f00] Qavg: 1717.494<\/code><\/pre>\n\n\n\n<p>Les options du preset <strong>ultrafast<\/strong> du codec vid\u00e9o <strong>H264<\/strong> apparaissent dans le d\u00e9tail de la commande, il faut \u00e9ventuellement se r\u00e9f\u00e9rer \u00e0 la <a href=\"https:\/\/trac.ffmpeg.org\/wiki\/Encode\/H.264\">page sur le codec H264<\/a> sur le site de <strong>ffmpeg<\/strong>. <\/p>\n\n\n\n<p>Voil\u00e0 un script que j&rsquo;ai appel\u00e9 <strong>record<\/strong> qui va d&rsquo;abord renvoyer les r\u00e9sultats de commande pour bien identifier les sorties vid\u00e9o et audio du p\u00e9riph\u00e9rique et les modifier au besoin, puis il faudra entrer la dur\u00e9e d&rsquo;enregistrement et le nom du fichier.<\/p>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"sh\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">#!\/bin\/bash\necho \"**********************************************\"\necho \"*                                            *\"\necho \"*  Enregistrement flux video USB             *\"\necho \"*                                            *\"\necho \"**********************************************\"\necho \"\"\necho \"R\u00e9sultat commande arecord -l\"\necho \"\"\narecord -l\nnumcarteaudio=1\necho \"\"\nread -p \"Num\u00e9ro de la carte audio (par d\u00e9faut 1) :\" newnumcarteaudio\n[ -n \"$newnumcarteaudio\" ] &amp;&amp; numcarteaudio=$newnumcarteaudio\necho \"\"\necho \"R\u00e9sultat commande v4l2-ctl --list-devices\"\necho \"\"\nv4l2-ctl --list-devices\nnumcartevideo=0\nread -p \"Num\u00e9ro de la carte vid\u00e9o (par d\u00e9faut 0) :\" newnumcartevideo\n[ -n \"$newnumcartevideo\" ] &amp;&amp; numcartevideo=$newnumcartevideo\nread -p \"Dur\u00e9e (seconde par d\u00e9faut, format hh:mm:ss) : \" duree\nread -p  \"Nom du fichier (extension mp4 par d\u00e9faut) : \" nom \nnomfile=\"\/ginette\/video\/${nom}.mp4\"\ncartevideo=\"\/dev\/video${numcartevideo}\"\ncarteaudio=\"hw:${numcarteaudio}\"\nheure=$(date +%H:%M:%S)\necho \"\"\necho \"Enregistrement du fichier $nomfile \u00e0 partir de la carte video $cartevideo et de la carte audio $carteaudio, dur\u00e9e $duree, d\u00e9but d'enregistrement $heure\"\n\/usr\/local\/bin\/ffmpeg -hide_banner -f alsa -i $carteaudio -f video4linux2 -i $cartevideo -vcodec h264 -preset ultrafast -max_muxing_queue_size 9999 -y -t $duree $nomfile<\/pre><\/div>\n\n\n\n<p>J&rsquo;estime que la qualit\u00e9 d&rsquo;enregistrement est largement acceptable car pour un film de 2h, cela me donne 10Go d&rsquo;enregistrement \u00e0 peu pr\u00e8s. J&rsquo;ai tent\u00e9 \u00e9galement un enregistrement direct avec le codec <strong>HEVC<\/strong>, mais \u00e7a demande trop de ressource. Je fais face \u00e9galement \u00e0 un probl\u00e8me non encore r\u00e9solu, je ne peux lancer qu&rsquo;en enregistrement lors d&rsquo;une session, sinon j&rsquo;ai l&rsquo;erreur <strong>Dequeued v4l2 buffer contains corrupted data (0 bytes)<\/strong> qui n\u00e9cessite que je reboote le PC.<\/p>\n\n\n\n<p>Le d\u00e9tail pour le r\u00e9encodage en <strong>HEVC<\/strong> sous <strong>avidemux<\/strong> est donn\u00e9 <a href=\"https:\/\/www.funix.org\/fr\/linux\/index.php?ref=conversion#reencodage\">ici<\/a>, cela me donne des fichiers entre 1 et 2Go pour 1h30, 2h de dur\u00e9e \u00e0 peu pr\u00e8s.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Enregistrer un flux vid\u00e9o d&rsquo;une box internet avec une dispositif de capture vid\u00e9o USB<\/p>\n","protected":false},"author":4,"featured_media":6624,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false,"_share_on_mastodon":"0"},"categories":[5],"tags":[105],"class_list":["post-6651","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-logiciels-libres","tag-multimedia"],"share_on_mastodon":{"url":"https:\/\/mastodon.social\/@funix\/113747011361136715","error":""},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/installation-video.jpg?fit=1500%2C1023&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/peOjJ-1Jh","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6651"}],"version-history":[{"count":6,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6651\/revisions"}],"predecessor-version":[{"id":6802,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/6651\/revisions\/6802"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/media\/6624"}],"wp:attachment":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}