Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

m4b-tool doesn't convert on RPi #156

Closed
xtinct101 opened this issue Sep 27, 2021 · 46 comments
Closed

m4b-tool doesn't convert on RPi #156

xtinct101 opened this issue Sep 27, 2021 · 46 comments

Comments

@xtinct101
Copy link

Hello,

I've been using m4b-tool for some time on my debian VM and it works like a charm.
In an effort to move it from my VM and have it online 24/7, I installed it on my RPi 4.

I used the docker install, I validated the m4b using;
docker run -it --rm -u $(id -u):$(id -g) -v "$(pwd)":/mnt m4b-tool --version
returns:
m4b-tool v.0.4.2

But when I try to use the merge command, I get this error everytime:
`== load input files ==
reading metadata and streaminfo for file /mnt/test/test.mp3
ffmpeg -hide_banner -i /mnt/test/test.mp3 -f ffmetadata -
/usr/local/bin/ffmpeg: line 1: syntax error: unexpected "("

/usr/local/bin/ffmpeg: line 1: syntax error: unexpected "("

ffmpeg -hide_banner -i /mnt/test/test.mp3 -f null -
/usr/local/bin/ffmpeg: line 1: syntax error: unexpected "("

/usr/local/bin/ffmpeg: line 1: syntax error: unexpected "("

cover not found or not specified
searching for description.txt in test
checking file test/description.txt, realpath:
file description.txt not found or too big
preparing conversion with 4 simultaneous jobs, please wait...
0 remaining / 1 total, preparing next task |
could not convert /mnt/test/test.mp3 to test-tmpfiles/1-test-finished.m4b
trace: #0 phar:///usr/local/bin/m4b-tool/src/library/M4bTool/Command/MergeCommand.php(479): M4bTool\Command\MergeCommand->convertInputFiles()
#1 phar:///usr/local/bin/m4b-tool/src/library/M4bTool/Command/MergeCommand.php(362): M4bTool\Command\MergeCommand->processInputFiles()
#2 phar:///usr/local/bin/m4b-tool/src/library/M4bTool/Command/MergeCommand.php(194): M4bTool\Command\MergeCommand->processFiles()
#3 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Command/Command.php(255): M4bTool\Command\MergeCommand->execute()
#4 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(908): Symfony\Component\Console\Command\Command->run()
#5 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(269): Symfony\Component\Console\Application->doRunCommand()
#6 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun()
#7 phar:///usr/local/bin/m4b-tool/bin/m4b-tool.php(32): Symfony\Component\Console\Application->run()
#8 /usr/local/bin/m4b-tool(10): require('phar:///usr/loc...')
#9 {main}`

Any help would be appreciated.

@xtinct101
Copy link
Author

I updated to the latest docker build and while it still doesn't work I am getting a different error.

INFO 1ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
DEBUG 2ms 'ffmpeg' '-hide_banner' '-version'
WARNING 17ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
DEBUG 17ms == load input files ==
NOTICE 19ms found 1 files to convert
DEBUG 20ms test.mp3
NOTICE 20ms skip cover extraction by user demand (--skip-cover)
NOTICE 23ms preparing conversion with 4 simultaneous jobs, please wait...
DEBUG 24ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' 'test/test.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-movflags' '+faststart' '-vn' '-b:a' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'libfdk_aac' '-f' 'mp4' '/tmp/m4b-tool/1-converting.m4b'
ERROR 43ms could not convert test/test.mp3 to /tmp/m4b-tool/1-finished.m4b
DEBUG 43ms trace: #0 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(522): M4bTool\Command\MergeCommand->convertInputFiles()
#1 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(423): M4bTool\Command\MergeCommand->processInputFiles()
#2 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(184): M4bTool\Command\MergeCommand->processFiles()
#3 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Command/Command.php(255): M4bTool\Command\MergeCommand->execute()
#4 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(1000): Symfony\Component\Console\Command\Command->run()
#5 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(271): Symfony\Component\Console\Application->doRunCommand()
#6 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(147): Symfony\Component\Console\Application->doRun()
#7 phar:///usr/local/bin/m4b-tool/bin/m4b-tool.php(44): Symfony\Component\Console\Application->run()
#8 /usr/local/bin/m4b-tool(10): require('phar:///usr/loc...')
#9 {main}

@djdembeck
Copy link

The docker isn't built for arm64, you'd have to ask @sandreas to make a build for that. Currently only amd64 and M1 are supported, as I recall.

@xtinct101
Copy link
Author

Thanks for the info djdembeck. I did however also try install it manually without docker and I still got the same issue.

If that's the case, @sandreas could you make a docker build that supports arm64?

@sandreas
Copy link
Owner

I have to investigate this... very busy atm but I'll try.

@rabelux
Copy link

rabelux commented Oct 21, 2021

I'm also getting this error (as far as I can tell)

@krejko
Copy link

krejko commented May 24, 2022

I am also getting this exact message on a RPi device as well:

could not convert /Chapter 01.mp3 to ./Chapter 01-finished.m4b
trace: #0 phar:///usr/local/bin/m4b-tool/src/library/M4bTool/Command/MergeCommand.php(479): M4bTool\Command\MergeCommand->convertInputFiles()
#1 phar:///usr/local/bin/m4b-tool/src/library/M4bTool/Command/MergeCommand.php(362): M4bTool\Command\MergeCommand->processInputFiles()
#2 phar:///usr/local/bin/m4b-tool/src/library/M4bTool/Command/MergeCommand.php(194): M4bTool\Command\MergeCommand->processFiles()
#3 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Command/Command.php(255): M4bTool\Command\MergeCommand->execute()
#4 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(908): Symfony\Component\Console\Command\Command->run()
#5 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(269): Symfony\Component\Console\Application->doRunCommand()
#6 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun()
#7 phar:///usr/local/bin/m4b-tool/bin/m4b-tool.php(32): Symfony\Component\Console\Application->run()
#8 /usr/local/bin/m4b-tool(10): require('phar:///usr/loc...')
#9 {main}

It seems similar to this issue but I don't think I am using Musicbrainz:
#118

Would be grateful if anyone has any progress or a solution to share. Thanks!

@sandreas
Copy link
Owner

sandreas commented May 24, 2022

Well, there might be a problem with the ffmpeg version. Explanation:

  • ffmpeg is an external binary, that is required by m4b-tool to convert files
  • ffmpeg has to be compiled for a specific architecture, so a x64 version won't work on RPi, which is arm or arm64
  • It seems that the RPi Version of m4b-tool tries to use the x64 version of ffmpeg and fails with a segfault

So, a solution might be to use an ffmpeg version from another (arm compatible) docker image. The relevant arguments are (see

ARG FFMPEG_IMAGE="mwader/static-ffmpeg:4.4.0"
):

  • FFMPEG_IMAGE: Name of the docker image to use
  • FFMPEG_PATH: Path of ffmpeg binary within the image
docker build . --build-arg FFMPEG_IMAGE=linuxserver/ffmpeg --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

