per batch album art in ogg


#1

hi

ich hab ne batch datei geschrieben die mir aus allen mp4 und webm dateien aus einem ordner den musikstream rausholt, die tags kopiert und ein albumart generiert.

mit allen formaten die aac spuren tragen geht das auch, aber bei vorbis kann ich das album art nicht reinspeichern.

setlocal EnableDelayedExpansion 

if not exist "convertedFiles" mkdir convertedFiles
if not exist "originalFiles" mkdir originalFiles
if not exist "tmp" mkdir tmp
 
for %%a in ("originalFiles/*.*") do (
  
 set "inputName=%%a" 
 set "inputPath=originalFiles/%%a"
 set "type=!inputName:~-4,4!"
 set "tmpArt=tmp/%%a.png"
 set "newtype=.m4a"
 set "fin=convertedFiles/!inputName:~0,-4!!newtype!"
 set "tmpAudio=tmp/%%a!newtype!"
 
 if "!type!" == "webm" (
  set "newtype=.ogg"
  set "fin=convertedFiles/!inputName:~0,-5!!newtype!"
  rem bei webm muss eins mehr weggemacht werden, weil sonst 2 punkte in fin sind
  set "tmpAudio=tmp/%%a!newtype!"
 )
 
 
 ffmpeg -y -ss 4 -i "!inputPath!" -vf "pad=iw*2:ih:iw/2:0:black, crop=ih:ih, select=gte(n\,100)" -vframes 1 "!tmpArt!"
 ffmpeg -i "!inputPath!" -y -map audio -codec:a copy -map_metadata 0 "!tmpAudio!"
 
 rem m4a
 if "!newtype!" == ".m4a" (
  atomicparsley "!tmpAudio!" --artwork "!tmpArt!" -o "!fin!"
 )
 
 rem ogg
 if "!newtype!" == ".ogg" (
  ffmpeg -y -i "!tmpAudio!" -i "!tmpArt!" -map 0:0 -map 1:0 -c copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" "!fin!"
 )
 
)

unten unter "rem ogg"

da sollte normalerweise per ffmpeg das album art aus ner png in die ogg gepackt werden. Die png wird auch zuverlässig erzeugt.

fehlermeldungen sind folgende:

[ogg @ 000000000440a1e0] Unsupported codec id in stream 1

und

Could not write header for output file #0 (incorrect codec parameters ?): Error number -22 occurred

danke.

GFM
Torben


#2

Muss für das Bild nicht ein codec angeben werden?
-codec:v libtheora

DD.20151207.1215.CET

Siehe auch ...
https://trac.ffmpeg.org/wiki/TheoraVorbisEncodingGuide

DD.20151228.1139.CET


#3

hat nicht funktioniert. Aber danke.

Anscheinend werden tags bei oggs als vorbiscomment in form einer hashmap gespeichert. Der Name des vorbiscomments für album arts lautet "METADATA_BLOCK_PICTURE". Nur leider habe ich noch kein Programm mit dem ich ein vorbiscomment speichern kann gefunden.

ich hab zudem anstelle von atomicparsley jetzt mp4box drin, weil atomicparsley nicht alle generierten jpgs erkannt hat. Ich hab es momentan so drin, das oggs ohne albumart gespeichert werden. Hier der aktuelle code der auch soweit funktioniert:

setlocal EnableDelayedExpansion 

if not exist "convertedFiles" mkdir convertedFiles
if not exist "originalFiles" mkdir originalFiles
if not exist "tmp" mkdir tmp
    
for %%a in ("originalFiles/*.*") do (
        
    set "inputName=%%a" 
    set "inputPath=originalFiles/%%a"
    set "type=!inputName:~-4,4!"
    set "tmpArt=tmp/%%a.jpg"
    set "newtype=.m4a"
    set "fin=convertedFiles/!inputName:~0,-4!!newtype!"
    set "tmpAudio=tmp/%%a!newtype!"
    set "tmpAudioName=%%a!newtype!"
    
    if "!type!" == "webm" (
        set "newtype=.ogg"
        set "fin=convertedFiles/!inputName:~0,-5!!newtype!"
        rem bei webm muss eins mehr weggemacht werden, weil sonst 2 punkte in fin sind
        rem tmpaudio neu einstellen wegen den neuen newtype
        set "tmpAudio=tmp/%%a!newtype!"
        set "tmpAudioName=%%a!newtype!"
    )
    
    
    ffmpeg -y -ss 4 -i "!inputPath!" -vf "pad=iw*2:ih:iw/2:0:black, crop=ih:ih, select=gte(n\,100)" -vframes 1 "!tmpArt!"
    ffmpeg -i "!inputPath!" -y -map audio -codec:a copy -map_metadata 0 "!tmpAudio!"
    
    rem m4a
    if "!newtype!" == ".m4a" (
        rem atomicparsley "!tmpAudio!" --artwork "!tmpArt!" -o "!fin!"
        rem atomicparsley erkennt nicht alle jpgs
        
        mp4box -itags cover="!tmpArt!" "!tmpAudio!"
        move "tmp\!tmpAudioName!" "convertedFiles"
        ren "convertedFiles\!tmpAudioName!" "!inputName:~0,-4!!newtype!"
    )
    
    rem ogg
    if "!newtype!" == ".ogg" (
    
        rem ffmpeg -y -i "!tmpAudio!" -i "!tmpArt!" -map 0:0 -map 1:0 -c copy -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="METADATA_BLOCK_PICTURE" -codec:v libtheora "!fin!"
        copy "tmp\!inputName!!newtype!" "convertedFiles"
        ren "convertedFiles\!inputName!!newtype!" "!inputName:~0,-5!!newtype!"
    )
    
)