48e2f01c |
1 | ========================================================================== |
2 | fdkaac - command line frontend encoder for libfdk-aac |
3 | ========================================================================== |
4 | |
5 | Prerequisites |
6 | ------------- |
e9014663 |
7 | You need libfdk-aac. |
8 | On Posix environment, you will also need GNU gettext (for iconv.m4) and |
9 | GNU autoconf/automake. |
10 | |
11 | How to build on Posix environment |
12 | --------------------------------- |
13 | First, you need to build libfdk-aac and install on your system. |
14 | Once you have done it, the following will do the task. |
15 | (MinGW build can be done the same way, and doesn't require gettext/iconv) |
48e2f01c |
16 | |
48e2f01c |
17 | $ autoreconf -i |
e9014663 |
18 | $ ./configure && make && make install |
19 | |
20 | How to build on MSVC |
21 | -------------------- |
22 | First you have to extract libfdk-aac source here, so that directory tree will |
23 | look like the following: |
24 | +- fdk-aac ---+-documentation |
25 | | +-libAACdec |
26 | | +-libAACenc |
27 | | : |
28 | +- m4 |
29 | +- missings |
30 | +- MSVC |
31 | +- src |
32 | |
33 | MSVC solution for Visual Studio 2010 is under MSVC directory. |
a56831da |
34 | |
afe73f49 |
35 | Available input format |
36 | ---------------------- |
37 | WAV (or RF64), upto 32bit int / 64bit float format is supported. |
38 | However, since FDK AAC encoder is implemented based on fixed point integer, |
39 | encoder itself treats 16bit input only. |
40 | Therefore, when feeding non-integer input, be careful so that input doesn't |
41 | exceed 0dBFS to avoid hard clips. |
42 | You might also want to apply dither/noise shape beforehand when your input |
43 | has higher resolution. |
44 | |
45 | Note that fdkaac doesn't automatically resample for you |
46 | when input samplerate is not supported by AAC spec. |
47 | |
a56831da |
48 | Tagging Options |
49 | --------------- |
50 | Generic tagging options like --tag, --tag-from-file, --long-tag allows you |
51 | to set arbitrary tags. |
52 | Available tags and their fcc (four char code) for --tag and --tag-from-file |
53 | can be found at http://code.google.com/p/mp4v2/wiki/iTunesMetadata |
54 | |
55 | For tags such as Artist where first char of fcc is copyright sign, |
56 | you can skip first char and just say like --tag="ART:Foo Bar" or |
57 | --tag-from-file=lyr:/path/to/your/lyrics.txt |
adbd1aac |
58 | |
59 | Currently, --tag-from-file just stores file contents into m4a without any |
60 | character encoding / line terminater conversion. |
61 | Therefore, only use UTF-8 (without BOM) when setting text tags by this option. |
62 | |
63 | On the other hand, --tag / --long-tag (and other command line arguments) are |
64 | converted from locale character encoding to UTF-8 on Posix environment. |
65 | On Windows, command line arguments are always treated as Unicode. |
cbb23cdb |
66 | |
67 | Tagging using JSON |
68 | ------------------ |
69 | With --tag-from-json, fdkaac can read JSON file and set tags from it. |
70 | By default, tags are assumed to be in the root object(dictionary) like this: |
71 | |
72 | { |
73 | "title": "No Expectations", |
74 | "artist": "The Rolling Stones", |
75 | "album": "Beggars Banquet", |
76 | "track": 2 |
77 | } |
78 | |
79 | In this case, you can simply specify the filename like: |
80 | --tag-from-json=/path/to/json |
81 | |
82 | If the object containing tags is placed somewhere else, you can optionally |
83 | specify the path of the object with dotted notation. |
84 | |
85 | { |
86 | "format" : { |
87 | "filename" : "Middle Curse.flac", |
88 | "nb_streams" : 1, |
89 | "format_name" : "flac", |
90 | "format_long_name" : "raw FLAC", |
91 | "start_time" : "N/A", |
92 | "duration" : "216.146667", |
93 | "size" : "11851007.000000", |
94 | "bit_rate" : "438628.000000", |
95 | "tags" : { |
96 | "ALBUM" : "Scary World Theory", |
97 | "ARTIST" : "Lali Puna", |
98 | "DATE" : "2001", |
99 | "DISCID" : "9208CC0A", |
100 | "TITLE" : "Middle Curse", |
101 | "TRACKTOTAL" : "10", |
102 | "track" : "2" |
103 | } |
104 | } |
105 | } |
106 | |
107 | In this example, tags are placed under the object "format.tags". |
108 | ("format" is a child of the root, and "tags" is a child of the "format"). |
109 | In this case, you can say: |
110 | --tag-from-json=/path/to/json?format.tags |
111 | |
112 | For your information, ffprobe of ffmpeg project (or avprobe of libav) can |
113 | output media information/metadata in json format like this. |
114 | |
115 | Note that not all tags can be read/written this way. |