[FFmpeg-user] Speeding up qt-faststart
Jan Ehrhardt
phpdev at ehrhardt.nl
Sun Sep 30 19:13:41 CEST 2012
qt-faststart is terribly slow when the input file and the output file
are on a slow disk like a SD card. By increasing the copy_buffer from
1K to 32M I decreased the processing time on a sample file from
1600 seconds to 4 seconds. The timing difference is during 'copying
rest of file'.
S:\SD_VIDEO\PRG001>e:\utils\qt-faststart 00005.mp4 5.mp4
ftyp 0 32
free 32 8
mdat 40 13744391
moov 13744431 141848
patching stco atom...
patching stco atom...
writing ftyp atom...
writing moov atom...
copying rest of file...
Execution time: 1576.259 s
S:\SD_VIDEO\PRG001>s:\utils\qt-faststart 00005.mp4 5.mp4
ftyp 0 32
free 32 8
mdat 40 13744391
moov 13744431 141848
patching stco atom...
patching stco atom...
writing ftyp atom...
writing moov atom...
copying rest of file...
Execution time: 3.846 s
Changes to qt-faststart.c are below. c is not ny native language,
so could somebody check the diff and commit it?
Jan
@@ -74,7 +74,7 @@
#define CO64_ATOM QT_ATOM('c', 'o', '6', '4')
#define ATOM_PREAMBLE_SIZE 8
-#define COPY_BUFFER_SIZE 1024
+#define COPY_BUFFER_SIZE 33554432
int main(int argc, char *argv[])
{
@@ -93,7 +93,7 @@
uint32_t offset_count;
uint64_t current_offset;
uint64_t start_offset = 0;
- unsigned char copy_buffer[COPY_BUFFER_SIZE];
+ unsigned char *copy_buffer = NULL;
int bytes_to_copy;
if (argc != 3) {
@@ -290,6 +290,11 @@
}
/* copy the remainder of the infile, from offset 0 -> last_offset - 1 */
+ copy_buffer = malloc(COPY_BUFFER_SIZE);
+ if (!copy_buffer) {
+ printf("could not allocate %"PRIu64" bytes for copy_buffer\n", COPY_BUFFER_SIZE);
+ goto error_out;
+ }
printf(" copying rest of file...\n");
while (last_offset) {
if (last_offset > COPY_BUFFER_SIZE)
More information about the ffmpeg-user
mailing list