Yan Seiner <yan <at> seiner.com> writes:
I'm having trouble transcoding into h264 with recent (1.0) ffmpeg.
Older versions (0.8?) did fine using this command line:
ffmpeg -i input.vob -acodec libfaac -ab 128k -vcodec libx264 -vpre normal -s 854x480 -crf 22 -threads 0 -f mp4 output.mp4
the newer versions fail with:
Undefined constant or missing '(' in 'wpred' [NULL <at> 0x177ca80] Unable to parse option value "wpred+dct8x8+fastpskip+mbtree" [NULL <at> 0x177ca80] Error setting option flags2 to value +wpred+dct8x8+fastpskip+mbtree.
Based on the little bit of research I did, I should replace -vpre normal with something like
-vcodec libx264 -c:v libx264 -preset fast -profile:v baseline
which results in this command line:
ffmpeg -i input.vob -acodec libfaac -ab 128k -vcodec libx264 -c:v libx264 -preset fast -profile:v baseline -s 854x480 -crf 22 -threads 0 -f mp4 output.mp4
the video transcodes fine, but will not play on the Roku. It plays about 30 seconds, then stops and the Roku starts buffering indefinitely. It also shows lower quality connection, and my apache logs fill up with:
(104)Connection reset by peer: core_output_filter: writing data to the network
Indicating that the Roku is resetting the connection.
Anyone transcoding for the Roku? Any suggestions?
The Roku preset provided with the Roku 4.1 SDK is old and outdated. They really need to update the SDK Encoding Guide with better examples. Make a new ffpreset libx264-roku.ffpreset with this: coder=1 flags=+loop cmp=chroma partitions=+parti8x8+parti4x4+partp8x8+partb8x8 me_method=umh subq=8 me_range=16 g=250 keyint_min=25 sc_threshold=40 i_qfactor=0.71 b_strategy=2 qcomp=0.6 qmin=10 qmax=51 qdiff=4 bf=4 refs=4 direct-pred=3 trellis=1 8x8dct=1 fast-pskip=1 mixed-refs=1 then save that preset here /usr/local/share/ffmpeg/ or to your local ffmpeg preset folder. Technically Roku can play video in other resolutions other than 480p 720p or 1080p but it doesn't like it. I would recommend using 720x480 instead of 854x480. Roku 1 doesn't like the new ffmpeg however it works fine for Roku 2 and Roku 3. It will still work on roku 1 but not as good. Try the encode with the latest version of ffmpeg and use the preset above like this for 16x9 vob files ffmpeg -i input.vob -f mp4 -aspect 16:9 -vf yadif=0:1 -vcodec libx264 -bufsize 2000k -profile:v high -level 4.0 -s 720x480 -vb 1000k -acodec libfaac -ab 128k -vpre roku -r 29.97 -adrift_threshold 0.01 -threads 0 output.mp4 for encoding avi,mpg,mp4 or mov files to roku you will need to remove the '-vf yadif=0:1' 2 pass looks better for lower bit rates. For variant stream playback using Apple ios HLS you would need to encode using the same preset like this ffmpeg -i input.vob -f mpegts -aspect 16:9 -vf yadif=0:1 -vcodec libx264 -bufsize 2000k -profile:v high -level 4.0 -s 720x480 -vb 1000k -acodec libfaac -ab 128k -vpre roku -r 29.97 -vbsf h264_mp4toannexb -adrift_threshold 0.01 -threads 0 output.1.ts This will work decently on Roku1 and perfectly on Roku2 and Roku3 Cheers!