
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://kb.speeddemosarchive.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://kb.speeddemosarchive.com/index.php?action=history&amp;feed=atom&amp;title=Anri-chan%2FSource%2Fmp4nerf.c</id>
		<title>Anri-chan/Source/mp4nerf.c - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://kb.speeddemosarchive.com/index.php?action=history&amp;feed=atom&amp;title=Anri-chan%2FSource%2Fmp4nerf.c"/>
		<link rel="alternate" type="text/html" href="https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/mp4nerf.c&amp;action=history"/>
		<updated>2026-05-19T07:08:42Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.9</generator>

	<entry>
		<id>https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/mp4nerf.c&amp;diff=2029&amp;oldid=prev</id>
		<title>Ballofsnow at 16:12, 18 July 2007</title>
		<link rel="alternate" type="text/html" href="https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/mp4nerf.c&amp;diff=2029&amp;oldid=prev"/>
				<updated>2007-07-18T16:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 16:12, 18 July 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;code&lt;/del&gt;&amp;gt;&amp;lt;nowiki&amp;gt;/*&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/ins&gt;&amp;gt;&amp;lt;nowiki&amp;gt;/*&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; for disabling audio commentary tracks in MP4 streams&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; for disabling audio commentary tracks in MP4 streams&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 142:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 142:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; printf (&amp;quot;By default, the file is scanned and no changes are made.\n&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; printf (&amp;quot;By default, the file is scanned and no changes are made.\n&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; printf (&amp;quot;Use the -x switch to force changes to the file.\n&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; printf (&amp;quot;Use the -x switch to force changes to the file.\n&amp;quot;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;code&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ballofsnow</name></author>	</entry>

	<entry>
		<id>https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/mp4nerf.c&amp;diff=2021&amp;oldid=prev</id>
		<title>B'man: New page: &lt;code&gt;&lt;nowiki&gt;/*    for disabling audio commentary tracks in MP4 streams    author: DJ Grenola   date: 17 July 2007   license: none (public domain)   target: win32 (MINGW), recommend using...</title>
		<link rel="alternate" type="text/html" href="https://kb.speeddemosarchive.com/index.php?title=Anri-chan/Source/mp4nerf.c&amp;diff=2021&amp;oldid=prev"/>
				<updated>2007-07-18T15:49:26Z</updated>
		
		<summary type="html">&lt;p&gt;New page: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/*    for disabling audio commentary tracks in MP4 streams    author: DJ Grenola   date: 17 July 2007   license: none (public domain)   target: win32 (MINGW), recommend using...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;/*&lt;br /&gt;
&lt;br /&gt;
  for disabling audio commentary tracks in MP4 streams&lt;br /&gt;
&lt;br /&gt;
  author: DJ Grenola&lt;br /&gt;
  date: 17 July 2007&lt;br /&gt;
  license: none (public domain)&lt;br /&gt;
  target: win32 (MINGW), recommend using the free IDE from bloodshed.net&lt;br /&gt;
  version: beta 0.1&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#define LARGE_FILE_SUPPORT&lt;br /&gt;
&lt;br /&gt;
#ifdef LARGE_FILE_SUPPORT&lt;br /&gt;
  /* not necessary for mingw/win32 but will probably become so if we start&lt;br /&gt;
     trying to compile it on linux and friends */&lt;br /&gt;
  #define _FILE_OFFSET_BITS 64&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* #define VERBOSE */&lt;br /&gt;
&lt;br /&gt;
#define CHECKBYTES_LEN 8&lt;br /&gt;
#define CHECKBYTES     { 0x74, 0x6B, 0x68, 0x64, 0x00, 0x00, 0x00, 0x01 }&lt;br /&gt;
#define REPBYTES       { 0x74, 0x6B, 0x68, 0x64, 0x00, 0x00, 0x00, 0x00 }&lt;br /&gt;
#define NUM_TO_SKIP    2&lt;br /&gt;
#define BUFSIZE        1024*1024&lt;br /&gt;
&lt;br /&gt;
#ifdef LARGE_FILE_SUPPORT&lt;br /&gt;
  #define FOPEN fopen64&lt;br /&gt;
  #define FSEEK fseeko64&lt;br /&gt;
  #define FTELL ftello64&lt;br /&gt;
  #define OFF_T off64_t&lt;br /&gt;
#else&lt;br /&gt;
  #define FOPEN fopen&lt;br /&gt;
  #define FSEEK fseek&lt;br /&gt;
  #define FTELL ftell&lt;br /&gt;
  #define OFF_T int&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
