Код: Выделить всё
from pathlib import Path
import pydicom
in_dcm_filename: str = ...
out_mp4_filename: str = ...
ds = pydicom.dcmread(in_dcm_filename)
Path(out_mp4_filename).write_bytes(ds.PixelData[16:]) # 16-byte offset necessary
Полная версия
У меня есть несколько файлов DICOM, содержащих хирургические видеопотоки MPEG-4 (синтаксис передачи UID 1.2.840.10008.1.2.4.102 – MPEG-4 AVC/H.264 High Profile/Level 4.1< /эм>). Я хотел экспортировать видеопотоки из файлов DICOM для облегчения обработки последующих задач.
После небольшого поиска в Google я нашел следующее обсуждение, предлагающее использование dcmdump из DCMTK следующим образом (который мне удалось воспроизвести):
- Запустите dcmdump +P 7fe0,0010 +W .
- Из полученных двух файлов в : mpeg4.dcm.0.raw и mpeg4.dcm.1.raw , отбросьте первый файл размером 0 байт и сохраните второй (возможно, изменив его суффикс на .mp4), который представляет собой обычный воспроизводимый видеофайл.
Код: Выделить всё
$ hd ./dcmdump.mp4 | head
00000000 00 00 00 20 66 74 79 70 69 73 6f 6d 00 00 02 00 |... ftypisom....|
00000010 69 73 6f 6d 69 73 6f 32 61 76 63 31 6d 70 34 31 |isomiso2avc1mp41|
00000020 00 00 00 08 66 72 65 65 00 ce 97 1d 6d 64 61 74 |....free....mdat|
...
$ hd ./pydicom.mp4 | head
00000000 fe ff 00 e0 00 00 00 00 fe ff 00 e0 3e bc ce 00 |............>...|
00000010 00 00 00 20 66 74 79 70 69 73 6f 6d 00 00 02 00 |... ftypisom....|
00000020 69 73 6f 6d 69 73 6f 32 61 76 63 31 6d 70 34 31 |isomiso2avc1mp41|
...
Итак, еще раз мой вопрос: откуда берутся эти 16 дополнительных байтов, каково их значение и можно ли их просто удалить?
¹) < strong>Обновление: Оглядываясь назад, я должен был заподозрить подозрения из-за двух файлов, созданных dcmdump.
Подробнее здесь: https://stackoverflow.com/questions/788 ... dicom-file