1
0
mirror of https://github.com/nu774/fdkaac.git synced 2025-06-05 23:29:14 +02:00

11 Commits

Author SHA1 Message Date
5063c6dce1 bump version 2014-02-17 13:55:08 +09:00
57aa91419d fix: CAF chan chunk using channel bitmap was not correctly handled 2014-02-17 13:51:20 +09:00
b3dcf08647 update ChangeLog 2014-01-18 17:47:03 +09:00
a7c4895534 bump version 2014-01-18 17:44:51 +09:00
209130e887 fix reading of caf file without chan chunk
Since channel map was not initialized, first channel was copied to every
other channel.
2014-01-18 17:41:57 +09:00
b6ab92a9e7 Merge pull request #9 from rbrito/fix-typo
README: Fix typo in bandwidth to match CLI options.
2013-11-17 22:02:43 -08:00
e18fe91a40 man: Regen manpage with hyphens escaped.
Otherwise, automated verification programs like Debian's lintian complain
about them.

Signed-off-by: Rogério Brito <rbrito@ime.usp.br>
2013-11-18 02:55:18 -02:00
472e82e42f README: Remove trailing whitespaces that end up in the manpages.
Signed-off-by: Rogério Brito <rbrito@ime.usp.br>
2013-11-18 02:52:35 -02:00
ce0833f8e5 README: Fix typo in bandwidth to match CLI options.
Signed-off-by: Rogério Brito <rbrito@ime.usp.br>
2013-11-18 02:48:39 -02:00
661f883dce add genman.sh, update fdkaac.1 2013-11-08 23:18:20 +09:00
b815f858d0 update ChangeLog 2013-11-08 12:49:19 +09:00
7 changed files with 130 additions and 93 deletions

View File

@ -1,14 +1,52 @@
2013-11-04 nu774 <honeycomb77@gmail.com> 2014-01-18 nu774 <honeycomb77@gmail.com>
* update ChangeLog [HEAD] * 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 * update git2changelog to accept non-ascii output
* add manpage * add manpage
2013-11-03 nu774 <honeycomb77@gmail.com> 2013-11-03 nu774 <honeycomb77@gmail.com>
* fix gcc warnings [origin/master] * fix gcc warnings
* Merge pull request #7 from rbrito/misc-fixes * Merge pull request #7 from rbrito/misc-fixes
@ -66,7 +104,7 @@
2013-10-26 nu774 <honeycomb77@gmail.com> 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 * tag mapping: add recorded date and tempo, remove performer->artist

10
README
View File

@ -5,7 +5,7 @@
NAME NAME
==== ====
fdkaac - command line frontend for libfdk-aac encoder   fdkaac - command line frontend for libfdk-aac encoder
SYNOPSIS SYNOPSIS
======== ========
@ -23,7 +23,7 @@ output file is "-", data is written to stdout if one of streamable AAC
transport formats are selected by **-f**. transport formats are selected by **-f**.
When CAF input and M4A output is used, tags in CAF file are copied into When CAF input and M4A output is used, tags in CAF file are copied into
the resulting M4A.   the resulting M4A.
OPTIONS OPTIONS
======= =======
@ -75,8 +75,8 @@ OPTIONS
1-5 1-5
: VBR (higher value -\> higher bitrate) : VBR (higher value -\> higher bitrate)
-w, --bandwith \<n\> -w, --bandwidth \<n\>
: Frequency bandwith (lowpass cut-off frequency) in Hz. Available on : Frequency bandwidth (lowpass cut-off frequency) in Hz. Available on
AAC LC only. AAC LC only.
-a, --afterburner \<n\> -a, --afterburner \<n\>
@ -271,7 +271,7 @@ OPTIONS
: Read tags from JSON. By default, tags are assumed to be direct : Read tags from JSON. By default, tags are assumed to be direct
children of the root object in JSON. Optionally you can specify children of the root object in JSON. Optionally you can specify
arbitrary dot notation to locate the object containing tags. arbitrary dot notation to locate the object containing tags.
 
EXAMPLES EXAMPLES
======== ========

2
genman.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/sh
pandoc -s -f markdown -t man README >fdkaac.1 && mv -f fdkaac.1 man/fdkaac.1

View File