If m4b-tool is used without docker, it might be helpful to download / replace a static ffmpeg version from:

https://github.com/eugeneware/ffmpeg-static/releases/tag/b5.0

Probably the

  • linux-arm.gz or
  • linux-arm64.gz

Important Note: I did not test this yet, it is a possible solution and may require some work to fix

@krejko
Copy link

krejko commented May 25, 2022

Thank you for the response.

I am pretty new to all these audio encoding tools, but I do remember that I had compiled my own version of ffmpeg, lib-fdkacc, and fdkacc using the following instructions from these links:

However, I was unaware that these came pre-compiled. Thanks for the link. I will try this out and report back if it resolves the problem.

@sandreas
Copy link
Owner

sandreas commented May 25, 2022

@krejko You may be very lucky, because @wader reported today, that his new ffmpeg Docker build is now multiarch and probably can be used for M1 / raspberry. This would solve all the problems.

@sandreas
Copy link
Owner

Ok, I'll updated the Dockerfile. Update your git and try to build the docker image on RPi, I assume this is fixed.

@krejko
Copy link

krejko commented May 28, 2022

I just cloned a new version of the repository and was trying to set up the docker container. However, I am encountering the following error. Appears to be related to static-ffmpeg incompatibility with arm. @sandreas @wader any ideas why this might be happening? Thanks in advance

pi@pi:~/m4b-tool$ sudo docker build . -t m4b-tool
Sending build context to Docker daemon 7.168kB
Step 1/22 : ARG FFMPEG_IMAGE="mwader/static-ffmpeg:5.0.1-3"
Step 2/22 : ARG FFMPEG_PATH="/ffmpeg"
Step 3/22 : FROM ${FFMPEG_IMAGE} as ffmpeg_binary
5.0.1-3: Pulling from mwader/static-ffmpeg
no matching manifest for linux/arm/v7 in the manifest list entries

Edit: I am seeing in this post that static-ffmpeg has only added arm64 and not armv7(?: not 100% sure on the naming of the 32bit arm arch). But I do know I am not running the 64 bit version of the PI operating system. Are there any plans for non-64 bit architectures to be added?

@sandreas
Copy link
Owner

@krejko
Did this one work for you?

docker build . --build-arg FFMPEG_IMAGE=linuxserver/ffmpeg --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

If so, I'll update the docs.

@krejko
Copy link

krejko commented May 29, 2022

@krejko Did this one work for you?

docker build . --build-arg FFMPEG_IMAGE=linuxserver/ffmpeg --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

If so, I'll update the docs.

Ah. I started to try then and got distracted. I will be traveling for the next week and a half but will try it when I have access to my pi when I get home. Sorry for the delay.

@sandreas
Copy link
Owner

Ah. I started to try then and got distracted. I will be traveling for the next week and a half but will try it when I have access to my pi when I get home. Sorry for the delay.

No reason to say sorry :-) Your feedback helps a lot to improve the project. Thank you.

@vakrolme
Copy link

vakrolme commented Jun 7, 2022

@krejko Did this one work for you?

docker build . --build-arg FFMPEG_IMAGE=linuxserver/ffmpeg --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

I've just tested this out on an arm/v7 (QNAP), it works, thanks.

Edit: Ah, I will not error, but it won't work either, because there's apparently no support for 32bit? Ok.

@sandreas
Copy link
Owner

sandreas commented Jun 8, 2022

Here is another one: https://hub.docker.com/r/collelog/ffmpeg. This should be the best alternative, because it is configured to use --enable-libfdk_aac, which produces highest audio quality. I'm thinking about switching to this in general, but mwader is taking care of his image much more regularly.

@wader Maybe it is wouth taking a look at https://github.com/collelog/ffmpeg? Looks pretty good to me and has nearly every arch that is available right now.

docker build . --build-arg FFMPEG_IMAGE=collelog/ffmpeg --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

