Ci którzy próbowali lub będą próbować za pomocą biblioteki Xuggle enkodować video do formatu H.264 napotkają raczej na wyjątkowy wyjątek w stylu:

java.lang.RuntimeException: could not open output encoder for stream: 0

Debugując natrafią po drodze na komunikaty serwowane z JNI o tym, że należy zrobić jakiś tajemniczy preset. Jasne ! Otóż FFMPEG wymaga by korzystając z kodeka H.264 podać dodatkowe parametry. Parametry te znajdują się w zasadzie gotowych plikach, które wystarczy podać jako pewien parametr i voila. Ale konkretnie... wielu z nas posiłkowało się dostępnym w repozytorium programem Converter. Jako, że jest to jedno wielkie skupisko antywzorów, zrobiłem 'drobna zmiana' (jak ktoś kiedyś mawiał :D ) i finalnie mam sobie klase inkubatora ustawień codeca wideo etc:

package com.gigaessentials.video.provider;
import com.gigacube.util.Assertions; import com.xuggle.xuggler.ICodec;
public final class H264OptionsProvider extends AbstractVideoOptionsProvider { public H264OptionsProvider(String presetFile) { this.codec = ICodec.findEncodingCodec(ICodec.ID.CODEC_ID_H264); setBitrateTolerance(12000000); setPreset(presetFile); }
public void afterPropertiesSet() { super.afterPropertiesSet(); Assertions.hasText(preset, "preset"); }
public String getOutputContainerFormat() { return "mov"; } }

Ustawiam property preset podając ścieżkę do pliku konfiguracji codeca. Przy standardowej konfiguracji Xuggle-a, pliki te są w folderze C:\Program Files\Xuggle\shared\ffmpeg . Ja wybrałem po prostu plik libx264-default.ffpreset.

coder=1
flags=+loop
cmp=+chroma
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=hex
subq=7
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qcomp=0.6
qmin=10
qmax=51
qdiff=4
bf=3
refs=3
directpred=1
trellis=1
flags2=+mixed_refs+wpred+dct8x8+fastpskip+mbtree
wpredp=2