Chcę przekonwertować moją muzykę z flac na ogg, a obecnie oggenc robi to doskonale, z wyjątkiem okładek albumów. Metaflac może wyświetlać okładki albumów, jednak wydaje się, że nie ma narzędzia wiersza poleceń do osadzania okładek albumów w OGG. MP3tag i EasyTAG są w stanie to zrobić, i nie ma na to specyfikacja tutaj który domaga obraz ma być zakodowane base64. Jednak jak dotąd nie udało mi się pobrać pliku obrazu, przekonwertować go na base64 i osadzić w pliku ogg.
Jeśli pobiorę obraz zakodowany w standardzie base64 z pliku ogg, który ma już osadzony obraz, mogę łatwo osadzić go w innym obrazie za pomocą vorbiscomment:
vorbiscomment -l withimage.ogg > textfile
vorbiscomment -c textfile noimage.ogg
Moim problemem jest pobranie czegoś w rodzaju pliku JPEG i przekonwertowanie go na base64. Obecnie mam:
base64 --wrap=0 ./image.jpg
Co daje mi plik obrazu przekonwertowany na base64, przy użyciu vorbiscomment i zgodnie z regułami tagowania, mogę osadzić go w pliku ogg w następujący sposób:
echo "METADATA_BLOCK_PICTURE=$(base64 --wrap=0 ./image.jpg)" > ./folder.txt
vorbiscomment -c textfile noimage.ogg
Jednak daje mi to ogg, którego obraz nie działa poprawnie. Zauważyłem podczas porównywania ciągów base64, że wszystkie poprawnie osadzone obrazy mają linię nagłówka, ale wszystkie ciągi base64, które generuję, nie mają tego nagłówka. Dalsza analiza nagłówka:
od -c header.txt
0000000 \0 \0 \0 003 \0 \0 \0 \n i m a g e / j p
0000020 e g \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 \0 \0 \0 \0 \0 \0 \0 \0 035 332
0000052
Który jest zgodny ze specyfikacją podaną powyżej. Uwaga 003 odpowiada przedniej okładce, a image / jpeg to typ MIME.
Wreszcie moje pytanie brzmi: w jaki sposób mogę zakodować plik base64 i wygenerować ten nagłówek wraz z nim do osadzenia w pliku ogg?
Nie jestem świadomy niczego, co robi to automatycznie, po prostu wskazując na obraz.
Jednak vorbiscomment może osadzać dowolne znaczniki, wystarczy zakodować obraz w base64, a następnie skonstruować znacznik we właściwym formacie .
na przykład
vorbiscomment -a -t 'METADATA_BLOCK_PICTURE=...' file.ogg newfile.ogg
będziesz musiał zhakować te kroki do jakiegoś skryptu, aby był on użyteczny.
źródło
getconf ARG_MAX
? Niestety nie można obejść tego ograniczenia bez ponownej kompilacji jądra. Tutaj na 64-bitowej wersji 2.6.32-24 mam 2 MB.