Question

Videos created with Camtasia can be shared on the web by exporting the project for the TechSmith Smart Player. The video is exported in the "H264 - MPEG-4 AVC (part10) (avc1)" codec and the export also includes other custom XML, JavaScript and SWF files used by the TechSmith Smart Player.

These custom files are also "burnt" into the video itself. For example the contents of the XML file can be viewed when opening the MP4 video in a text editor. This allows other services to only ask for the MP4 file when uploading Camtasia videos.

Therefore my question is how do you extract text and binary files from a MP4 video file? For this project I am limited to Java but I am happy to call an external executable as well.

I tried the "-dump_attachment" option in FFmpeg but that didn't work and I am out of ideas.

C:\Users\Desktop>ffmpeg -dump_attachment:t "" -i getting-started-project.mp4
ffmpeg version N-57448-gc78a416 Copyright (c) 2000-2013 the FFmpeg developers
  built on Oct 26 2013 18:08:54 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aa
cenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp
ack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 47.101 / 52. 47.101
  libavcodec     55. 38.101 / 55. 38.101
  libavformat    55. 19.104 / 55. 19.104
  libavdevice    55.  5.100 / 55.  5.100
  libavfilter     3. 89.100 /  3. 89.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'getting-started-project.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-10-24 15:53:19
    artist          :
    description     :
    title           : Untitled
  Duration: 00:05:41.12, start: 0.000000, bitrate: 314 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv), 6
40x360 [SAR 1:1 DAR 16:9], 185 kb/s, 30 fps, 30 tbr, 30k tbn, 60 tbc (default)
    Metadata:
      creation_time   : 2013-10-24 15:53:19
      handler_name    : Mainconcept MP4 Video Media Handler
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 12
5 kb/s (default)
    Metadata:
      creation_time   : 2013-10-24 15:53:19
      handler_name    : Mainconcept MP4 Sound Media Handler
 At least one output file must be specified

Update: It appears the XML is contained within a custom UUID atom and I just need a way of extracting that.

Thanks

Was it helpful?

Solution

Managed to find a way to access the UUID Atom/Box by making use of the mp4parser project

IsoFile isoFile = new IsoFile("project.mp4");
UserBox userbox = isoFile.getBoxes(UserBox.class).get(0);
System.out.println(new String(userbox.getData()));
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top