@ -1,85 +1,84 @@
.TH FDKAAC 1 "November, 2013" .TH FDKAAC 1 "November, 2013"
.SH NAME .SH NAME
.PP .PP
fdkaac - command line frontend for libfdk-aac encoder \ fdkaac \- command line frontend for libfdk\-aac encoder
.SH SYNOPSIS .SH SYNOPSIS
.PP .PP
\f[B]fdkaac\f[] [OPTIONS] [FILE] \f[B]fdkaac\f[] [OPTIONS][FILE]
.SH DESCRIPTION .SH DESCRIPTION
.PP .PP
\f[B]fdkaac\f[] reads linear PCM audio in either WAV, raw PCM, or CAF \f[B]fdkaac\f[] reads linear PCM audio in either WAV, raw PCM, or CAF
format, and encodes it into either M4A / AAC file. format, and encodes it into either M4A / AAC file.
.PP .PP
If the input file is "-", data is read from stdin. If the input file is "\-", data is read from stdin.
Likewise, if the output file is "-", data is written to stdout if one of Likewise, if the output file is "\-", data is written to stdout if one
streamable AAC transport formats is selected by \f[B]-f\f[]. of streamable AAC transport formats are selected by \f[B]\-f\f[].
.PP .PP
When CAF input and M4A output is used, tags in CAF file are copied into When CAF input and M4A output is used, tags in CAF file are copied into
the resulting M4A. the resulting M4A.
\
.SH OPTIONS .SH OPTIONS
.TP .TP
.B -h, --help .B \-h, \-\-help
Show command help Show command help
.RS .RS
.RE .RE
.TP .TP
.B -o <FILE> .B \-o <FILE>
Output filename. Output filename.
.RS .RS
.RE .RE
.TP .TP
.B -p, --profile <n> .B \-p, \-\-profile <n>
Target profile (MPEG4 audio object type, AOT) Target profile (MPEG4 audio object type, AOT)
.RS .RS
.TP .TP
.B 2 .B 2
MPEG-4 AAC LC (default) MPEG\-4 AAC LC (default)
.RS .RS
.RE .RE
.TP .TP
.B 5 .B 5
MPEG-4 HE-AAC (SBR) MPEG\-4 HE\-AAC (SBR)
.RS .RS
.RE .RE
.TP .TP
.B 29 .B 29
MPEG-4 HE-AAC v2 (SBR+PS) MPEG\-4 HE\-AAC v2 (SBR+PS)
.RS .RS
.RE .RE
.TP .TP
.B 23 .B 23
MPEG-4 AAC LD MPEG\-4 AAC LD
.RS .RS
.RE .RE
.TP .TP
.B 39 .B 39
MPEG-4 AAC ELD MPEG\-4 AAC ELD
.RS .RS
.RE .RE
.TP .TP
.B 129 .B 129
MPEG-2 AAC LC MPEG\-2 AAC LC
.RS .RS
.RE .RE
.TP .TP
.B 132 .B 132
MPEG-2 HE-AAC (SBR) MPEG\-2 HE\-AAC (SBR)
.RS .RS
.RE .RE
.TP .TP
.B 156 .B 156
MPEG-2 HE-AAC v2 (SBR+PS) MPEG\-2 HE\-AAC v2 (SBR+PS)
.RS .RS
.RE .RE
.RE .RE
.TP .TP
.B -b, --bitrate <n> .B \-b, \-\-bitrate <n>
Target bitrate (for CBR) Target bitrate (for CBR)
.RS .RS
.RE .RE
.TP .TP
.B -m, --bitrate-mode <n> .B \-m, \-\-bitrate\-mode <n>
Bitrate configuration mode. Bitrate configuration mode.
Available VBR quality value depends on other parameters such as profile, Available VBR quality value depends on other parameters such as profile,
sample rate, or number of channels. sample rate, or number of channels.
@ -90,19 +89,19 @@ CBR (default)
.RS .RS
.RE .RE
.TP .TP
.B 1-5 .B 1\-5
VBR (higher value -> higher bitrate) VBR (higher value \-> higher bitrate)
.RS .RS
.RE .RE
.RE .RE
.TP .TP
.B -w, --bandwith <n> .B \-w, \-\-bandwidth <n>
Frequency bandwith (lowpass cut-off frequency) in Hz. Frequency bandwidth (lowpass cut\-off frequency) in Hz.
Available on AAC LC only. Available on AAC LC only.
.RS .RS
.RE .RE
.TP .TP
.B -a, --afterburner <n> .B \-a, \-\-afterburner <n>
Configure afterburner mode. Configure afterburner mode.
When enabled, quality is increased at the expense of additional When enabled, quality is increased at the expense of additional
computational workload. computational workload.
@ -119,11 +118,11 @@ On (default)
.RE .RE
.RE .RE
.TP .TP
.B -L, --lowdelay-sbr <n> .B \-L, \-\-lowdelay\-sbr <n>
Configure SBR activity on AAC ELD. Configure SBR activity on AAC ELD.
.RS .RS
.TP .TP
.B -1 .B \-1
Use ELD SBR auto configuration Use ELD SBR auto configuration
.RS .RS
.RE .RE
@ -139,7 +138,7 @@ Enable SBR on ELD
.RE .RE
.RE .RE
.TP .TP
.B -s, --sbr-ratio <n> .B \-s, \-\-sbr\-ratio <n>
Controls activation of downsampled SBR. Controls activation of downsampled SBR.
.RS .RS
.TP .TP
@ -154,30 +153,30 @@ Use downsampled SBR (default for ELD+SBR)
.RE .RE
.TP .TP
.B 2 .B 2
Use dual-rate SBR (default for HE-AAC) Use dual\-rate SBR (default for HE\-AAC)
.RS .RS
.RE .RE
.PP .PP
Dual-rate SBR is what is normally used for HE-AAC, where AAC is encoded Dual\-rate SBR is what is normally used for HE\-AAC, where AAC is
at half the sample rate of SBR, hence "dual rate". 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 On the other hand, downsampled SBR uses same sample rate for both of AAC
and SBR (single rate), therefore downsampled SBR typically consumes more and SBR (single rate), therefore downsampled SBR typically consumes more
bitrate. bitrate.
.PP .PP
Downsampled SBR is newly introduced feature in FDK encoder library Downsampled SBR is newly introduced feature in FDK encoder library
version 3.4.12. 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. will be used.
When available, dual-rate SBR is the default for HE-AAC and downsampled When available, dual\-rate SBR is the default for HE\-AAC and
SBR is the default for ELD+SBR. downsampled SBR is the default for ELD+SBR.
.PP .PP
Note that downsampled HE-AAC is not so common as dual-rate one. 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 When downsampled HE\-AAC is selected, \f[B]fdkaac\f[] is forced to
explicit hierarchical SBR signaling, which (at least) iTunes doesn\[aq]t choose explicit hierarchical SBR signaling, which (at least) iTunes
accept. doesn\[aq]t accept.
.RE .RE
.TP .TP
.B -f, --transport-format <n> .B \-f, \-\-transport\-format <n>
Transport format. Transport format.
Tagging and gapless playback is only available on M4A. Tagging and gapless playback is only available on M4A.
Streaming to stdout is only available on others. Streaming to stdout is only available on others.
@ -214,17 +213,17 @@ LOAS/LATM (LATM within LOAS)
.RE .RE
.RE .RE
.TP .TP
.B -C, --adts-crc-check .B \-C, \-\-adts\-crc\-check
Add CRC protection on ADTS header. Add CRC protection on ADTS header.
.RS .RS
.RE .RE
.TP .TP
.B -h, --header-period <n> .B \-h, \-\-header\-period <n>
StreamMuxConfig/PCE repetition period in transport layer. StreamMuxConfig/PCE repetition period in the transport layer.
.RS .RS
.RE .RE
.TP .TP
.B -G, --gapless-mode <n> .B \-G, \-\-gapless\-mode <n>
Method to declare amount of encoder delay (and padding) in M4A Method to declare amount of encoder delay (and padding) in M4A
container. container.
These values are mandatory for proper gapless playback on player side. These values are mandatory for proper gapless playback on player side.
@ -246,7 +245,7 @@ Both
.RE .RE
.RE .RE
.TP .TP
.B --include-sbr-delay .B \-\-include\-sbr\-delay
When specified, count SBR decoder delay in encoder delay. When specified, count SBR decoder delay in encoder delay.
.RS .RS
.PP .PP
@ -262,44 +261,44 @@ playback.
LC doesn\[aq]t have such issues. LC doesn\[aq]t have such issues.
.RE .RE
.TP .TP
.B -I, --ignorelength .B \-I, \-\-ignorelength
Ignore length field of data chunk in input WAV file. Ignore length field of data chunk in input WAV file.
.RS .RS
.RE .RE
.TP .TP
.B -S, --silent .B \-S, \-\-silent
Don\[aq]t print progress messages. Don\[aq]t print progress messages.
.RS .RS
.RE .RE
.TP .TP
.B --moov-before-mdat .B \-\-moov\-before\-mdat
Place moov box before mdat box in M4A container. Place moov box before mdat box in M4A container.
This option might be important for some hardware players, that are known This option might be important for some hardware players, that are known
to refuse moov box placed after mdat box. to refuse moov box placed after mdat box.
.RS .RS
.RE .RE
.TP .TP
.B -R, --raw .B \-R, \-\-raw
Regard input as raw PCM. Regard input as raw PCM.
.RS .RS
.RE .RE
.TP .TP
.B --raw-channels <n> .B \-\-raw\-channels <n>
Specify number of channels of raw input (default: 2) Specify number of channels of raw input (default: 2)
.RS .RS
.RE .RE
.TP .TP
.B --raw-rate <n> .B \-\-raw\-rate <n>
Specify sample rate of raw input (default: 44100) Specify sample rate of raw input (default: 44100)
.RS .RS
.RE .RE
.TP .TP
.B --raw-format <spec> .B \-\-raw\-format <spec>
Specify sample format of raw input (default: "S16L"). Specify sample format of raw input (default: "S16L").
\f[B]Spec\f[] is as the following (case insensitive): \f[B]Spec\f[] is as the following (case insensitive):
.RS .RS
.TP .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) \f[B]S\f[] (igned) | \f[B]U\f[] (nsigned) | \f[B]F\f[] (loat)
.RS .RS
.RE .RE
@ -309,102 +308,99 @@ bits per channel
.RS .RS
.RE .RE
.TP .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) \f[B]L\f[] (ittle, default) | \f[B]B\f[] (ig)
.RS .RS
.RE .RE
.RE .RE
.TP .TP
.B --title <string> .B \-\-title <string>
Set title tag. Set title tag.
.RS .RS
.RE .RE
.TP .TP
.B --artist <string> .B \-\-artist <string>
Set artist tag. Set artist tag.
.RS .RS
.RE .RE
.TP .TP
.B --album <string> .B \-\-album <string>
Set album tag. Set album tag.
.RS .RS
.RE .RE
.TP .TP
.B --genre <string> .B \-\-genre <string>
Set genre tag. Set genre tag.
.RS .RS
.RE .RE
.TP .TP
.B --date <string> .B \-\-date <string>
Set date tag. Set date tag.
.RS .RS
.RE .RE
.TP .TP
.B --composer <string> .B \-\-composer <string>
Set composer tag. Set composer tag.
.RS .RS
.RE .RE
.TP .TP
.B --grouping <string> .B \-\-grouping <string>
Set grouping tag. Set grouping tag.
.RS .RS
.RE .RE
.TP .TP
.B --comment <string> .B \-\-comment <string>
Set comment tag. Set comment tag.
.RS .RS
.RE .RE
.TP .TP
.B --album-artist <string> .B \-\-album\-artist <string>
Set album artist tag. Set album artist tag.
.RS .RS
.RE .RE
.TP .TP
.B --track <number[/total]> .B \-\-track <number[/total]>
Set track tag, with or without number of total tracks. Set track tag, with or without number of total tracks.
.RS .RS
.RE .RE
.TP .TP
.B --disk <number[/total]> .B \-\-disk <number[/total]>
Set disk tag, with or without number of total discs. Set disk tag, with or without number of total discs.
.RS .RS
.RE .RE
.TP .TP
.B --tempo <n> .B \-\-tempo <n>
Set tempo (BPM) tag. Set tempo (BPM) tag.
.RS .RS
.RE .RE
.TP .TP
.B --tag <fcc>:<value> .B \-\-tag <fcc>:<value>
Set iTunes predefined tag with explicit fourcc key and value. Set iTunes predefined tag with explicit fourcc key and value.
See See <https://code.google.com/p/mp4v2/wiki/iTunesMetadata> for known
https://code.google.com/p/mp4v2/wiki/iTunesMetadata (https://code.google.com/p/mp4v2/wiki/iTunesMetadata) predefined keys.
for known predefined keys.
You can omit first char of \f[B]fcc\f[] when it is the copyright sign. You can omit first char of \f[B]fcc\f[] when it is the copyright sign.
.RS .RS
.RE .RE
.TP .TP
.B --tag-from-file <fcc>:<filename> .B \-\-tag\-from\-file <fcc>:<filename>
Same as --tag, but set content of file as tag value. Same as \-\-tag, but set content of file as tag value.
.RS .RS
.RE .RE
.TP .TP
.B --long-tag <name>:<value> .B \-\-long\-tag <name>:<value>
Set arbitrary tag as iTunes custom metadata. Set arbitrary tag as iTunes custom metadata.
Stored in com.apple.iTunes field. Stored in com.apple.iTunes field.
.RS .RS
.RE .RE
.TP .TP
.B --tag-from-json <filename[?dot_notation]> .B \-\-tag\-from\-json <filename[?dot_notation]>
Read tags from JSON. Read tags from JSON.
By default, tags are assumed to be direct children of the root object in By default, tags are assumed to be direct children of the root object in
JSON. 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. containing tags.
.RS .RS
.RE .RE
.PP
\
.SH EXAMPLES .SH EXAMPLES
.PP .PP
Encode WAV file into a M4A file. Encode WAV file into a M4A file.
@ -412,16 +408,16 @@ MPEG4 AAC LC, VBR quality 3:
.IP .IP
.nf .nf
\f[C] \f[C]
fdkaac\ -m3\ foo.wav fdkaac\ \-m3\ foo.wav
\f[] \f[]
.fi .fi
.PP .PP
Encode WAV file into a M4A file. Encode WAV file into a M4A file.
MPEG4 HE-AAC, bitrate 64kbps: MPEG4 HE\-AAC, bitrate 64kbps:
.IP .IP
.nf .nf
\f[C] \f[C]
fdkaac\ -p5\ -b64\ foo.wav fdkaac\ \-p5\ \-b64\ foo.wav
\f[] \f[]
.fi .fi
.PP .PP
@ -429,7 +425,7 @@ Piping from \f[B]ffmpeg\f[] (you need version supporting CAF output):
.IP .IP
.nf .nf
\f[C] \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[] \f[]
.fi .fi
.PP .PP
@ -437,10 +433,10 @@ Import tags via json:
.IP .IP
.nf .nf
\f[C] \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\ |\ \\ flac\ \-dc\ foo.flac\ |\ \\
fdkaac\ -\ -ox.m4a\ -m2\ --import-tag-from-json=foo.json?format.tags fdkaac\ \-\ \-ox.m4a\ \-m2\ \-\-import\-tag\-from\-json=foo.json?format.tags
\f[] \f[]
.fi .fi
.SH NOTES .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. Upto 32bit integer or 64bit floating point format is supported as input.
However, FDK library is implemented based on fixed point math and only However, FDK library is implemented based on fixed point math and only
supports 16bit integer PCM. 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 You might want to dither/noise shape beforehand when your input has
higher resolution. higher resolution.
.PP .PP

