mirror of
https://github.com/nu774/fdkaac.git
synced 2025-06-05 23:29:14 +02:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
5063c6dce1 | |||
57aa91419d | |||
b3dcf08647 | |||
a7c4895534 | |||
209130e887 | |||
b6ab92a9e7 | |||
e18fe91a40 | |||
472e82e42f | |||
ce0833f8e5 | |||
661f883dce | |||
b815f858d0 |
44
ChangeLog
44
ChangeLog
@ -1,14 +1,52 @@
|
||||
2013-11-04 nu774 <honeycomb77@gmail.com>
|
||||
2014-01-18 nu774 <honeycomb77@gmail.com>
|
||||
|
||||
* update ChangeLog [HEAD]
|
||||
|
||||
* bump version [v0.5.2]
|
||||
|
||||
* fix reading of caf file without chan chunk
|
||||
|
||||
2013-11-17 nu774 <honeycomb77@gmail.com>
|
||||
|
||||
* Merge pull request #9 from rbrito/fix-typo [origin/master]
|
||||
|
||||
2013-11-18 Rogério Brito <rbrito@ime.usp.br>
|
||||
|
||||
* man: Regen manpage with hyphens escaped.
|
||||
|
||||
* README: Remove trailing whitespaces that end up in the manpages.
|
||||
|
||||
* README: Fix typo in bandwidth to match CLI options.
|
||||
|
||||
2013-11-08 nu774 <honeycomb77@gmail.com>
|
||||
|
||||
* add genman.sh, update fdkaac.1
|
||||
|
||||
* update ChangeLog
|
||||
|
||||
* bump version [v0.5.1]
|
||||
|
||||
* fix to use libFDKAAC signaling mode 1
|
||||
|
||||
2013-11-05 nu774 <honeycomb77@gmail.com>
|
||||
|
||||
* fix README
|
||||
|
||||
2013-11-04 nu774 <honeycomb77@gmail.com>
|
||||
|
||||
* rename README.md -> README
|
||||
|
||||
* Update README -> README.md, generate groff manpage from README.md
|
||||
|
||||
* update ChangeLog
|
||||
|
||||
* update git2changelog to accept non-ascii output
|
||||
|
||||
* add manpage
|
||||
|
||||
2013-11-03 nu774 <honeycomb77@gmail.com>
|
||||
|
||||
* fix gcc warnings [origin/master]
|
||||
* fix gcc warnings
|
||||
|
||||
* Merge pull request #7 from rbrito/misc-fixes
|
||||
|
||||
@ -66,7 +104,7 @@
|
||||
|
||||
2013-10-26 nu774 <honeycomb77@gmail.com>
|
||||
|
||||
* re-fix #ifdef cond for lrint()
|
||||
* re-fix #ifdef cond for lrint() [old]
|
||||
|
||||
* tag mapping: add recorded date and tempo, remove performer->artist
|
||||
|
||||
|
10
README
10
README
@ -5,7 +5,7 @@
|
||||
NAME
|
||||
====
|
||||
|
||||
fdkaac - command line frontend for libfdk-aac encoder
|
||||
fdkaac - command line frontend for libfdk-aac encoder
|
||||
|
||||
SYNOPSIS
|
||||
========
|
||||
@ -23,7 +23,7 @@ output file is "-", data is written to stdout if one of streamable AAC
|
||||
transport formats are selected by **-f**.
|
||||
|
||||
When CAF input and M4A output is used, tags in CAF file are copied into
|
||||
the resulting M4A.
|
||||
the resulting M4A.
|
||||
|
||||
OPTIONS
|
||||
=======
|
||||
@ -75,8 +75,8 @@ OPTIONS
|
||||
1-5
|
||||
: VBR (higher value -\> higher bitrate)
|
||||
|
||||
-w, --bandwith \<n\>
|
||||
: Frequency bandwith (lowpass cut-off frequency) in Hz. Available on
|
||||
-w, --bandwidth \<n\>
|
||||
: Frequency bandwidth (lowpass cut-off frequency) in Hz. Available on
|
||||
AAC LC only.
|
||||
|
||||
-a, --afterburner \<n\>
|
||||
@ -271,7 +271,7 @@ OPTIONS
|
||||
: Read tags from JSON. By default, tags are assumed to be direct
|
||||
children of the root object in JSON. Optionally you can specify
|
||||
arbitrary dot notation to locate the object containing tags.
|
||||
|
||||
|
||||
|
||||
EXAMPLES
|
||||
========
|
||||
|
2
genman.sh
Executable file
2
genman.sh
Executable file
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
pandoc -s -f markdown -t man README >fdkaac.1 && mv -f fdkaac.1 man/fdkaac.1
|
162
man/fdkaac.1
162
man/fdkaac.1
@ -1,85 +1,84 @@
|
||||
.TH FDKAAC 1 "November, 2013"
|
||||
.SH NAME
|
||||
.PP
|
||||
fdkaac - command line frontend for libfdk-aac encoder \
|
||||
fdkaac \- command line frontend for libfdk\-aac encoder
|
||||
.SH SYNOPSIS
|
||||
.PP
|
||||
\f[B]fdkaac\f[] [OPTIONS] [FILE]
|
||||
\f[B]fdkaac\f[] [OPTIONS][FILE]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
\f[B]fdkaac\f[] reads linear PCM audio in either WAV, raw PCM, or CAF
|
||||
format, and encodes it into either M4A / AAC file.
|
||||
.PP
|
||||
If the input file is "-", data is read from stdin.
|
||||
Likewise, if the output file is "-", data is written to stdout if one of
|
||||
streamable AAC transport formats is selected by \f[B]-f\f[].
|
||||
If the input file is "\-", data is read from stdin.
|
||||
Likewise, if the output file is "\-", data is written to stdout if one
|
||||
of streamable AAC transport formats are selected by \f[B]\-f\f[].
|
||||
.PP
|
||||
When CAF input and M4A output is used, tags in CAF file are copied into
|
||||
the resulting M4A.
|
||||
\
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B -h, --help
|
||||
.B \-h, \-\-help
|
||||
Show command help
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -o <FILE>
|
||||
.B \-o <FILE>
|
||||
Output filename.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -p, --profile <n>
|
||||
.B \-p, \-\-profile <n>
|
||||
Target profile (MPEG4 audio object type, AOT)
|
||||
.RS
|
||||
.TP
|
||||
.B 2
|
||||
MPEG-4 AAC LC (default)
|
||||
MPEG\-4 AAC LC (default)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 5
|
||||
MPEG-4 HE-AAC (SBR)
|
||||
MPEG\-4 HE\-AAC (SBR)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 29
|
||||
MPEG-4 HE-AAC v2 (SBR+PS)
|
||||
MPEG\-4 HE\-AAC v2 (SBR+PS)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 23
|
||||
MPEG-4 AAC LD
|
||||
MPEG\-4 AAC LD
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 39
|
||||
MPEG-4 AAC ELD
|
||||
MPEG\-4 AAC ELD
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 129
|
||||
MPEG-2 AAC LC
|
||||
MPEG\-2 AAC LC
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 132
|
||||
MPEG-2 HE-AAC (SBR)
|
||||
MPEG\-2 HE\-AAC (SBR)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 156
|
||||
MPEG-2 HE-AAC v2 (SBR+PS)
|
||||
MPEG\-2 HE\-AAC v2 (SBR+PS)
|
||||
.RS
|
||||
.RE
|
||||
.RE
|
||||
.TP
|
||||
.B -b, --bitrate <n>
|
||||
.B \-b, \-\-bitrate <n>
|
||||
Target bitrate (for CBR)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -m, --bitrate-mode <n>
|
||||
.B \-m, \-\-bitrate\-mode <n>
|
||||
Bitrate configuration mode.
|
||||
Available VBR quality value depends on other parameters such as profile,
|
||||
sample rate, or number of channels.
|
||||
@ -90,19 +89,19 @@ CBR (default)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B 1-5
|
||||
VBR (higher value -> higher bitrate)
|
||||
.B 1\-5
|
||||
VBR (higher value \-> higher bitrate)
|
||||
.RS
|
||||
.RE
|
||||
.RE
|
||||
.TP
|
||||
.B -w, --bandwith <n>
|
||||
Frequency bandwith (lowpass cut-off frequency) in Hz.
|
||||
.B \-w, \-\-bandwidth <n>
|
||||
Frequency bandwidth (lowpass cut\-off frequency) in Hz.
|
||||
Available on AAC LC only.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -a, --afterburner <n>
|
||||
.B \-a, \-\-afterburner <n>
|
||||
Configure afterburner mode.
|
||||
When enabled, quality is increased at the expense of additional
|
||||
computational workload.
|
||||
@ -119,11 +118,11 @@ On (default)
|
||||
.RE
|
||||
.RE
|
||||
.TP
|
||||
.B -L, --lowdelay-sbr <n>
|
||||
.B \-L, \-\-lowdelay\-sbr <n>
|
||||
Configure SBR activity on AAC ELD.
|
||||
.RS
|
||||
.TP
|
||||
.B -1
|
||||
.B \-1
|
||||
Use ELD SBR auto configuration
|
||||
.RS
|
||||
.RE
|
||||
@ -139,7 +138,7 @@ Enable SBR on ELD
|
||||
.RE
|
||||
.RE
|
||||
.TP
|
||||
.B -s, --sbr-ratio <n>
|
||||
.B \-s, \-\-sbr\-ratio <n>
|
||||
Controls activation of downsampled SBR.
|
||||
.RS
|
||||
.TP
|
||||
@ -154,30 +153,30 @@ Use downsampled SBR (default for ELD+SBR)
|
||||
.RE
|
||||
.TP
|
||||
.B 2
|
||||
Use dual-rate SBR (default for HE-AAC)
|
||||
Use dual\-rate SBR (default for HE\-AAC)
|
||||
.RS
|
||||
.RE
|
||||
.PP
|
||||
Dual-rate SBR is what is normally used for HE-AAC, where AAC is encoded
|
||||
at half the sample rate of SBR, hence "dual rate".
|
||||
Dual\-rate SBR is what is normally used for HE\-AAC, where AAC is
|
||||
encoded at half the sample rate of SBR, hence "dual rate".
|
||||
On the other hand, downsampled SBR uses same sample rate for both of AAC
|
||||
and SBR (single rate), therefore downsampled SBR typically consumes more
|
||||
bitrate.
|
||||
.PP
|
||||
Downsampled SBR is newly introduced feature in FDK encoder library
|
||||
version 3.4.12.
|
||||
When libfdk-aac in the system doesn\[aq]t support this, dual-rate SBR
|
||||
When libfdk\-aac in the system doesn\[aq]t support this, dual\-rate SBR
|
||||
will be used.
|
||||
When available, dual-rate SBR is the default for HE-AAC and downsampled
|
||||
SBR is the default for ELD+SBR.
|
||||
When available, dual\-rate SBR is the default for HE\-AAC and
|
||||
downsampled SBR is the default for ELD+SBR.
|
||||
.PP
|
||||
Note that downsampled HE-AAC is not so common as dual-rate one.
|
||||
When downsampled HE-AAC is selected, \f[B]fdkaac\f[] is forced to choose
|
||||
explicit hierarchical SBR signaling, which (at least) iTunes doesn\[aq]t
|
||||
accept.
|
||||
Note that downsampled HE\-AAC is not so common as dual\-rate one.
|
||||
When downsampled HE\-AAC is selected, \f[B]fdkaac\f[] is forced to
|
||||
choose explicit hierarchical SBR signaling, which (at least) iTunes
|
||||
doesn\[aq]t accept.
|
||||
.RE
|
||||
.TP
|
||||
.B -f, --transport-format <n>
|
||||
.B \-f, \-\-transport\-format <n>
|
||||
Transport format.
|
||||
Tagging and gapless playback is only available on M4A.
|
||||
Streaming to stdout is only available on others.
|
||||
@ -214,17 +213,17 @@ LOAS/LATM (LATM within LOAS)
|
||||
.RE
|
||||
.RE
|
||||
.TP
|
||||
.B -C, --adts-crc-check
|
||||
.B \-C, \-\-adts\-crc\-check
|
||||
Add CRC protection on ADTS header.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -h, --header-period <n>
|
||||
StreamMuxConfig/PCE repetition period in transport layer.
|
||||
.B \-h, \-\-header\-period <n>
|
||||
StreamMuxConfig/PCE repetition period in the transport layer.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -G, --gapless-mode <n>
|
||||
.B \-G, \-\-gapless\-mode <n>
|
||||
Method to declare amount of encoder delay (and padding) in M4A
|
||||
container.
|
||||
These values are mandatory for proper gapless playback on player side.
|
||||
@ -246,7 +245,7 @@ Both
|
||||
.RE
|
||||
.RE
|
||||
.TP
|
||||
.B --include-sbr-delay
|
||||
.B \-\-include\-sbr\-delay
|
||||
When specified, count SBR decoder delay in encoder delay.
|
||||
.RS
|
||||
.PP
|
||||
@ -262,44 +261,44 @@ playback.
|
||||
LC doesn\[aq]t have such issues.
|
||||
.RE
|
||||
.TP
|
||||
.B -I, --ignorelength
|
||||
.B \-I, \-\-ignorelength
|
||||
Ignore length field of data chunk in input WAV file.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -S, --silent
|
||||
.B \-S, \-\-silent
|
||||
Don\[aq]t print progress messages.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --moov-before-mdat
|
||||
.B \-\-moov\-before\-mdat
|
||||
Place moov box before mdat box in M4A container.
|
||||
This option might be important for some hardware players, that are known
|
||||
to refuse moov box placed after mdat box.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B -R, --raw
|
||||
.B \-R, \-\-raw
|
||||
Regard input as raw PCM.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --raw-channels <n>
|
||||
.B \-\-raw\-channels <n>
|
||||
Specify number of channels of raw input (default: 2)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --raw-rate <n>
|
||||
.B \-\-raw\-rate <n>
|
||||
Specify sample rate of raw input (default: 44100)
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --raw-format <spec>
|
||||
.B \-\-raw\-format <spec>
|
||||
Specify sample format of raw input (default: "S16L").
|
||||
\f[B]Spec\f[] is as the following (case insensitive):
|
||||
.RS
|
||||
.TP
|
||||
.B 1st char -- type of sample
|
||||
.B 1st char \-\- type of sample
|
||||
\f[B]S\f[] (igned) | \f[B]U\f[] (nsigned) | \f[B]F\f[] (loat)
|
||||
.RS
|
||||
.RE
|
||||
@ -309,102 +308,99 @@ bits per channel
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B Last char -- endianness (can be ommited)
|
||||
.B Last char \-\- endianness (can be omitted)
|
||||
\f[B]L\f[] (ittle, default) | \f[B]B\f[] (ig)
|
||||
.RS
|
||||
.RE
|
||||
.RE
|
||||
.TP
|
||||
.B --title <string>
|
||||
.B \-\-title <string>
|
||||
Set title tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --artist <string>
|
||||
.B \-\-artist <string>
|
||||
Set artist tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --album <string>
|
||||
.B \-\-album <string>
|
||||
Set album tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --genre <string>
|
||||
.B \-\-genre <string>
|
||||
Set genre tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --date <string>
|
||||
.B \-\-date <string>
|
||||
Set date tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --composer <string>
|
||||
.B \-\-composer <string>
|
||||
Set composer tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --grouping <string>
|
||||
.B \-\-grouping <string>
|
||||
Set grouping tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --comment <string>
|
||||
.B \-\-comment <string>
|
||||
Set comment tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --album-artist <string>
|
||||
.B \-\-album\-artist <string>
|
||||
Set album artist tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --track <number[/total]>
|
||||
.B \-\-track <number[/total]>
|
||||
Set track tag, with or without number of total tracks.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --disk <number[/total]>
|
||||
.B \-\-disk <number[/total]>
|
||||
Set disk tag, with or without number of total discs.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --tempo <n>
|
||||
.B \-\-tempo <n>
|
||||
Set tempo (BPM) tag.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --tag <fcc>:<value>
|
||||
.B \-\-tag <fcc>:<value>
|
||||
Set iTunes predefined tag with explicit fourcc key and value.
|
||||
See
|
||||
https://code.google.com/p/mp4v2/wiki/iTunesMetadata (https://code.google.com/p/mp4v2/wiki/iTunesMetadata)
|
||||
for known predefined keys.
|
||||
See <https://code.google.com/p/mp4v2/wiki/iTunesMetadata> for known
|
||||
predefined keys.
|
||||
You can omit first char of \f[B]fcc\f[] when it is the copyright sign.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --tag-from-file <fcc>:<filename>
|
||||
Same as --tag, but set content of file as tag value.
|
||||
.B \-\-tag\-from\-file <fcc>:<filename>
|
||||
Same as \-\-tag, but set content of file as tag value.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --long-tag <name>:<value>
|
||||
.B \-\-long\-tag <name>:<value>
|
||||
Set arbitrary tag as iTunes custom metadata.
|
||||
Stored in com.apple.iTunes field.
|
||||
.RS
|
||||
.RE
|
||||
.TP
|
||||
.B --tag-from-json <filename[?dot_notation]>
|
||||
.B \-\-tag\-from\-json <filename[?dot_notation]>
|
||||
Read tags from JSON.
|
||||
By default, tags are assumed to be direct children of the root object in
|
||||
JSON.
|
||||
Optionary you can speficy arbitrary dot notation to locate the object
|
||||
Optionally you can specify arbitrary dot notation to locate the object
|
||||
containing tags.
|
||||
.RS
|
||||
.RE
|
||||
.PP
|
||||
\
|
||||
.SH EXAMPLES
|
||||
.PP
|
||||
Encode WAV file into a M4A file.
|
||||
@ -412,16 +408,16 @@ MPEG4 AAC LC, VBR quality 3:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
fdkaac\ -m3\ foo.wav
|
||||
fdkaac\ \-m3\ foo.wav
|
||||
\f[]
|
||||
.fi
|
||||
.PP
|
||||
Encode WAV file into a M4A file.
|
||||
MPEG4 HE-AAC, bitrate 64kbps:
|
||||
MPEG4 HE\-AAC, bitrate 64kbps:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
fdkaac\ -p5\ -b64\ foo.wav
|
||||
fdkaac\ \-p5\ \-b64\ foo.wav
|
||||
\f[]
|
||||
.fi
|
||||
.PP
|
||||
@ -429,7 +425,7 @@ Piping from \f[B]ffmpeg\f[] (you need version supporting CAF output):
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
ffmpeg\ -i\ foo.flac\ -f\ caf\ -\ |\ fdkaac\ -b128\ -\ -o\ foo.m4a
|
||||
ffmpeg\ \-i\ foo.flac\ \-f\ caf\ \-\ |\ fdkaac\ \-b128\ \-\ \-o\ foo.m4a
|
||||
\f[]
|
||||
.fi
|
||||
.PP
|
||||
@ -437,10 +433,10 @@ Import tags via json:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
ffprobe\ -v\ 0\ -of\ json\ -show_format\ foo.flac\ >foo.json
|
||||
ffprobe\ \-v\ 0\ \-of\ json\ \-show_format\ foo.flac\ >foo.json
|
||||
|
||||
flac\ -dc\ foo.flac\ |\ \\
|
||||
fdkaac\ -\ -ox.m4a\ -m2\ --import-tag-from-json=foo.json?format.tags
|
||||
flac\ \-dc\ foo.flac\ |\ \\
|
||||
fdkaac\ \-\ \-ox.m4a\ \-m2\ \-\-import\-tag\-from\-json=foo.json?format.tags
|
||||
\f[]
|
||||
.fi
|
||||
.SH NOTES
|
||||
@ -448,7 +444,7 @@ fdkaac\ -\ -ox.m4a\ -m2\ --import-tag-from-json=foo.json?format.tags
|
||||
Upto 32bit integer or 64bit floating point format is supported as input.
|
||||
However, FDK library is implemented based on fixed point math and only
|
||||
supports 16bit integer PCM.
|
||||
Therefore, be careful of clipping.
|
||||
Therefore, be wary of clipping.
|
||||
You might want to dither/noise shape beforehand when your input has
|
||||
higher resolution.
|
||||
.PP
|
||||
|
@ -225,6 +225,7 @@ pcm_reader_t *caf_open(pcm_io_context_t *io,
|
||||
memcpy(&reader->io, io, sizeof(pcm_io_context_t));
|
||||
reader->tag_callback = tag_callback;
|
||||
reader->tag_ctx = tag_ctx;
|
||||
memcpy(reader->chanmap, "\000\001\002\003\004\005\006\007", 8);
|
||||
|
||||
if (caf_parse(reader, &data_length) < 0) {
|
||||
free(reader);
|
||||
|
@ -204,7 +204,7 @@ int apple_chan_chunk(pcm_io_context_t *io, uint32_t chunk_size,
|
||||
|
||||
switch (mChannelLayoutTag) {
|
||||
case kAudioChannelLayoutTag_UseChannelBitmap:
|
||||
ENSURE(bitcount(mask) == nchannels);
|
||||
ENSURE(bitcount(mChannelBitmap) == nchannels);
|
||||
TRY_IO(pcm_skip(io, chunk_size - 12));
|
||||
fmt->channel_mask = mChannelBitmap;
|
||||
for (i = 0; i < nchannels; ++i)
|
||||
|
Reference in New Issue
Block a user