typedef long long int s64;&lt;br /&gt;
&lt;br /&gt;
void usage(char *argv0);&lt;br /&gt;
&lt;br /&gt;
unsigned char checkbytes[CHECKBYTES_LEN]=CHECKBYTES;&lt;br /&gt;
unsigned char repbytes[CHECKBYTES_LEN]=REPBYTES;&lt;br /&gt;
unsigned char buffer[BUFSIZE];&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char **argv) {&lt;br /&gt;
  FILE *f;&lt;br /&gt;
  unsigned int matches=0;&lt;br /&gt;
  unsigned int bufstart=0;&lt;br /&gt;
  unsigned int bytes_to_read;&lt;br /&gt;
  unsigned int error=0;&lt;br /&gt;
  s64 br;&lt;br /&gt;
  OFF_T pos=0,tmp64;&lt;br /&gt;
  char *fname=NULL;&lt;br /&gt;
  printf (&amp;quot;MP4 audio track disabler\n&amp;quot;);&lt;br /&gt;
  printf (&amp;quot;beta 0.1, DJ Grenola\n\n&amp;quot;);&lt;br /&gt;
  printf (&amp;quot;This software comes with no warranty.\n\n&amp;quot;);&lt;br /&gt;
  if ((argc!=2 &amp;amp;&amp;amp; argc!=3) || (argc==3 &amp;amp;&amp;amp; strcmp(argv[1],&amp;quot;-x&amp;quot;))) {&lt;br /&gt;
    usage(argv[0]);&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  fname=argv[argc-1];&lt;br /&gt;
  if ((f=FOPEN(fname,&amp;quot;r+b&amp;quot;))==NULL) {&lt;br /&gt;
    printf (&amp;quot;[-] Failed to open file \&amp;quot;%s\&amp;quot;.\n&amp;quot;, fname);&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  printf (&amp;quot;[+] Using %u KiB chunks.\n&amp;quot;, BUFSIZE/1024);&lt;br /&gt;
  printf (&amp;quot;[+] Scanning file \&amp;quot;%s\&amp;quot;.\n&amp;quot;, fname);&lt;br /&gt;
  while (~0) {&lt;br /&gt;
    int i;&lt;br /&gt;
    bytes_to_read=BUFSIZE-bufstart;&lt;br /&gt;
    br=fread(buffer+bufstart,1,bytes_to_read,f);&lt;br /&gt;
    pos+=br;&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
    printf (&amp;quot;[+] Read %llu bytes.\n&amp;quot;, pos);&lt;br /&gt;
#endif&lt;br /&gt;
    for (i=0;i&amp;lt;br+bufstart;i++) {&lt;br /&gt;
      if (!memcmp(checkbytes,buffer+i,CHECKBYTES_LEN)) {&lt;br /&gt;
        matches++;&lt;br /&gt;
        printf (&amp;quot;[+] Match at offset 0x%0llx&amp;quot;, pos-br+(i-bufstart));&lt;br /&gt;
        if (argc==2) /* dummy mode */&lt;br /&gt;
          printf (&amp;quot;, no action taken.\n&amp;quot;);&lt;br /&gt;
        else {&lt;br /&gt;
          if (matches&amp;lt;=NUM_TO_SKIP)&lt;br /&gt;
            printf (&amp;quot;, ignored.\n&amp;quot;);&lt;br /&gt;
          else {&lt;br /&gt;
            printf (&amp;quot;, attempting overwrite ...\n&amp;quot;);&lt;br /&gt;
            if (matches&amp;gt;NUM_TO_SKIP) {&lt;br /&gt;
              /* FIXME: this is kind of dodgy because I don't know if off64_t&lt;br /&gt;
                 can be relied upon to be signed ... it works now, but in the&lt;br /&gt;
                 future ? */&lt;br /&gt;
              tmp64=-br+(i-bufstart);&lt;br /&gt;
              if (FSEEK(f,pos+tmp64,SEEK_SET)==-1) {&lt;br /&gt;
                error=3;&lt;br /&gt;
                printf (&amp;quot;[-] Error seeking to offset.\n&amp;quot;);&lt;br /&gt;
                goto lbl_end;&lt;br /&gt;
              }&lt;br /&gt;
              if (fwrite(repbytes,1,CHECKBYTES_LEN,f) != CHECKBYTES_LEN) {&lt;br /&gt;
                error=4;&lt;br /&gt;
                printf (&amp;quot;[-] Error writing replacement string.\n&amp;quot;);&lt;br /&gt;
                goto lbl_end;&lt;br /&gt;
              }&lt;br /&gt;
              /* put file pointer back (if necessary) */&lt;br /&gt;
              if (br==bytes_to_read) {&lt;br /&gt;
                if (FSEEK(f,pos,SEEK_SET)==-1) {&lt;br /&gt;
                  error=5;&lt;br /&gt;
                  printf (&amp;quot;[-] Error seeking to original position.\n&amp;quot;);&lt;br /&gt;
                  goto lbl_end;&lt;br /&gt;
                }&lt;br /&gt;
              }&lt;br /&gt;
              printf (&amp;quot;[+] Replaced successfully.\n&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    bufstart=CHECKBYTES_LEN-1;&lt;br /&gt;
    memmove(buffer,buffer+(BUFSIZE-(CHECKBYTES_LEN-1)),CHECKBYTES_LEN-1);&lt;br /&gt;
    if (br!=bytes_to_read)&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  lbl_end:&lt;br /&gt;
  if (ferror(f) || error) {&lt;br /&gt;
    /* FIXME: actually report some sort of useful error instead */&lt;br /&gt;
    printf (&amp;quot;[-] Erk. Something went wrong.\n&amp;quot;);&lt;br /&gt;
    fclose(f);&lt;br /&gt;
    return error?error:2;&lt;br /&gt;
  }&lt;br /&gt;
  fclose(f);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void usage(char *argv0) {&lt;br /&gt;
  printf (&amp;quot;Usage: %s [-x] &amp;lt;MP4 file&amp;gt;\n\n&amp;quot;, argv0);&lt;br /&gt;
  printf (&amp;quot;By default, the file is scanned and no changes are made.\n&amp;quot;);&lt;br /&gt;
  printf (&amp;quot;Use the -x switch to force changes to the file.\n&amp;quot;);&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>B'man</name></author>	</entry>

	</feed>