View File

@ -225,6 +225,7 @@ pcm_reader_t *caf_open(pcm_io_context_t *io,
memcpy(&reader->io, io, sizeof(pcm_io_context_t)); memcpy(&reader->io, io, sizeof(pcm_io_context_t));
reader->tag_callback = tag_callback; reader->tag_callback = tag_callback;
reader->tag_ctx = tag_ctx; reader->tag_ctx = tag_ctx;
memcpy(reader->chanmap, "\000\001\002\003\004\005\006\007", 8);
if (caf_parse(reader, &data_length) < 0) { if (caf_parse(reader, &data_length) < 0) {
free(reader); free(reader);

View File

@ -204,7 +204,7 @@ int apple_chan_chunk(pcm_io_context_t *io, uint32_t chunk_size,
switch (mChannelLayoutTag) { switch (mChannelLayoutTag) {
case kAudioChannelLayoutTag_UseChannelBitmap: case kAudioChannelLayoutTag_UseChannelBitmap:
ENSURE(bitcount(mask) == nchannels); ENSURE(bitcount(mChannelBitmap) == nchannels);
TRY_IO(pcm_skip(io, chunk_size - 12)); TRY_IO(pcm_skip(io, chunk_size - 12));
fmt->channel_mask = mChannelBitmap; fmt->channel_mask = mChannelBitmap;
for (i = 0; i < nchannels; ++i) for (i = 0; i < nchannels; ++i)

View File

@ -1,4 +1,4 @@
#ifndef VERSION_H #ifndef VERSION_H
#define VERSION_H #define VERSION_H
const char *fdkaac_version = "0.5.1"; const char *fdkaac_version = "0.5.3";
#endif #endif