아키시코를 아내에게 먹일 수 있지만 암호화 된 Fragmented mp4는 ffmpeg에 먹이지 않는 것이 좋을지도 모른다.

오늘의 작은 재료는



나누기와 아무래도 좋은 작은 재료입니다. 동영상 전달의 일이라도 하고 있지 않는 한, 전혀 관련되는 일은 없을 것이다.
그런 ffmpeg의 이야기.

정말 극히 드물지만


ffmpeg -i some.mp4

토카
ffprobe some.mp4

라든지 mp4의 정보를 조사하려고 했을 때에, 화각 정보등이 이상한 값으로 표시되는 경우가 있습니다.



이런 식으로. 왠지, 이 96x32라고 하는 화각은・・・.
덧붙여서 올바르게 표시되면



이런 느낌이 듭니다.
또한 제대로 표시되지 않는 mp4를 mp4box나 mediainfo에 먹여 보면 화각 정보가 올바르게 표시됩니다.

사실,



이 ffmpeg에서 화각 정보가 올바르게 표시되지 않는 mp4는 특정 DRM으로 암호화 된 MPEG-DASH 용 Fragmented mp4입니다.
그렇지만, 암호화는 영상 데이터 그 자체에 대해 행해지고 화각 정보가 들어 있는 Track Header Box (tkhd)는 암호화되지 않기 때문에
암호화 된 것만으로 올바르게 표시되지 않는 것은 이상한 이야기입니다.
암호화되어 있어도, mp4box나 mediainfo에서는 올바르게 화각 정보를 취득할 수 있군요.
도대체 무슨 일?

그런 이유로



힘차게 ffmpeg의 출력을 바라보면서(이 mp4는 사이즈가 2GB도 있으므로 대량으로 로그가 콘솔을 흘러 갑니다)
여러가지 조사한 결과 알았던 것은, ffmpeg는 mp4의 화각 정보를 Sequence Parameter Set (SPS)로부터 취득하고 있는 것 같다.
그리고 ffmpeg는 SPS가 mp4의 퍼스 중에 발견될 때마다 이전 SPS의 정보를 덮어쓰고 있는 것.

막히는 곳



보통의 mp4라면 SPS는 DecoderConfigrationRecord상에 존재하는 것만으로, 거기로부터 화각 정보를 꺼내 종료이었습니다만,
불행하게도이 mp4는 Fragmented mp4 이었기 때문에 각 조각의 동영상 데이터에 SPS가 포함되어 버렸습니다.
암호화 된 SPS는 구문 분석 할 수 없으므로 오류가 발생하여 원래의 올바른 SPS를 덮어 쓰지 않을 것입니다.
이것 또는 더욱 불행하게도, 정말로 극단적으로 암호화된 SPS의 퍼스에 성공해 버려 엄청 어색한 값으로 원래의 SPS가 덮어쓰여지고 있었다
라고 하는 것이 일의 진상입니다.

따라서 암호화 된 Fragmented mp4를 ffmpeg에 먹이면 좋지 않은 일이 발생할 수 있으므로 너무 먹지 않는 것이
좋을지도 모른다는 이야기였습니다.
또한, CommonEncryption (CENC)의 2nd Ed. 이후에서는 미디어 데이터 이외는 암호화하지 않는다, 라고 하는 일이 되어 있으므로 이번과 같은 것은
일어나지 않는다고 생각합니다.

좋은 웹페이지 즐겨찾기