URL: https://linuxfr.org/users/cyplp/journaux/extraire-les-vid%C3%A9os-dun-pdf Title: Extraire les vidéos d'un pdf Authors: Cyprien Le Pannérer Date: 2011年05月16日T20:45:40+02:00 License: CC By-SA Tags: pdf, astuce et vidéo Score: 31 J'ai acheté un pdf qui contenait des vidéos. J'ai déja croisé des pdf avec vidéos mais il s'agissait jusqu'a présent de vidéos qui étaient dans des fichiers externes au fichier pdf. Aucun lecteur pdf que j'ai testé sous linux n'arrivait à lire ces vidéos (pas même acroread). Un rapide essais sous win me prouve que les vidéos existent et sont lisibles. J'ai donc décidé de les extraire du pdf sauf qu'aucun utilitaire ne permet de le faire. Comme je n'ai pas trouvé de méthode sur internet pour le faire, j'écris ici la méthode qui m'a permit (grâce à l'aide d'un collègue) d'extraire les vidéos. À l'aide de pdfedit, j'ai trouvé que l'extention des des vidéos est m4v (là j'ai un trou ds ma méthode car je sais plus comment j'ai fait et j'ignore si c'est standard). un coup de grep me permet de repérer grossierement les vidéos : ```bash $ grep -abe "\.m4v" plop.pdf <>>>streamckgroundAlpha=0.75&volume=1.00)>> <>>>stream <>>>streamckgroundAlpha=0.75&volume=1.00)>> <>>>stream <>>>streamBackgroundAlpha=0.75&volume=1.00)>> <>>>stream <>>>streamnBackgroundAlpha=0.75&volume=1.00)>> <>>>stream ``` en lisant le fichier avec vim, le premier est lecteur flash et le second est la vidéo a proprement parler : ``` 941 0 obj^M<>/F(ebook introduction.m4v)/Type/Filespec/UF(ebook introduction.m4v)>>^Mendobj^M942 0 obj^M<<80>^XO^O<9a>\r͹^\<93>)/CreationDate(D:20100830203900-05'00')/ModDate(D:20100830203904-05'00')/Size 36291441>>>>stream ``` rapidement : - 941 0 obj est la référence de l'objet pdf, - 36291441/Filter/FlateDecode/Length signifie que l'objet compressé zlib, - /Size 36291441 : l'objet fait 36291441 octets, - l'objet commence juste après>>>>stream\r. À l'aide de hexedit, on cherche 2eme occurence de la chaine introduction.m4v (tab puis ctr+S) : la première est le lecteur flash. ``` 40AC24AC 32 39 31 34 34 31 2F 46 69 6C 74 65 72 2F 46 6C 61 74 65 44 65 63 6F 64 65 2F 4C 65 6E 67 74 68 20 33 36 32 291441/Filter/FlateDecode/Length 362 40AC24D0 36 38 37 30 38 2F 50 61 72 61 6D 73 3C 3C 2F 43 68 65 63 6B 53 75 6D 28 AF 80 18 4F BB A2 0F 9A 5C 72 D8 C9 68708/Params<>>>stream..H...{ ``` Le caractère H est le premier octet de la vidéo, hexedit nous donne la position 0x40AC255B. L'affaire est dans le sac avec python : ```python>>> import zlib>>> pdf = open('plop.pdf', 'rb')>>> pdf.seek(0x40AC255B)>>> zcontent = pdf.read(36291441)>>> content = zlib.decompress(zcontent)>>> video = open('introduction.m4v', 'wb')>>> video.write(content)>>> video.close() ``` ```bash $ file introduction.m4v introduction.m4v: ISO Media, MPEG v4 system, iTunes AVC-LC ``` voila y a pu qu'a se taper toutes les vidéos une par une...

AltStyle によって変換されたページ (->オリジナル) /