If this does not work, be sure to choose the correct platform (https://hub.docker.com/r/collelog/ffmpeg/tags):

# raspberry pi 4 32bit
docker build . --build-arg FFMPEG_IMAGE=collelog/ffmpeg:4.4-alpine-rpi4-32 --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

# raspberry pi 4 64bit
docker build . --build-arg FFMPEG_IMAGE=collelog/ffmpeg:4.4-alpine-rpi4-64 --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

# raspberry pi 3
docker build . --build-arg FFMPEG_IMAGE=collelog/ffmpeg:4.4-alpine-rpi3 --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg -t m4b-tool

@vakrolme
Copy link

vakrolme commented Jun 8, 2022

I've tried out the collelog/ffmpeg:4.4-alpine-arm32v7 image, but I can't get to test whether the thing will actually run, as I still can't compile the MP4V2 (just as with linuxserver/ffmpeg). @sandreas would you please take a look?

Log

docker build . --build-arg FFMPEG_IMAGE=collelog/ffmpeg:4.4-alpine-arm32v7 --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg --build-arg M4B_TOOL_DOWNLOAD_LINK=https://github.com/sandreas/m4b-tool/files/8304864/m4b-tool.tar.gz -t m4b-tool --platform linux/arm/v7


---- COMPILE SANDREAS MP4V2 (for sort-title, sort-album and sort-author) ----
--2022-06-08 07:16:57--  https://github.com/enzo1982/mp4v2/archive/55d6018.zip
Resolving github.com (github.com)... 140.82.121.3
Connecting to github.com (github.com)|140.82.121.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/enzo1982/mp4v2/zip/55d601860a8c1e3fdefe298baee59da51b5b7b43 [following]
--2022-06-08 07:16:58--  https://codeload.github.com/enzo1982/mp4v2/zip/55d601860a8c1e3fdefe298baee59da51b5b7b43
Resolving codeload.github.com (codeload.github.com)... 140.82.121.9
Connecting to codeload.github.com (codeload.github.com)|140.82.121.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: 'mp4v2.zip'

     0K .......... .......... .......... .......... ..........  318K
    50K .......... .......... .......... .......... ..........  848K
   100K .......... .......... .......... .......... .......... 1.65M
   150K .......... .......... .......... .......... .......... 1.40M
   200K .......... .......... .......... .......... .......... 3.95M
   250K .......... .......... .......... .......... .......... 2.93M
   300K .......... .......... .......... .......... ..........  729K
   350K .......... .......... .......... .......... .......... 2.25M
   400K .......... .......... .......... .......... .......... 3.24M
   450K .......... .......... .......... .......... .......... 3.36M
   500K .......... .......... .......... .......... .......... 1.19M
   550K .......... .......... .......... .......... .......... 4.33M
   600K .......... .......... .......... .......... .......... 6.62M
   650K .......... .......... .......... .......... .......... 1.39M
   700K .......... .......... ..........                       18.9M=0.5s

2022-06-08 07:16:59 (1.36 MB/s) - 'mp4v2.zip' saved [747534]

Archive:  mp4v2.zip
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/.github/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/.github/Readme.md
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/.github/workflows/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/.github/workflows/codeql-analysis.yml
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/.gitignore
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/CMakeLists.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/COPYING
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/GNUmakefile.am
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/INSTALL
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/README
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/configure.ac
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/GNUmakefile.mk
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/doxygen/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/doxygen/Doxyfile.m4
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/doxygen/footer.html.m4
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/doxygen/mainpage.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/doxygen/project.css
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/html/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/html/banner.png
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/html/footer.html.m4
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/html/header.html.m4
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/html/project.css
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/Authors.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/BuildRepository.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/BuildSource.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/Documentation.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/ReleaseNotes.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/ToolGuide.texi
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/base/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/base/article.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/base/glossary.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/base/guide.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/base/project.texi.m4
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/commands.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/overview.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.common.bundled.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.common.conf.bi.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.common.conf.default.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.cygwin.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.freebsd.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.linux.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.osx.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.solaris.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platform.windows.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/platforms.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.bootstrap.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.build.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.checkout.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.configure.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.dist.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.doc.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.extract.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.google.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/build/process.install.texi
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/changelog/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/changelog/version-1.6.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/changelog/version-1.9.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/changelog/version-2.0.texi
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/releasenotes/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/releasenotes/intro.developer.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/releasenotes/intro.stable.texi
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/tool/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/tool/mp4art.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/tool/mp4chaps.format.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/tool/mp4chaps.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/tool/mp4file.texi
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/doc/texi/tool/mp4track.texi
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/example/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/example/callbacks/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/example/callbacks/callbacks.c
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/example/itmf/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/example/itmf/generic.c
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/example/itmf/tags.c
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/chapter.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/file.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/file_prop.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/general.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/isma.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/itmf_generic.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/itmf_tags.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/mp4v2.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/platform.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/project.h.in
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/sample.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/streaming.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/track.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/include/mp4v2/track_prop.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/config.h.cmake
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/endian.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/impl.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/File.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/File.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/FileSystem.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/FileSystem.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/FileSystem_posix.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/FileSystem_win32.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/File_posix.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/io/File_win32.cpp
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/number/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/number/random.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/number/random_posix.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/number/random_win32.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/platform.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/platform_base.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/platform_posix.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/platform_win32.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/platform_win32.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/platform_win32_impl.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/prog/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/prog/option.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/prog/option.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/sys/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/sys/error.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/sys/error.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/time/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/time/time.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/time/time.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/time/time_posix.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/time/time_win32.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libplatform/warning.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/Timecode.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/Timecode.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/TrackModifier.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/TrackModifier.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/Utility.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/Utility.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/crc.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/crc.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/impl.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/other.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/other.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/libutil/util.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/HOWTO-ADD_SOURCE.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/HOWTO-AUTOTOOLS.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/HOWTO-RELEASE.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/HOWTO-TEST.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/INTERNALS.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/LIBPLATFORM.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/NAMESPACES.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/maintainer/SOURCE.txt
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/mp4v2.pc.in
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/project/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/project/htmlcombine.py
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/project/project.m4.in
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/project/project.m4sugar
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/project/xml2wiki.py
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/3gp.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_ac3.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_amr.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_avc1.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_avcC.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_chpl.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_colr.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_d263.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_dac3.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_damr.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_dref.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_elst.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_enca.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_encv.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_free.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_ftab.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_ftyp.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_gmin.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_hdlr.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_hinf.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_hnti.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_href.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_mdat.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_mdhd.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_meta.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_mp4s.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_mp4v.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_mvhd.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_nmhd.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_ohdr.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_pasp.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_root.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_rtp.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_s263.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_sdp.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_sdtp.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_smi.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_sound.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_standard.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_stbl.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_stdp.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_stsc.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_stsd.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_stsz.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_stz2.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_text.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_tfhd.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_tkhd.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_treftype.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_trun.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_tx3g.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_udta.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_url.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_urn.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_uuid.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_video.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atom_vmhd.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/atoms.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/bmff/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/bmff/bmff.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/bmff/impl.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/bmff/typebmff.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/bmff/typebmff.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/cmeta.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/descriptors.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/descriptors.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/enum.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/enum.tcc
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/exception.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/exception.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/impl.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/isma.cpp
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/CoverArtBox.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/CoverArtBox.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/Tags.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/Tags.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/generic.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/generic.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/impl.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/itmf.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/type.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/itmf/type.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/log.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/log.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4array.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4atom.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4atom.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4container.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4container.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4descriptor.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4descriptor.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4file.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4file.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4file_io.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4info.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4property.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4property.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4track.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4track.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4util.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/mp4util.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/ocidescriptors.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/ocidescriptors.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/odcommands.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/odcommands.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qosqualifiers.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qosqualifiers.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/ColorParameterBox.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/ColorParameterBox.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/PictureAspectRatioBox.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/PictureAspectRatioBox.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/coding.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/coding.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/impl.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/qtff/qtff.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/rtphint.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/rtphint.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/src.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/text.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/text.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/src/util.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/test/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/test/OLD/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/test/OLD/c_api.c
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/test/OLD/mp4clip.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/test/OLD/nullcreate.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/test/OLD/nullvplayer.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/test/OLD/urltrack.cpp
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/testsuite/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/testsuite/config/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/testsuite/config/unix.exp
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/testsuite/lib/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/testsuite/lib/command.exp
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/testsuite/main/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/testsuite/main/standardUsage.exp
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/impl.h
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4art.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4chaps.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4extract.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4file.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4info.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4subtitle.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4tags.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4track.cpp
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/util/mp4trackdump.cpp
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/include/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/include/mp4v2/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/include/mp4v2/project.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/libmp4v2/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/libmp4v2/Version.rc
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/libmp4v2/libmp4v2.natvis
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/libmp4v2/libmp4v2.vcxproj
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/libmp4v2/libmp4v2.vcxproj.filters
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/libutil/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/libutil/libutil.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4art/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4art/mp4art.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4chaps/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4chaps/mp4chaps.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4extract/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4extract/mp4extract.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4file/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4file/mp4file.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4info/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4info/mp4info.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4subtitle/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4subtitle/mp4subtitle.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4tags/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4tags/mp4tags.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4track/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4track/mp4track.vcxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4trackdump/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4trackdump/mp4trackdump.vcxproj
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/vstudio/mp4v2.sln
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/include/
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/include/libplatform/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/include/libplatform/config.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/include/mp4v2/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/include/mp4v2/project.h
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/mp4v2.xcodeproj/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/mp4v2.xcodeproj/project.pbxproj
   creating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/mp4v2.xcodeproj/project.xcworkspace/
  inflating: mp4v2-55d601860a8c1e3fdefe298baee59da51b5b7b43/xcode/mp4v2.xcodeproj/project.xcworkspace/contents.xcworkspacedata
autoreconf: export WARNINGS=
autoreconf: Entering directory '.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force
aclocal: warning: couldn't open directory 'm4': No such file or directory
autoreconf: configure.ac: tracing
autoreconf: configure.ac: creating directory autoaux
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'autoaux'.
libtoolize: copying file 'autoaux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
autoreconf: configure.ac: not using Intltool
autoreconf: configure.ac: not using Gtkdoc
autoreconf: running: aclocal --force
autoreconf: running: /usr/bin/autoconf --force
autoreconf: running: /usr/bin/autoheader --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:68: installing 'autoaux/compile'
configure.ac:33: installing 'autoaux/config.guess'
configure.ac:33: installing 'autoaux/config.sub'
configure.ac:24: installing 'autoaux/install-sh'
configure.ac:24: installing 'autoaux/missing'
GNUmakefile.am: installing 'autoaux/depcomp'
autoreconf: 'autoaux/config.sub' is updated
autoreconf: 'autoaux/config.guess' is updated
autoreconf: Leaving directory '.'
configure:
  -->
  --> Configuring MP4v2 2.1.0
  -->
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... ./autoaux/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking build system type... armv7l-unknown-linux-musleabihf
checking host system type... armv7l-unknown-linux-musleabihf
checking how to print strings... printf
checking whether make supports the include directive... yes (GNU style)
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... none
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by gcc... /usr/armv7-alpine-linux-musleabihf/bin/ld
checking if the linker (/usr/armv7-alpine-linux-musleabihf/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 98304
checking how to convert armv7l-unknown-linux-musleabihf file names to armv7l-unknown-linux-musleabihf format... func_convert_file_noop
checking how to convert armv7l-unknown-linux-musleabihf file names to toolchain format... func_convert_file_noop
checking for /usr/armv7-alpine-linux-musleabihf/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/armv7-alpine-linux-musleabihf/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for g++... g++
checking whether the compiler supports GNU C++... yes
checking whether g++ accepts -g... yes
checking for g++ option to enable C++11 features... none needed
checking dependency style of g++... none
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/armv7-alpine-linux-musleabihf/bin/ld
checking if the linker (/usr/armv7-alpine-linux-musleabihf/bin/ld) is GNU ld... yes
checking whether the g++ linker (/usr/armv7-alpine-linux-musleabihf/bin/ld) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/armv7-alpine-linux-musleabihf/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for help2man... no
checking MP4v2 platform portability... posix
checking if g++ supports -fvisibility... yes
checking if precompiled-headers should be created... no
checking if LFS (large file support) is required... no
checking arch flags... none
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating mp4v2.pc
config.status: creating project/project.m4
config.status: creating include/mp4v2/project.h
config.status: creating libplatform/config.h
config.status: executing depfiles commands
config.status: executing libtool commands
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o libplatform/io/File_posix.lo libplatform/io/File_posix.cpp
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o libplatform/io/FileSystem_posix.lo libplatform/io/FileSystem_posix.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c libplatform/io/File_posix.cpp  -fPIC -DPIC -o libplatform/io/.libs/File_posix.o
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c libplatform/io/FileSystem_posix.cpp  -fPIC -DPIC -o libplatform/io/.libs/FileSystem_posix.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o libplatform/time/time_posix.lo libplatform/time/time_posix.cpp
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4chaps.o util/mp4chaps.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c libplatform/time/time_posix.cpp  -fPIC -DPIC -o libplatform/time/.libs/time_posix.o
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4extract.o util/mp4extract.cpp
In file included from /usr/include/c++/10.3.1/vector:72,
                 from ./libplatform/platform_base.h:16,
                 from ./libplatform/platform_posix.h:31,
                 from ./libplatform/platform.h:24,
                 from ./src/src.h:6,
                 from ./libutil/util.h:6,
                 from ./util/impl.h:6,
                 from util/mp4chaps.cpp:29:
/usr/include/c++/10.3.1/bits/vector.tcc: In member function 'void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {const MP4Chapter_s&}; _Tp = MP4Chapter_s; _Alloc = std::allocator<MP4Chapter_s>]':
/usr/include/c++/10.3.1/bits/vector.tcc:426:7: note: parameter passing for argument of type 'std::vector<MP4Chapter_s>::iterator' changed in GCC 7.1
  426 |       vector<_Tp, _Alloc>::
      |       ^~~~~~~~~~~~~~~~~~~
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4file.o util/mp4file.cpp
In file included from /usr/include/c++/10.3.1/vector:67,
                 from ./libplatform/platform_base.h:16,
                 from ./libplatform/platform_posix.h:31,
                 from ./libplatform/platform.h:24,
                 from ./src/src.h:6,
                 from ./libutil/util.h:6,
                 from ./util/impl.h:6,
                 from util/mp4chaps.cpp:29:
/usr/include/c++/10.3.1/bits/stl_vector.h: In member function 'bool mp4v2::util::ChapterUtility::actionEvery(mp4v2::util::Utility::JobContext&)':
/usr/include/c++/10.3.1/bits/stl_vector.h:1198:21: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<MP4Chapter_s*, std::vector<MP4Chapter_s> >' changed in GCC 7.1
 1198 |    _M_realloc_insert(end(), __x);
      |    ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/usr/include/c++/10.3.1/bits/stl_vector.h: In member function 'bool mp4v2::util::ChapterUtility::parseChapterFile(const string&, std::vector<MP4Chapter_s>&, mp4v2::util::Timecode::Format&)':
/usr/include/c++/10.3.1/bits/stl_vector.h:1198:21: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<MP4Chapter_s*, std::vector<MP4Chapter_s> >' changed in GCC 7.1
 1198 |    _M_realloc_insert(end(), __x);
      |    ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4info.o util/mp4info.cpp
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4subtitle.o util/mp4subtitle.cpp
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4tags.o util/mp4tags.cpp
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4track.o util/mp4track.cpp
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4trackdump.o util/mp4trackdump.cpp
./autoaux/install-sh -c -d ./doc/api/ ./doc/articles/html/ ./doc/articles/man/ ./doc/articles/texi/ ./doc/articles/txt/ ./doc/articles/wiki/ ./doc/articles/xml/ ./doc/man/man1/ ./doc/site/ ./libplatform/impl.h.gch/ ./libutil/impl.h.gch/ ./src/impl.h.gch/ ./util/impl.h.gch/ doc/doxygen/ doc/html/ doc/texi/base/
g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o util/mp4art.o util/mp4art.cpp
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/3gp.lo src/3gp.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/3gp.cpp  -fPIC -DPIC -o src/.libs/3gp.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_ac3.lo src/atom_ac3.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_ac3.cpp  -fPIC -DPIC -o src/.libs/atom_ac3.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_amr.lo src/atom_amr.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_amr.cpp  -fPIC -DPIC -o src/.libs/atom_amr.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_avc1.lo src/atom_avc1.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_avc1.cpp  -fPIC -DPIC -o src/.libs/atom_avc1.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_avcC.lo src/atom_avcC.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_avcC.cpp  -fPIC -DPIC -o src/.libs/atom_avcC.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_chpl.lo src/atom_chpl.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_chpl.cpp  -fPIC -DPIC -o src/.libs/atom_chpl.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_colr.lo src/atom_colr.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_colr.cpp  -fPIC -DPIC -o src/.libs/atom_colr.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_d263.lo src/atom_d263.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_d263.cpp  -fPIC -DPIC -o src/.libs/atom_d263.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_dac3.lo src/atom_dac3.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_dac3.cpp  -fPIC -DPIC -o src/.libs/atom_dac3.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_damr.lo src/atom_damr.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_damr.cpp  -fPIC -DPIC -o src/.libs/atom_damr.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_dref.lo src/atom_dref.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_dref.cpp  -fPIC -DPIC -o src/.libs/atom_dref.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_elst.lo src/atom_elst.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_elst.cpp  -fPIC -DPIC -o src/.libs/atom_elst.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_enca.lo src/atom_enca.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_enca.cpp  -fPIC -DPIC -o src/.libs/atom_enca.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_encv.lo src/atom_encv.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_encv.cpp  -fPIC -DPIC -o src/.libs/atom_encv.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_free.lo src/atom_free.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_free.cpp  -fPIC -DPIC -o src/.libs/atom_free.o
/bin/sh ./libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H   -I./include -I./include -I. -I.  -Wall -Wformat -g -O2 -fvisibility=hidden -c -o src/atom_ftyp.lo src/atom_ftyp.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I./include -I./include -I. -I. -Wall -Wformat -g -O2 -fvisibility=hidden -c src/atom_ftyp.cpp  -fPIC -DPIC -o src/.libs/atom_ftyp.o
src/atom_free.cpp: In member function 'virtual void mp4v2::impl::MP4FreeAtom::Write()':
src/atom_free.cpp:46:71: error: call of overloaded 'min(uint64_t, unsigned int)' is ambiguous
   46 |         m_File.WriteBytes(freebuf, min(GetSize() - ix, sizeof(freebuf)));
      |                                                                       ^
In file included from ./src/src.h:26,
                 from ./src/impl.h:6,
                 from src/atom_free.cpp:22:
./src/util.h:44:15: note: candidate: 'int8_t mp4v2::impl::min(int8_t, int8_t)'
   44 | inline int8_t min( int8_t  a, int8_t b ) {
      |               ^~~
./src/util.h:48:16: note: candidate: 'int16_t mp4v2::impl::min(int16_t, int16_t)'
   48 | inline int16_t min( int16_t a, int16_t b ) {
      |                ^~~
./src/util.h:52:16: note: candidate: 'int32_t mp4v2::impl::min(int32_t, int32_t)'
   52 | inline int32_t min( int32_t a, int32_t b ) {
      |                ^~~
./src/util.h:56:16: note: candidate: 'int64_t mp4v2::impl::min(int64_t, int64_t)'
   56 | inline int64_t min( int64_t a, int64_t b ) {
      |                ^~~
./src/util.h:62:16: note: candidate: 'uint8_t mp4v2::impl::min(uint8_t, uint8_t)'
   62 | inline uint8_t min( uint8_t  a, uint8_t b ) {
      |                ^~~
./src/util.h:66:17: note: candidate: 'uint16_t mp4v2::impl::min(uint16_t, uint16_t)'
   66 | inline uint16_t min( uint16_t a, uint16_t b ) {
      |                 ^~~
./src/util.h:70:17: note: candidate: 'uint32_t mp4v2::impl::min(uint32_t, uint32_t)'
   70 | inline uint32_t min( uint32_t a, uint32_t b ) {
      |                 ^~~
./src/util.h:74:17: note: candidate: 'uint64_t mp4v2::impl::min(uint64_t, uint64_t)'
   74 | inline uint64_t min( uint64_t a, uint64_t b ) {
      |                 ^~~
make: *** [GNUmakefile:1416: src/atom_free.lo] Error 1
make: *** Waiting for unfinished jobs....

@sandreas
Copy link
Owner

sandreas commented Jun 8, 2022

There is a new version of mp4v2 fixing 32bit problems. (Source-Code: https://github.com/enzo1982/mp4v2/archive/refs/tags/v2.1.1.zip)

I'll try to update the Dockerfile asap.

If this does not work, probably I have to report this to @enzo1982, the maintainer of the new mp4v2 official fork. Seems that there is something wrong with mp4v2 on arm platforms then.

This may be a hint: https://stackoverflow.com/questions/4672152/call-of-overloaded-function-is-ambiguous

@vakrolme
Copy link

vakrolme commented Jun 8, 2022

I updated the Dockerfile with the new mp4v2 URL, and it all compiled on my armhf NAS — thanks a lot!
I think it would've worked with a Docker CLI argument too:

docker build . --build-arg FFMPEG_IMAGE=collelog/ffmpeg:4.4-alpine-arm32v7 --build-arg MP4V2_URL="https://github.com/enzo1982/mp4v2/archive/refs/tags/v2.1.1.zip" --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg --build-arg M4B_TOOL_DOWNLOAD_LINK=https://github.com/sandreas/m4b-tool/files/8304864/m4b-tool.tar.gz -t m4b-tool --platform linux/arm/v7
m4b-tool --version
m4b-tool latest-156-g4ec42a8

@sandreas
Copy link
Owner

sandreas commented Jun 8, 2022

updated the Dockerfile with the new mp4v2 URL, and it all compiled on my armhf NAS — thanks a lot!

Thank you very much for your feedback. I also tried it on x64 and it worked. I think we can now close this issue :-)

@sandreas sandreas closed this as completed Jun 8, 2022
@vakrolme
Copy link

vakrolme commented Jun 8, 2022

Sorry to reopen this, but just in case there's any confusion, I didn't mean to indicate that the original issue is resolved on a 32-bit ARM, only that I was able to compile successfully at that point. Now, upon testing the tool against some real mp3 files, I now get the same error as the original poster here #156 (comment)

ERROR         295ms could not convert _input/J.T. - Book/Book 01.mp3 to /tmp/m4b-tool/01-finished.m4b
DEBUG         296ms trace: #0 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(522): M4bTool\Command\MergeCommand->convertInputFiles()
#1 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(423): M4bTool\Command\MergeCommand->processInputFiles()
#2 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(184): M4bTool\Command\MergeCommand->processFiles()
#3 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(381): M4bTool\Command\MergeCommand->execute()
#4 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(180): M4bTool\Command\MergeCommand->processBatchJobs()
#5 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Command/Command.php(255): M4bTool\Command\MergeCommand->execute()
#6 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(1009): Symfony\Component\Console\Command\Command->run()
#7 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand()
#8 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun()
#9 phar:///usr/local/bin/m4b-tool/bin/m4b-tool.php(47): Symfony\Component\Console\Application->run()
#10 /usr/local/bin/m4b-tool(10): require('...')
#11 {main}

@sandreas sandreas reopened this Jun 8, 2022
@sandreas
Copy link
Owner

sandreas commented Jun 8, 2022

Sorry to reopen this, but just in case there's any confusion, I didn't mean to indicate that the original issue is resolved on a 32-bit ARM, only that I was able to compile successfully at that point.

If there is still a problem, the issue has to be reopened :-) No reason to say sorry. I'm unhappy that I do not have a "machine" to reproduce this. Could you provide the whole command you ran? (you can x out filenames and other personal data)

@vakrolme
Copy link

vakrolme commented Jun 8, 2022

Could you provide the whole command you ran? (you can x out filenames and other personal data)

Here you go
# m4b-tool merge -v --jobs=2 --output-file="_output/" --batch-pattern="_input/%a - %n/%c/" --batch-pattern="_input/%a - (%s %p) %n/" --batch-pattern="_input/%a - %n {%d}/" --h-pattern="_input/%a - %n (%y) {%d}/" --batch-pattern="_input/%a - %n (%y)/" --batch-pattern="_input/%a - %n/" "_input" --debug

Output Log
INFO           17ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
DEBUG          18ms 'ffmpeg' '-hide_banner' '-version'
WARNING        25ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
NOTICE         50ms 0 matches for pattern _input/%a - %n/%c/
NOTICE         50ms 
NOTICE         50ms ================================
INFO           52ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
WARNING        53ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
NOTICE         57ms 0 matches for pattern _input/%a - (%s %p) %n/
NOTICE         58ms 
NOTICE         58ms ================================
INFO           59ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
WARNING        59ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
NOTICE         67ms 0 matches for pattern _input/%a - %n {%d}/
NOTICE         68ms 
NOTICE         69ms ================================
INFO           70ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
WARNING        71ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
NOTICE         78ms 0 matches for pattern _input/%a - %n (%y) {%d}/
NOTICE         78ms 
NOTICE         79ms ================================
INFO           80ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
WARNING        80ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
NOTICE         92ms 1 match for pattern _input/%a - %n (%y)/
NOTICE         93ms ================================
NOTICE         94ms merge _input/X X - XXX (Erik Bergman) - 2012 (54kbps)/
NOTICE         94ms   =>  _output/X X - XXX (Erik Bergman)/XXX.m4b
NOTICE         95ms - name: XXX
NOTICE         95ms - artist: X X
NOTICE         95ms - year: Erik Bergman
NOTICE         96ms 
NOTICE         96ms ================================
NOTICE         96ms 
NOTICE         97ms ================================
INFO           97ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
WARNING        97ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
NOTICE        100ms 1 match for pattern _input/%a - %n/
NOTICE        101ms ================================
NOTICE        102ms merge _input/XXX - XXX/
NOTICE        102ms   =>  _output/XXX - XXX/XXX.m4b
NOTICE        102ms - name: XXX
NOTICE        102ms - artist: XXX
NOTICE        103ms 
NOTICE        103ms ================================
NOTICE        103ms 
NOTICE        103ms ================================
INFO          104ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
WARNING       105ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
DEBUG         105ms == load input files ==
NOTICE        108ms found 12 files to convert
DEBUG         109ms CD 01 of 12.mp3
CD 02 of 12.mp3
CD 03 of 12.mp3
CD 04 of 12.mp3
CD 05 of 12.mp3
CD 06 of 12.mp3
CD 07 of 12.mp3
CD 08 of 12.mp3
CD 09 of 12.mp3
CD 10 of 12.mp3
CD 11 of 12.mp3
CD 12 of 12.mp3
NOTICE        110ms searching for cover in _input/X X - XXX (Erik Bergman) - 2012 (54kbps)
NOTICE        111ms cover not found or not specified
DEBUG         112ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 01 of 12.mp3' '-an' '-vcodec' 'copy' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/cover.jpg'
WARNING       118ms extracting cover to _input/X X - XXX (Erik Bergman) - 2012 (54kbps)/cover.jpg failed - maybe there was no cover embedded in _input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 01 of 12.mp3
NOTICE        124ms ### batch job 1/2 ###: preparing conversion with 2 simultaneous jobs, please wait...
DEBUG         162ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 01 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/01-converting.m4b'
DEBUG         164ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 02 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/02-converting.m4b'
DEBUG         175ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 03 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/03-converting.m4b'
DEBUG         177ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 04 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/04-converting.m4b'
DEBUG         184ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 05 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/05-converting.m4b'
DEBUG         187ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 06 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/06-converting.m4b'
DEBUG         194ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 07 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/07-converting.m4b'
DEBUG         196ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 08 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/08-converting.m4b'
DEBUG         204ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 09 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/09-converting.m4b'
DEBUG         206ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 10 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/10-converting.m4b'
DEBUG         216ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 11 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/11-converting.m4b'
DEBUG         219ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 12 of 12.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/12-converting.m4b'
ERROR         226ms could not convert _input/X X - XXX (Erik Bergman) - 2012 (54kbps)/CD 01 of 12.mp3 to /tmp/m4b-tool/01-finished.m4b
DEBUG         227ms trace: #0 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(522): M4bTool\Command\MergeCommand->convertInputFiles()
#1 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(423): M4bTool\Command\MergeCommand->processInputFiles()
#2 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(184): M4bTool\Command\MergeCommand->processFiles()
#3 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(381): M4bTool\Command\MergeCommand->execute()
#4 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(180): M4bTool\Command\MergeCommand->processBatchJobs()
#5 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Command/Command.php(255): M4bTool\Command\MergeCommand->execute()
#6 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(1009): Symfony\Component\Console\Command\Command->run()
#7 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand()
#8 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun()
#9 phar:///usr/local/bin/m4b-tool/bin/m4b-tool.php(47): Symfony\Component\Console\Application->run()
#10 /usr/local/bin/m4b-tool(10): require('...')
#11 {main}
INFO          228ms m4b-tool development, OS: Linux (Welcome to Alpine Linux 3.14
Kernel \r on an \m (\l))
WARNING       228ms ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
DEBUG         228ms == load input files ==
NOTICE        233ms found 10 files to convert
DEBUG         234ms XXX - 01.mp3
XXX - 02.mp3
XXX - 03.mp3
XXX - 04.mp3
XXX - 05.mp3
XXX - 06.mp3
XXX - 07.mp3
XXX - 08.mp3
XXX - 09.mp3
XXX - 10.mp3
NOTICE        235ms searching for cover in _input/XXX - XXX
NOTICE        236ms using cover _input/XXX - XXX/XXX.jpg
NOTICE        237ms skip cover extraction, a custom cover has been specified: _input/XXX - XXX/XXX.jpg
NOTICE        238ms ### batch job 2/2 ###: preparing conversion with 2 simultaneous jobs, please wait...
DEBUG         239ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 01.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/01-converting.m4b'
DEBUG         242ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 02.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/02-converting.m4b'
DEBUG         250ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 03.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/03-converting.m4b'
DEBUG         254ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 04.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/04-converting.m4b'
DEBUG         261ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 05.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/05-converting.m4b'
DEBUG         266ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 06.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/06-converting.m4b'
DEBUG         273ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 07.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/07-converting.m4b'
DEBUG         276ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 08.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/08-converting.m4b'
DEBUG         283ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 09.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/09-converting.m4b'
DEBUG         285ms 'ffmpeg' '-nostats' '-loglevel' 'panic' '-hide_banner' '-i' '_input/XXX - XXX/XXX - 10.mp3' '-map_metadata' '0' '-max_muxing_queue_size' '9999' '-strict' 'experimental' '-movflags' '+faststart' '-vn' '-ab' '64k' '-ar' '22050' '-ac' '0' '-acodec' 'aac' '-f' 'mp4' '/tmp/m4b-tool/10-converting.m4b'
ERROR         295ms could not convert _input/XXX - XXX/XXX - 01.mp3 to /tmp/m4b-tool/01-finished.m4b
DEBUG         296ms trace: #0 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(522): M4bTool\Command\MergeCommand->convertInputFiles()
#1 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(423): M4bTool\Command\MergeCommand->processInputFiles()
#2 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(184): M4bTool\Command\MergeCommand->processFiles()
#3 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(381): M4bTool\Command\MergeCommand->execute()
#4 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(180): M4bTool\Command\MergeCommand->processBatchJobs()
#5 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Command/Command.php(255): M4bTool\Command\MergeCommand->execute()
#6 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(1009): Symfony\Component\Console\Command\Command->run()
#7 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand()
#8 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun()
#9 phar:///usr/local/bin/m4b-tool/bin/m4b-tool.php(47): Symfony\Component\Console\Application->run()
#10 /usr/local/bin/m4b-tool(10): require('...')
#11 {main}

I'm unhappy that I do not have a "machine" to reproduce this

Maybe I could set you up with an SSH-able user on my NAS? If it makes sense to try, hit me up over email, it's in my bio.

@krejko
Copy link

krejko commented Jun 9, 2022

I updated the Dockerfile with the new mp4v2 URL, and it all compiled on my armhf NAS — thanks a lot! I think it would've worked with a Docker CLI argument too:

docker build . --build-arg FFMPEG_IMAGE=collelog/ffmpeg:4.4-alpine-arm32v7 --build-arg MP4V2_URL="https://github.com/enzo1982/mp4v2/archive/refs/tags/v2.1.1.zip" --build-arg FFMPEG_PATH=/usr/local/bin/ffmpeg --build-arg M4B_TOOL_DOWNLOAD_LINK=https://github.com/sandreas/m4b-tool/files/8304864/m4b-tool.tar.gz -t m4b-tool --platform linux/arm/v7
m4b-tool --version
m4b-tool latest-156-g4ec42a8

I have used the above docker build command and I believe that it has built successfully... I am able to run the version command without issue.

pi@pi$ m4b-tool --version
m4b-tool latest-156-g4ec42a8

However, when I actually try to do a merge, I am still getting the following error:

could not convert /mp3merge/book/Chapter 01.mp3 to /tmp/m4b-tool/02-finished.m4b
trace: #0 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(522): M4bTool\Command\MergeCommand->convertInputFiles()
#1 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(423): M4bTool\Command\MergeCommand->processInputFiles()
#2 phar:///usr/local/bin/m4b-tool/src/library/Command/MergeCommand.php(184): M4bTool\Command\MergeCommand->processFiles()
#3 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Command/Command.php(255): M4bTool\Command\MergeCommand->execute()
#4 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(1009): Symfony\Component\Console\Command\Command->run()
#5 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand()
#6 phar:///usr/local/bin/m4b-tool/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun()
#7 phar:///usr/local/bin/m4b-tool/bin/m4b-tool.php(47): Symfony\Component\Console\Application->run()
#8 /usr/local/bin/m4b-tool(10): require('...')
#9 {main}

Is it possible this still related to the architecture? I am having difficulty understanding from this error message what the problem may be. The command I am using to run the job is:

    sudo docker run -it --rm -u $(id -u):$(id -g) -v /.../mp3merge:/mp3merge -v /.../audiobooks:/audiobooks m4b-tool merge "${1/.}" \
    	-vvv -n \
            --debug \
            --jobs=4 \
            --audio-bitrate="$bit" \
    	--use-filenames-as-chapters \
    	--audio-codec=libfdk_aac \
    	--logfile="${logfile/.}" \
    	--max-chapter-length=300,900 \
    	--output-file="${outfile/.}" \
    	--name="$name" \
    	--writer="$writer" \
    	--series="$series" \
    	--series-part="$series_part" \
    	--sortname="$sortname" \
            --no-cache 

@wader
Copy link

wader commented Jun 12, 2022

@sandreas hey! Intreresting, will have closer look later, on bike vaction at the moment. Looks like they do emulated builds with docker buildx? If fear build times will be to long for static-ffmpeg with github actions if we want to include rust-based things

@sandreas
Copy link
Owner

Is it possible this still related to the architecture? I am having difficulty understanding from this error message what the problem may be. The command I am using to run the job is:

Maybe there still IS a problem. Unfortunately the error message of m4b-tool is not very elusive. Are there additional details of the debug message?

If fear build times will be to long for static-ffmpeg with github actions if we want to include rust-based things

@wader Would this be a problem? I think that having a build that works would be good, even if the build times are bad or the version is not totally up to date? What do you think?

@wader
Copy link

wader commented Jun 18, 2022

If fear build times will be to long for static-ffmpeg with github actions if we want to include rust-based things

@wader Would this be a problem? I think that having a build that works would be good, even if the build times are bad or the version is not totally up to date? What do you think?

Main concern is that the standard github action runners have a max job execution time of 6h, and last time i tried do a emulated build on my intel macbook it took 23h. I'll see if i can do a test build for armv7 etc on a standard runner and see how it goes, maybe it has lots of more cpus? But yes would be great if it worked even if slow.

@wader
Copy link

wader commented Jun 19, 2022

@sandreas we ended up talking and trying some things in this PR wader/static-ffmpeg#204 the last comments might be interesting to you

@sandreas
Copy link
Owner

we ended up talking and trying some things in this PR wader/static-ffmpeg#204 the last comments might be interesting to you

Great, thank you. I'll keep an eye on it.

@sandreas
Copy link
Owner

sandreas commented Jul 6, 2022

@wader I ended up using your Dockerfile, strip unneeded things out and let github actions build a multiarch ffmpeg... seem to work, but it is highly experimental for non x64 platforms... I hope you don't mind, if you do, let me know. Then I use a handcrafted custom Dockerfile. I just wanna let you know, that my docker build took about 20 Minutes to build, here is the workflow, that I trigger manually.

@xtinct101, @krejko, @vakrolme, @rabelux, @djdembeck
Maybe the new official docker image could solve your problems!? I would really appreciate if you could try it out... Let my cite my prepared announcement:

There is a new "official" (still experimental) docker multiarch image and SHOULD work on x64, and Raspberry platforms. It is completely handcrafted and available for the following archs:

  • linux/arm/v6
  • linux/arm/v7
  • linux/arm64
  • linux/amd64
docker pull sandreas/m4b-tool:latest

In the near future, it will use tagging based on my new project tone, which SHOULD be a huge improvement over the existing mp4v2 and ffmpeg strategies. The code is already commited and integrated in the docker image, but unfortunately there are some Known Issues, that prevent me from declaring tone as stable enough for production usage.

I need your help: Try out the new docker image and give feedback, so that we can get to a production ready release as soon as possible.

Feel free to reopen.

@sandreas sandreas closed this as completed Jul 6, 2022
@wader
Copy link

wader commented Jul 6, 2022

@sandreas 👍 No problem

Problem with multi-arch, docker buildx or other "userland" emulated builds are that they are very slow and resources intensive. But it might work fine in your case to strip away most things.
Also i've noticed that the emulated env is not perfect (/proc is from the host etc) so it might fool autoconf, cmake, random build scripts etc to not enable some optimization features.

BTW i've summerised the multi-arch issue and possible ways for a more modular here wader/static-ffmpeg#217 wader/static-ffmpeg#216

@wader
Copy link

wader commented Jul 6, 2022

If you only need ffmpeg without any or few dependecies and it seems to build fine with emulation for all the archs you need i would suggest you go that path. Maybe also make sure that resulting binary is not super slow for some reason. Do you mostly transmux or also transcode? transmux is usually mostly shuffle bytes around so IO-bound anyway.

@sandreas
Copy link
Owner

sandreas commented Jul 6, 2022

👍 No problem

Great thanks

BTW i've summerised the multi-arch issue and possible ways for a more modular here wader/static-ffmpeg#217 wader/static-ffmpeg#216

Cool, nice resource, good to know someone very experienced onboard.

@sandreas
Copy link
Owner

sandreas commented Jul 6, 2022

Do you mostly transmux or also transcode?

no mostly mp3 to fdkaac

@wader
Copy link

wader commented Jul 6, 2022

Aha ok, then maybe worth testing performance

BTW tone looks useful. I do some mangling of media files from time to time to use in various mp3 players etc. Have you seen https://github.com/wader/fq? might be interesting to debug media files, was the reason it was created :)

@sandreas
Copy link
Owner

sandreas commented Jul 6, 2022

Aha ok, then maybe worth testing performance

I had that in mind, but for audio encoding / decoding it is far less important than for video (still I think it is something to investigate further)

BTW tone looks useful.

Thanks :-) I plan to extend its functionality in the near future.

Have you seen https://github.com/wader/fq?

Uh, nice. That thing could help debug a known issue of tone, that prevents me from removing mp4v2 completely off m4b-tool.
Thank you, I'll definetely try that out.

@wader
Copy link

wader commented Oct 24, 2022

@sandreas Hey, not sure what the ffmpeg siutation is for m4b-tools atm, but there is an interesting fork of static-ffmpeg at https://github.com/ffbuilds that might interest you. I'm not the main person behind it but i'm trying to help out and I hope it can lead to nicer multi arch builds.

@sandreas
Copy link
Owner

sandreas commented Oct 24, 2022

@wader Thank you, looks interesting. Until now I had no issues going docker buildx on my dockerhub-builds repo, but of course I would prefer a build that I don't have to maintain myself.

I recently found a pretty neat way to run commands that depend on the arch in alpine:
https://github.com/sandreas/tone/blob/3ec398c8440f751c188d6c03710c9b5a755210e9/tone/Dockerfile.release#L14
This might help with multiarch builds that need different packages, commands or something.

@wader
Copy link

wader commented Oct 24, 2022

@wader Thank you, looks interesting. Until now I had no issues going docker buildx on my dockerhub-builds repo, but of course I would prefer a build that I don't have to maintain myself.

Great to hear! i'm still a little skeptic to emulated builds for the things i use ffmpeg for, is important things end up using the correct optimizations etc. But think i will try figure some way to verify that the emulated build are correct, would be nice.

I recently found a pretty neat way to run commands that depend on the arch in alpine: https://github.com/sandreas/tone/blob/3ec398c8440f751c188d6c03710c9b5a755210e9/tone/Dockerfile.release#L14 This might help with multiarch builds that need different packages, commands or something.

Neat 📸

@vakrolme
Copy link

vakrolme commented Oct 24, 2022

I just got back to this 32-bit ARM issue recently.

There is a new "official" (still experimental) docker multiarch image and SHOULD work on x64, and Raspberry platforms. It is completely handcrafted and available for the following archs:

  • linux/arm/v6
  • linux/arm/v7
  • linux/arm64
  • linux/amd64

I only see amd64 version on DockerHub. Am I looking at the wrong place somehow, @sandreas?

What's the current way to get it running on a 32-bit ARM? I see tone has those ARM builds, but I specifically need the merge function which m4b-tool has, but tone only lists among "future plans".

Thanks!

@sandreas
Copy link
Owner

I only see amd64 version on DockerHub. Am I looking at the wrong place somehow, @sandreas?

You are right... something went wrong here. I have to take a look at this.

@sandreas
Copy link
Owner

@vakrolme There was a huge issue in building the whole tree of images (ffmpeg, mp4v2, fdkaac and m4b-tool) because I forgot an s in platforms. This needed a major change on ffmpeg because as @wader already pointed out, github actions did not build the whole ffmpeg image in time (6h limit) and I had to use a hack to get around this.

Learned a lot, thanks for pointing this out (I totally missed it because I use x64 everywhere) and now it SHOULD work on other platforms...

Unfortunately I cannot test it - because I just have x64 :-)

@wader
Copy link

wader commented Oct 26, 2022

@sandreas you can use docker to test arm images on x86 etc, should work fine. Running binaries emulated is usually fine, its mostly build systems that get confused by the leaky emulation

@sandreas
Copy link
Owner

sandreas commented Oct 26, 2022

@sandreas you can use docker to test arm images on x86 etc, should work fine. Running binaries emulated is usually fine, its mostly build systems that get confused by the leaky emulation

Thank you. I know but currently I'm just too busy to dig too much into this. I had to trick gh-actions a bit and build every arch separately - then build a multiarch image by just copying the static binaries... This might be unhandy, complicated and slow, but it seems to work, see https://github.com/sandreas/dockerhub-builds/blob/main/ffmpeg/5.0.1-3/Dockerfile :-)

@vakrolme
Copy link

vakrolme commented Oct 26, 2022

Unfortunately I cannot test it - because I just have x64 :-)

This is what happened when I ran the new Docker image on an arm/v7:

# m4b-tool --version
m4b-tool latest-178-gaeb8b2b
# m4b-tool merge "." --output-file="data/merged.m4b" --jobs=6
ffmpeg version could not be determined - this may cause unexpected behaviour due to missing dependencies...
could not convert ./01 Introduction.mp3 to /tmp/m4b-tool/01-finished.m4b

UPD: There's a slight chance I left some prev failed installation somewhere on my system, and when I hit m4b-tool I get to that one for whatever reason instead of your newer docker build, so I edited this comment to add my current --version output, FWIW. Should be the right version though.

@sandreas
Copy link
Owner

UPD: There's a slight chance I left some prev failed installation somewhere on my system, and when I hit m4b-tool I get to that one for whatever reason instead of your newer docker build, so I edited this comment to add my current --version output, FWIW. Should be the right version though.

Ok, then it seems not to work as expected... I'll have a look, atm I'm a bit busy, but in the next days I should have some time to investigate this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants