Perusal, Synthesis, Bliss

April 12, 2021: télécharger une vidéo sur une page du site de France Info (https://www.francetvinfo.fr)

Premier cas: audio et vidéo à la même adresse web

Depuis quelques années j’ai pris l’habitude de télécharger toute vidéo vue et de prendre des notes au visionnage. Pour ARTE j’utilise l’outil Qarte, et plus généralement sur Youtube et autres j’utilise l’excellent youtube-dl en ligne de commande. Il m’arrive de temps en temps d’utiliser Video DownloadHelper.
Aujourd’hui je regarde un court reportage sur la reconstruction de Notre Dame sur le site de France Info à l’adresse ici. youtube-dl ne marche pas directement:
$ youtube-dl -F "https://www.francetvinfo.fr/culture/patrimoine/incendie-de-notre-dame-de-paris/notre-dame-une-cathedrale-de-metal-pour-reconstruire-la-cathedrale_4368399.html"[francetvinfo.fr] notre-dame-une-cathedrale-de-metal-pour-reconstruire-la-cathedrale_4368399: Downloading webpage
ERROR: Unable to extract video id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
$ youtube-dl -U
youtube-dl is up-to-date (2021.04.07)
Et ce n’est pas mieux avec Video DownloadHelper (version 7.4.0 à ce jour):
video_downloadhelper_and_fragmented_video.png
L’option "Download" proposée ne fonctionne pas comme attendu, elle ne télécharge que le fragment sur lequel l’opération est réalisée.
video_downloadhelper_and_fragmented_video_2.png
Le problème est visiblement que la vidéo est "fragmentée" et qu’au moins dans ce cas-ci l’assemblage n’est pas géré. Cela semble confirmé ici:
DownlodHelper ne peut pas télécharger les vidéos à partir de Pluzz, car elles sont fragmentées.
En cliquant sur "Details", on obtient une valeur "url", mais qui ne donne non plus rien du tout avec youtube-dl (cette méthode alternative a déjà fonctionné il me semble):
$ youtube-dl -F "https://cloudingest.ftven.fr/e9eda23b43706/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA.ism/ZXhwPTE2MTgyMjI1OTB+YWNsPSUyZmU5ZWRhMjNiNDM3MDYlMmY3OTY4NWFiZS05YWZhLTExZWItYTA1NS0wMDBkM2EyNDI3YWJfbW9uZGVfVEEuaXNtKn5obWFjPTA4MWNkYTU5YzhlNTZlYWE2MDliNzIyNDQwMTYyYjI4NTUxNDk1ZjliZWRiZWVhZjM4NzZhZDcwNWUzNThjY2U=/dash/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA-video=950000.dash"
[generic] 79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA-video=950000: Requesting header
[info] Available formats for 79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA-video=950000:
format code  extension  resolution note
mp4          dash       unknown   

$ youtube-dl -f mp4 "https://cloudingest.ftven.fr/e9eda23b43706/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA.ism/ZXhwPTE2MTgyMjI1OTB+YWNsPSUyZmU5ZWRhMjNiNDM3MDYlMmY3OTY4NWFiZS05YWZhLTExZWItYTA1NS0wMDBkM2EyNDI3YWJfbW9uZGVfVEEuaXNtKn5obWFjPTA4MWNkYTU5YzhlNTZlYWE2MDliNzIyNDQwMTYyYjI4NTUxNDk1ZjliZWRiZWVhZjM4NzZhZDcwNWUzNThjY2U=/dash/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA-video=950000.dash"
[generic] 79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA-video=950000: Requesting header
ERROR: requested format not available
La solution que j’ai trouvée est d’utiliser l’extension YouTube & HLS Stream Sniper. A la lecture de la vidéo sur le site de France Info, il détecte deux fichiers "manifest.mpd"
stream_sniper.png
En cliquant sur l’un ou l’autre de ces fichiers les adresses correspondantes sont copiées dans le presse-papier:
https://cloudingest.ftven.fr/e9eda23b43706/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA.ism/ZXhwPTE2MTgyMjQyNjJ+YWNsPSUyZmU5ZWRhMjNiNDM3MDYlMmY3OTY4NWFiZS05YWZhLTExZWItYTA1NS0wMDBkM2EyNDI3YWJfbW9uZGVfVEEuaXNtKn5obWFjPWQ5YWYzNDNiNGZiYzEzY2I4YzUwYWJhMzc4MzlhYWFlM2QyMjExOGJmMDVkMjY1ODlkNTI1OTcxZjhkZTFhNTk=/manifest.mpd

https://cloudingest.ftven.fr/e9eda23b43706/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA.ism/manifest.mpd?hdnea=exp=1618203261~acl=%2fe9eda23b43706%2f79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA.ism*~hmac=8ed4e10dd82b951c49dbe4f42842e9d31210c94e7c6ef2c2bd95c0b9548d6fdb
L’une ou l’autre peut être utilisée avec Youtube-dl. Cependant, vidéo et audio sont séparés:
$ youtube-dl -F "https://cloudingest.ftven.fr/e9eda23b43706/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA.ism/ZXhwPTE2MTgyMjQyNjJ+YWNsPSUyZmU5ZWRhMjNiNDM3MDYlMmY3OTY4NWFiZS05YWZhLTExZWItYTA1NS0wMDBkM2EyNDI3YWJfbW9uZGVfVEEuaXNtKn5obWFjPWQ5YWYzNDNiNGZiYzEzY2I4YzUwYWJhMzc4MzlhYWFlM2QyMjExOGJmMDVkMjY1ODlkNTI1OTcxZjhkZTFhNTk=/manifest.mpd"
[generic] manifest: Requesting header
WARNING: Falling back on generic information extractor.
[generic] manifest: Downloading webpage
[generic] manifest: Extracting information
[info] Available formats for manifest:
format code      extension  resolution note
audio_fre=96000  m4a        audio only [fr] DASH audio   96k , m4a_dash container, mp4a.40.2 (48000Hz)
video=400000     mp4        384x216    DASH video  400k , mp4_dash container, avc1.42C01E, 25fps, video only
video=950000     mp4        640x360    DASH video  950k , mp4_dash container, avc1.4D401F, 25fps, video only
video=1400000    mp4        960x540    DASH video 1400k , mp4_dash container, avc1.4D401F, 25fps, video only
video=2000000    mp4        1280x720   DASH video 2000k , mp4_dash container, avc1.64001F, 25fps, video only (best)
Il faut donc "assembler" l’audio et la vidéo. Fort heureusement cela se fait très facilement avec youtube-dl:
$ youtube-dl --merge-output-format mp4 -o notre-dame-paris-france-info-12-avril-2021.mp4 -f video=950000+audio_fre=96000 "https://cloudingest.ftven.fr/e9eda23b43706/79685abe-9afa-11eb-a055-000d3a2427ab_monde_TA.ism/ZXhwPTE2MTgyMjQyNjJ+YWNsPSUyZmU5ZWRhMjNiNDM3MDYlMmY3OTY4NWFiZS05YWZhLTExZWItYTA1NS0wMDBkM2EyNDI3YWJfbW9uZGVfVEEuaXNtKn5obWFjPWQ5YWYzNDNiNGZiYzEzY2I4YzUwYWJhMzc4MzlhYWFlM2QyMjExOGJmMDVkMjY1ODlkNTI1OTcxZjhkZTFhNTk=/manifest.mpd"
[generic] manifest: Requesting header
WARNING: Falling back on generic information extractor.
[generic] manifest: Downloading webpage
[generic] manifest: Extracting information
[dashsegments] Total fragments: 126
[download] Destination: notre-dame-paris-france-info-12-avril-2021.fvideo=950000.mp4
[download] 100% of 27.95MiB in 00:11
[dashsegments] Total fragments: 126
[download] Destination: notre-dame-paris-france-info-12-avril-2021.mp4.faudio_fre=96000
[download] 100% of 2.92MiB in 00:25
[ffmpeg] Merging formats into "notre-dame-paris-france-info-12-avril-2021.mp4"
Deleting original file notre-dame-paris-france-info-12-avril-2021.fvideo=950000.mp4 (pass -k to keep)
Deleting original file notre-dame-paris-france-info-12-avril-2021.mp4.faudio_fre=96000 (pass -k to keep)
Comme on peut le voir il est utile de choisir le nom de la vidéo (avec son) finale, sinon un nom par défaut est proposé. Le résultat se lit parfaitement avec VLC.

Deuxième cas: audio et vidéo à des adresses web différentes

Comme exemple, voir la vidéo située ici. Video DownloadHelper donne plusieurs possibilités:
video_download_helper_ARTE.png
La première ligne correspond au son de la vidéo, la deuxième à la vidéo, et les quatres lignes suivantes contiennent seulement de la vidéo. La technique que j’ai utilisée est de télécharger l’audio, la vidéo, puis de joindre les deux avec mencoder:
$ youtube-dl -f mp4 "https://arte-cmafhls.akamaized.net/am/cmaf-webonly/103000/103900/103908-004-A_VOF/210520164550/medias/103908-004-A_aud_VOF.mp4"
[generic] 103908-004-A_aud_VOF: Requesting header
[download] Destination: 103908-004-A_aud_VOF-103908-004-A_aud_VOF.mp4
[download] 100% of 1.63MiB in 00:01

$ youtube-dl -f mp4 "https://arte-cmafhls.akamaized.net/am/cmaf-webonly/103000/103900/103908-004-A_VOF/210520164550/medias/103908-004-A_v720.mp4"
[generic] 103908-004-A_v720: Requesting header
[download] Destination: 103908-004-A_v720-103908-004-A_v720.mp4
[download] 100% of 24.29MiB in 00:16
$
Première tentative avec mencoder, inspirée de la solution donné ici:
$ mencoder -oac copy -ovc copy -audiofile 103908-004-A_aud_VOF-103908-004-A_aud_VOF.mp4 -o fichier_out.avi 103908-004-A_v720-103908-004-A_v720.mp4
MEncoder 1.3.0 (Debian), built with gcc-9 (C) 2000-2016 MPlayer Team
success: format: 0  data: 0x0 - 0x184b503
libavformat version 58.29.100 (external)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa712fac600]Protocol name not provided, cannot determine if input is local or a network protocol, buffers and access patterns cannot be configured optimally without knowing the protocol
[lavf] stream 0: video (h264), -vid 0
VIDEO:  [H264]  1280x720  24bpp  25.000 fps  1945.3 kbps (237.5 kbyte/s)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fa712fac600]Protocol name not provided, cannot determine if input is local or a network protocol, buffers and access patterns cannot be configured optimally without knowing the protocol
[lavf] stream 0: audio (aac), -aid 0, -alang fra
[V] filefmt:65536  fourcc:0x34363248  size:1280x720  fps:25.000  ftime:=0.0400
videocodec: framecopy (1280x720 24bpp fourcc=34363248)
Audio format 0x4134504d is incompatible with ’-oac copy’, please try ’-oac pcm’ instead or use ’-fafmttag’ to override it.
Exiting...
1        Command failure: error 1 !
$ echo $?
1
Code d’erreur égal à 1, cela n’a pas fonctionné. La deuxième tentative correspondant à la recommandation de mencoder est la bonne:
$ mencoder -oac pcm -ovc copy -audiofile 103908-004-A_aud_VOF-103908-004-A_aud_VOF.mp4 -o fichier_out.avi 103908-004-A_v720-103908-004-A_v720.mp4    
MEncoder 1.3.0 (Debian), built with gcc-9 (C) 2000-2016 MPlayer Team
success: format: 0  data: 0x0 - 0x184b503
libavformat version 58.29.100 (external)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f130097b600]Protocol name not provided, cannot determine if input is local or a network protocol, buffers and access patterns cannot be configured optimally without knowing the protocol
[lavf] stream 0: video (h264), -vid 0
VIDEO:  [H264]  1280x720  24bpp  25.000 fps  1945.3 kbps (237.5 kbyte/s)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f130097b600]Protocol name not provided, cannot determine if input is local or a network protocol, buffers and access patterns cannot be configured optimally without knowing the protocol
[lavf] stream 0: audio (aac), -aid 0, -alang fra
[V] filefmt:65536  fourcc:0x34363248  size:1280x720  fps:25.000  ftime:=0.0400
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
libavcodec version 58.54.100 (external)
AUDIO: 44100 Hz, 2 ch, floatle, 128.9 kbit/4.57% (ratio: 16113->352800)
Selected audio codec: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
videocodec: framecopy (1280x720 24bpp fourcc=34363248)
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Pos: 104.6s   2615f (100%)  0.00fps Trem:   0min  41mb  A-V:-0.053 [1946:1411]
Writing index...
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
Video stream: 1946.074 kbit/s  (243259 B/s)  size: 25444920 bytes  104.600 secs  2615 frames
Audio stream: 1411.200 kbit/s  (176400 B/s)  size: 18423808 bytes  104.443 secs
$ echo $?
0