简体   繁体   English

从mpeg视频中提取文件

[英]Extract files from mpeg video

Videos created with Camtasia can be shared on the web by exporting the project for the TechSmith Smart Player . 使用Camtasia创建的视频可以通过导出TechSmith智能播放器的项目在Web上共享。 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. 视频导出为“H264 - MPEG-4 AVC(part10)(avc1)”编解码器,导出还包括TechSmith智能播放器使用的其他自定义XML,JavaScript和SWF文件。

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. 例如,在文本编辑器中打开MP4视频时,可以查看XML文件的内容。 This allows other services to only ask for the MP4 file when uploading Camtasia videos. 这允许其他服务在上传Camtasia视频时仅询问MP4文件。

Therefore my question is how do you extract text and binary files from a MP4 video file? 因此,我的问题是如何从MP4视频文件中提取文本和二进制文件? For this project I am limited to Java but I am happy to call an external executable as well. 对于这个项目,我仅限于Java,但我也很乐意调用外部可执行文件。

I tried the "-dump_attachment" option in FFmpeg but that didn't work and I am out of ideas. 我在FFmpeg中尝试了“-dump_attachment”选项,但这不起作用,我没有想法。

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. 更新 :看起来XML包含在自定义UUID原子中,我只需要一种提取方式。

Thanks 谢谢

Managed to find a way to access the UUID Atom/Box by making use of the mp4parser project 通过使用mp4parser项目管理以找到访问UUID Atom / Box的方法

IsoFile isoFile = new IsoFile("project.mp4");
UserBox userbox = isoFile.getBoxes(UserBox.class).get(0);
System.out.println(new String(userbox.getData()));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM