Jump to content

Unnecessary Transcoding (..?)


soniCron

Recommended Posts

soniCron

I've started archiving my content in VP9/Opus WEBM format, however, I've run into an issue with certain multi-channel audio formats in the browser. (Chrome 54.0.2840.71)

 

For example, VP9@1080p plays wonderfully, from Opus@stereo/5.1ch. However, Opus@7.1ch forces a transcode, as per the logs.

 

I dunno if Chrome supports 7.1 (5.1 works fine for what it's worth), and that doesn't really bother me. What I don't understand is, why does it force transcoding of the whole stream? Since the video is valid and playable, shouldn't ffmpeg be run with direct stream copy of the video and only transcode the audio..?

Link to comment
Share on other sites

soniCron

Emby 3.0.8300.0, Linux, official docker container.

 

Media info:

Media Info
Video

CodecVP9
ProfileProfile 0
Level-99
Resolution1920x808
Aspect ratio2.40:1
AnamorphicNo
InterlacedNo
Framerate23.97599
Bitrate2197 kbps
Pixel formatyuv420p
Ref frames1
TitleEng video
Audio

Languageeng
CodecOPUS
Layout7.1
Channels8 ch
Sample rate48000 Hz
DefaultYes
TitleEng video
Containerwebm
Path/movies/video/video.webm

Server Log relevant lines: 

UserId=4c972c2b39f4443b8b24a573cfc45d12&StartTimeTicks=26125692450. UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
2016-10-27 15:28:09.5341 Info App: Profile: Unknown Profile, Path: /movies/video/video.webm, isEligibleForDirectPlay: True, isEligibleForDirectStream: True
2016-10-27 15:28:09.5341 Info App: Profile: VideoAudioCodecProfile, DirectPlay=false. Reason=Unknown Profile.AudioChannels Condition: LessThanEqual. ConditionValue: 6. IsRequired: True. Path: /movies/video/video.webm
2016-10-27 15:28:09.5341 Info App: RemoteClientBitrateLimit: 4000000, RemoteIp: 10.0.1.28, IsInLocalNetwork: True
2016-10-27 15:28:09.5341 Info App: Profile: Unknown Profile, Path: /movies/video/video.webm, isEligibleForDirectPlay: True, isEligibleForDirectStream: True
2016-10-27 15:28:09.5341 Info App: Profile: VideoAudioCodecProfile, DirectPlay=false. Reason=Unknown Profile.AudioChannels Condition: LessThanEqual. ConditionValue: 6. IsRequired: True. Path: /movies/video/video.webm
2016-10-27 15:28:09.5341 Info App: RemoteClientBitrateLimit: 4000000, RemoteIp: 10.0.1.28, IsInLocalNetwork: True
2016-10-27 15:28:09.5341 Info App: Profile: Unknown Profile, Path: /movies/video/video.webm, isEligibleForDirectPlay: True, isEligibleForDirectStream: True
2016-10-27 15:28:09.5341 Info App: Profile: VideoAudioCodecProfile, DirectPlay=false. Reason=Unknown Profile.AudioChannels Condition: LessThanEqual. ConditionValue: 6. IsRequired: True. Path: /movies/video/video.webm

Transcoding log:

http://10.0.1.26:8096/emby/videos/08a462db0e16ee04d05087949fc0620f/stream.mkv?DeviceId=86d1d8b61fe0b624a82676fc8a7508b3f509b642&MediaSourceId=08a462db0e16ee04d05087949fc0620f&VideoCodec=h264&AudioCodec=mp3,aac&AudioStreamIndex=1&VideoBitrate=903401412&AudioBitrate=128000&MaxAudioChannels=6&StartTimeTicks=26125692450&Level=51&Profile=high&PlaySessionId=719ddea4abc1489f8c7421627d860289&api_key=69dbd23293e243b092458f6c54d46f24&CopyTimestamps=true&EnableSubtitlesInManifest=false&Tag=0d38ebbf4ec552d1cb11c0f0e47c7030&EnableSplittingOnNonKeyFrames=false

{"Protocol":"File","Id":"08a462db0e16ee04d05087949fc0620f","Path":"/movies/video/video.webm","Type":"Default","Container":"webm","Name":"1080P/VP9/OPUS","ETag":"0d38ebbf4ec552d1cb11c0f0e47c7030","RunTimeTicks":73422040000,"ReadAtNativeFramerate":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":false,"RequiresOpening":false,"RequiresClosing":false,"SupportsProbing":true,"VideoType":"VideoFile","MediaStreams":[{"Codec":"vp9","Language":"eng","TimeBase":"1/1000","CodecTimeBase":"583/13978","Title":"video","DisplayTitle":"Eng video","IsInterlaced":false,"BitRate":2197739,"RefFrames":1,"IsDefault":true,"IsForced":false,"Height":808,"Width":1920,"AverageFrameRate":23.97599,"RealFrameRate":23.97599,"Profile":"Profile 0","Type":"Video","AspectRatio":"2.40:1","Index":0,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"PixelFormat":"yuv420p","Level":-99,"IsAnamorphic":false},{"Codec":"opus","Language":"eng","TimeBase":"1/1000","CodecTimeBase":"1/48000","Title":"video","DisplayTitle":"Eng video","IsInterlaced":false,"ChannelLayout":"7.1","Channels":8,"SampleRate":48000,"IsDefault":true,"IsForced":false,"Type":"Audio","Index":1,"IsExternal":false,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Level":0}],"PlayableStreamFileNames":[],"Formats":[],"Bitrate":2197739,"RequiredHttpHeaders":{}}

/bin/ffmpeg -ss 00:43:32.569 -fflags +genpts -i file:"/movies/video/video.webm" -map 0:0 -map 0:1 -map -0:s -codec:v:0 libx264 -force_key_frames "expr:gte(t,n_forced*5)" -vf "scale=trunc(min(max(iw\,ih*dar)\,1280)/2)*2:trunc(ow/dar/2)*2" -copyts -avoid_negative_ts disabled -start_at_zero -pix_fmt yuv420p -preset superfast -crf 20 -tune zerolatency -b:v 2197739 -maxrate 2197739 -bufsize 4395478 -vsync -1 -profile:v high -level 4.1 -map_metadata -1 -threads 0 -codec:a:0 libmp3lame -ac 2 -ab 128000 -af "aresample=async=1,volume=2" -y "/config/transcoding-temp/d1c5901a8289097c67d6d05cf0b95ca8.mkv"


ffmpeg version 3.1.4-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.1 (Debian 5.4.1-2) 20160904
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libwebp --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libfreetype --enable-fontconfig --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --enable-libopus --enable-libass --enable-gnutls --enable-libvidstab --enable-libsoxr --enable-frei0r --enable-libfribidi --disable-indev=sndio --disable-outdev=sndio --enable-librtmp --enable-libzimg --cc=gcc-5 --disable-ffplay
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, matroska,webm, from 'file:/movies/video/video.webm':
  Metadata:
    title           : video
    encoder         : Lavf57.53.100
  Duration: 02:02:22.20, start: -0.007000, bitrate: 2197 kb/s
    Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv), 1920x808, SAR 1:1 DAR 240:101, 23.98 fps, 23.98 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      title           : video
    Stream #0:1(eng): Audio: opus, 48000 Hz, 7.1, fltp (default)
    Metadata:
      title           : video
[libx264 @ 0x554c820] using SAR=807/808
[libx264 @ 0x554c820] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x554c820] profile High, level 4.1
[libx264 @ 0x554c820] 264 - core 148 r292 72d53ab - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x3 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=2 lookahead_threads=2 sliced_threads=1 slices=2 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=1 keyint=250 keyint_min=23 scenecut=40 intra_refresh=0 rc_lookahead=0 rc=crf mbtree=0 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=2197 vbv_bufsize=4395 crf_max=0.0 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
[matroska @ 0x55786e0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Last message repeated 1 times
Output #0, matroska, to '/config/transcoding-temp/d1c5901a8289097c67d6d05cf0b95ca8.mkv':
  Metadata:
    encoder         : Lavf57.41.100
    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 1280x538 [SAR 807:808 DAR 240:101], q=-1--1, 2197 kb/s, 23.98 fps, 1k tbn, 23.98 tbc (default)
    Metadata:
      encoder         : Lavc57.48.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 2197000/0/2197000 buffer size: 4395000 vbv_delay: -1
    Stream #0:1: Audio: mp3 (libmp3lame) (U[0][0][0] / 0x0055), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      encoder         : Lavc57.48.101 libmp3lame
Stream mapping:
  Stream #0:0 -> #0:0 (vp9 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (opus (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
frame=   12 fps=0.0 q=22.0 size=     365kB time=00:43:33.48 bitrate=   1.1kbits/s speed=5.2e+03x    
frame=   39 fps= 39 q=29.0 size=     841kB time=00:43:34.63 bitrate=   2.6kbits/s speed=2.59e+03x    
frame=   69 fps= 46 q=31.0 size=    1281kB time=00:43:35.88 bitrate=   4.0kbits/s speed=1.73e+03x    
frame=   99 fps= 49 q=28.0 size=    1627kB time=00:43:37.08 bitrate=   5.1kbits/s speed=1.29e+03x    
frame=  132 fps= 52 q=28.0 size=    1949kB time=00:43:38.52 bitrate=   6.1kbits/s speed=1.03e+03x    
frame=  162 fps= 53 q=25.0 size=    2238kB time=00:43:39.74 bitrate=   7.0kbits/s speed= 859x    
frame=  196 fps= 55 q=24.0 size=    2623kB time=00:43:41.16 bitrate=   8.2kbits/s speed= 737x    
frame=  229 fps= 56 q=25.0 size=    3033kB time=00:43:42.53 bitrate=   9.5kbits/s speed= 646x    
frame=  261 fps= 57 q=27.0 size=    3429kB time=00:43:43.87 bitrate=  10.7kbits/s speed= 575x    
frame=  296 fps= 58 q=26.0 size=    3835kB time=00:43:45.36 bitrate=  12.0kbits/s speed= 518x    
frame=  330 fps= 59 q=26.0 size=    4244kB time=00:43:46.75 bitrate=  13.2kbits/s speed= 472x    
frame=  362 fps= 60 q=26.0 size=    4609kB time=00:43:48.09 bitrate=  14.4kbits/s speed= 432x    
frame=  396 fps= 60 q=27.0 size=    5020kB time=00:43:49.49 bitrate=  15.6kbits/s speed= 399x    
frame=  430 fps= 61 q=27.0 size=    5431kB time=00:43:50.88 bitrate=  16.9kbits/s speed= 371x    
frame=  462 fps= 61 q=29.0 size=    5836kB time=00:43:52.27 bitrate=  18.2kbits/s speed= 347x    
frame=  495 fps= 61 q=29.0 size=    6332kB time=00:43:53.64 bitrate=  19.7kbits/s speed= 325x    
frame=  529 fps= 61 q=24.0 size=    6685kB time=00:43:55.01 bitrate=  20.8kbits/s speed= 306x    
frame=  563 fps= 62 q=18.0 size=    6911kB time=00:43:56.49 bitrate=  21.5kbits/s speed= 289x    
frame=  595 fps= 62 q=18.0 size=    7203kB time=00:43:57.81 bitrate=  22.4kbits/s speed= 274x    
frame=  624 fps= 62 q=17.0 size=    7466kB time=00:43:59.06 bitrate=  23.2kbits/s speed= 261x    
frame=  654 fps= 62 q=18.0 size=    7813kB time=00:44:00.31 bitrate=  24.2kbits/s speed= 249x    
frame=  682 fps= 61 q=18.0 size=    8196kB time=00:44:01.44 bitrate=  25.4kbits/s speed= 237x    
frame=  706 fps= 61 q=22.0 size=    8628kB time=00:44:02.45 bitrate=  26.7kbits/s speed= 227x    
frame=  731 fps= 60 q=24.0 size=    8977kB time=00:44:03.43 bitrate=  27.8kbits/s speed= 218x    
frame=  756 fps= 60 q=24.0 size=    9273kB time=00:44:04.49 bitrate=  28.7kbits/s speed= 209x    
frame=  781 fps= 59 q=28.0 size=    9615kB time=00:44:05.52 bitrate=  29.8kbits/s speed= 201x    
frame=  803 fps= 59 q=25.0 size=    9852kB time=00:44:06.48 bitrate=  30.5kbits/s speed= 194x    
frame=  828 fps= 58 q=26.0 size=   10165kB time=00:44:07.49 bitrate=  31.5kbits/s speed= 187x    
frame=  854 fps= 58 q=25.0 size=   10460kB time=00:44:08.64 bitrate=  32.4kbits/s speed= 180x    
frame=  880 fps= 58 q=25.0 size=   10753kB time=00:44:09.72 bitrate=  33.2kbits/s speed= 175x    
frame=  906 fps= 58 q=25.0 size=   11071kB time=00:44:10.75 bitrate=  34.2kbits/s speed= 169x    
Enter command: <target>|all <time>|-1 <command>[ <argument>]

Parse error, at least 3 arguments were expected, only -1 given in string ''
frame=  926 fps= 38 q=24.0 Lsize=   11318kB time=00:44:11.66 bitrate=  35.0kbits/s speed= 107x    
video:10668kB audio:611kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.346612%
[libx264 @ 0x554c820] frame I:533   Avg QP:21.15  size: 12969
[libx264 @ 0x554c820] frame P:393   Avg QP:18.28  size: 10204
[libx264 @ 0x554c820] mb I  I16..4: 24.2% 69.2%  6.6%
[libx264 @ 0x554c820] mb P  I16..4:  7.3%  4.7%  0.7%  P16..4: 62.0%  0.0%  0.0%  0.0%  0.0%    skip:25.2%
[libx264 @ 0x554c820] 8x8 transform intra:66.4% inter:48.8%
[libx264 @ 0x554c820] coded y,uvDC,uvAC intra: 32.6% 30.0% 4.0% inter: 23.1% 16.7% 0.3%
[libx264 @ 0x554c820] i16 v,h,dc,p: 48% 28% 12% 13%
[libx264 @ 0x554c820] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 18% 18%  9%  7%  7%  8%  6%  7%
[libx264 @ 0x554c820] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 20% 16% 10%  5%  6%  5%  6%  6%
[libx264 @ 0x554c820] i8c dc,h,v,p: 56% 19% 20%  5%
[libx264 @ 0x554c820] Weighted P-Frames: Y:3.6% UV:1.0%
[libx264 @ 0x554c820] kb/s:2262.53
Edited by soniCron
Link to comment
Share on other sites

Happy2Play

Is the level correct "-99"?  Or is that considered a undefined values and presents "-99"?

VP9 Level

ID = 2, Length = 1
The data is an unsigned 8 bit integer that specifies the VP9 level. Possible values are:
10: Level 1
11: Level 1.1
20: Level 2
21: Level 2.1
30: Level 3
31: Level 3.1
40: Level 4
41: Level 4.1
50: Level 5
51: Level 5.1
52: Level 5.2
60: Level 6
61: Level 6.1
62: Level 6.2
All other values are currently undefined. See VP9 Levels [2] for definitions. 
Edited by Happy2Play
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...