CutePoisonX / PoisonConvert

A little tool to batch-convert movies
www.mediaware-factory.com
GNU General Public License v3.0
10 stars 3 forks source link

Incorrect Audio track identification #5

Closed moodyblue closed 9 years ago

moodyblue commented 9 years ago

Hello, and thanks for this great tool. I've just "discovered" it...

I have an issue. I have one mkv where poisonconvert does not identifies the audio codec correctly, here is a sample of the log:

  1. Analyzed File

    Video: Container mkv Codec h264 Bitrate 23.98 Resolution 960x540 Fps 23.98

    Audio: Codec z Channels fltp Language HE-AAC Bitrate tp Sample Rate stereo,

    Subtitles: Codec ass Language dut

Can you help ?

CutePoisonX commented 9 years ago

Hi, sorry for that. This looks like a bug in the ffprobe parser. In order for me to debug it, I need the output of ffprobe. Please open a terminal and execute the following command: ffprobe -print_format compact "yourmovie.mkv" Where yourmovie.mkv needs to be replaced with the absolute or relative path to the concerning movie (incl. the filename). Thx

moodyblue commented 9 years ago

Thanks for fast answer. Here is the ffprobe output

DS411slim> ffprobe -print_format compact Downfall\ (2004)\ m-HD.mkv >ffprobe.lst ffprobe version N-71997-g5c8809b Copyright (c) 2007-2015 the FFmpeg developers built with gcc 4.2.3 (GCC) configuration: --enable-shared --enable-gpl --enable-memalign-hack --enable-version3 --enable-nonfree --disable-armv6 --disable-armv6t2 --disable-ffplay --disable-ffserver --prefix=/opt --disable-neon --disable-asm --enable-avcodec --arch=arm --cpu=armv5te --enable-pthreads --disable-decoder=zmbv --target-os=linux --enable-armv5te --enable-libx264 --enable-libfaac libavutil 54. 23.101 / 54. 23.101 libavcodec 56. 38.100 / 56. 38.100 libavformat 56. 32.100 / 56. 32.100 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 16.101 / 5. 16.101 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, matroska,webm, from 'Downfall (2004) m-HD.mkv': Metadata: encoder : libebml v1.0.0 + libmatroska v1.0.0 creation_time : 2010-09-22 10:37:39 Duration: 02:35:11.45, start: 0.000000, bitrate: 730 kb/s Stream #0:0: Video: h264 (High), yuv420p, 960x540 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default) Stream #0:1: Audio: aac (HE-AAC), 48000 Hz, stereo, fltp (default) Stream #0:2(dut): Subtitle: ass Stream #0:3(eng): Subtitle: ass Stream #0:4(fre): Subtitle: ass Stream #0:5(pol): Subtitle: ass Stream #0:6(por): Subtitle: ass Stream #0:7(rum): Subtitle: ass Stream #0:8(swe): Subtitle: ass Stream #0:9: Attachment: ttf Metadata: filename : CronosPro-SemiboldIt.ttf mimetype : application/x-truetype-font Stream #0:10: Attachment: ttf Metadata: filename : CronosPro-Bold.ttf mimetype : application/x-truetype-font Stream #0:11: Attachment: ttf Metadata: filename : CronosPro-Semibold.ttf mimetype : application/x-truetype-font Unsupported codec with id 98304 for input stream 9 Unsupported codec with id 98304 for input stream 10 Unsupported codec with id 98304 for input stream 11

CutePoisonX commented 9 years ago

Ok, I'm working on it ... I always wished to build a regex based parser but since the g++ which you get with ipkg on synology diskstations does not support c++11, I had to do it the "dirty way". However, I discovered that nice option in ffprobe "-show_streams" which gives a much simpler-to-parse output. Please execute ffprobe again, this time with: ffprobe -print_format compact -show_streams "yourmovie.mkv". Btw. I think the reason why it does not detect your audio stream correctly is because it does not display a language next to the stream number ... Anyway, the problem should be gone with the new parser (which should not be too much work i guess...)

moodyblue commented 9 years ago

Thanks for the explanation. Here it goes:

DS411slim> ffprobe -print_format compact -show_streams test.mkv ffprobe version N-71997-g5c8809b Copyright (c) 2007-2015 the FFmpeg developers built with gcc 4.2.3 (GCC) configuration: --enable-shared --enable-gpl --enable-memalign-hack --enable-version3 --enable-nonfree --disable-armv6 --disable-armv6t2 --disable-ffplay --disable-ffserver --prefix=/opt --disable-neon --disable-asm --enable-avcodec --arch=arm --cpu=armv5te --enable-pthreads --disable-decoder=zmbv --target-os=linux --enable-armv5te --enable-libx264 --enable-libfaac libavutil 54. 23.101 / 54. 23.101 libavcodec 56. 38.100 / 56. 38.100 libavformat 56. 32.100 / 56. 32.100 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 16.101 / 5. 16.101 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, matroska,webm, from 'test.mkv': Metadata: encoder : libebml v1.0.0 + libmatroska v1.0.0 creation_time : 2010-09-22 10:37:39 Duration: 02:35:11.45, start: 0.000000, bitrate: 730 kb/s Stream #0:0: Video: h264 (High), yuv420p, 960x540 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default) Stream #0:1: Audio: aac (HE-AAC), 48000 Hz, stereo, fltp (default) Stream #0:2(dut): Subtitle: ass Stream #0:3(eng): Subtitle: ass Stream #0:4(fre): Subtitle: ass Stream #0:5(pol): Subtitle: ass Stream #0:6(por): Subtitle: ass Stream #0:7(rum): Subtitle: ass Stream #0:8(swe): Subtitle: ass Stream #0:9: Attachment: ttf Metadata: filename : CronosPro-SemiboldIt.ttf mimetype : application/x-truetype-font Stream #0:10: Attachment: ttf Metadata: filename : CronosPro-Bold.ttf mimetype : application/x-truetype-font Stream #0:11: Attachment: ttf Metadata: filename : CronosPro-Semibold.ttf mimetype : application/x-truetype-font Unsupported codec with id 98304 for input stream 9 Unsupported codec with id 98304 for input stream 10 Unsupported codec with id 98304 for input stream 11 stream|index=0|codec_name=h264|codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10|profile=High|codec_type=video|codec_time_base=104271/5000000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=960|height=540|coded_width=960|coded_height=544|has_b_frames=2|sample_aspect_ratio=1:1|display_aspect_ratio=16:9|pix_fmt=yuv420p|level=41|color_range=N/A|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|timecode=N/A|refs=8|is_avc=1|nal_length_size=4|id=N/A|r_frame_rate=24000/1001|avg_frame_rate=24000/1001|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0 stream|index=1|codec_name=aac|codec_long_name=AAC (Advanced Audio Coding)|profile=HE-AAC|codec_type=audio|codec_time_base=1/48000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|sample_fmt=fltp|sample_rate=48000|channels=2|channel_layout=stereo|bits_per_sample=0|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0 stream|index=2|codec_name=ass|codec_long_name=ASS (Advanced SubStation Alpha) subtitle|profile=unknown|codec_type=subtitle|codec_time_base=1/1000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=N/A|height=N/A|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=9311446|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:language=dut stream|index=3|codec_name=ass|codec_long_name=ASS (Advanced SubStation Alpha) subtitle|profile=unknown|codec_type=subtitle|codec_time_base=1/1000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=N/A|height=N/A|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=9311446|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:language=eng stream|index=4|codec_name=ass|codec_long_name=ASS (Advanced SubStation Alpha) subtitle|profile=unknown|codec_type=subtitle|codec_time_base=1/1000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=N/A|height=N/A|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=9311446|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:language=fre stream|index=5|codec_name=ass|codec_long_name=ASS (Advanced SubStation Alpha) subtitle|profile=unknown|codec_type=subtitle|codec_time_base=1/1000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=N/A|height=N/A|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=9311446|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:language=pol stream|index=6|codec_name=ass|codec_long_name=ASS (Advanced SubStation Alpha) subtitle|profile=unknown|codec_type=subtitle|codec_time_base=1/1000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=N/A|height=N/A|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=9311446|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:language=por stream|index=7|codec_name=ass|codec_long_name=ASS (Advanced SubStation Alpha) subtitle|profile=unknown|codec_type=subtitle|codec_time_base=1/1000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=N/A|height=N/A|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=9311446|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:language=rum stream|index=8|codec_name=ass|codec_long_name=ASS (Advanced SubStation Alpha) subtitle|profile=unknown|codec_type=subtitle|codec_time_base=1/1000|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=N/A|height=N/A|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=9311446|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:language=swe stream|index=9|codec_name=ttf|codec_long_name=TrueType font|profile=unknown|codec_type=attachment|codec_time_base=0/1|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=838030140|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:filename=CronosPro-SemiboldIt.ttf|tag:mimetype=application/x-truetype-font stream|index=10|codec_name=ttf|codec_long_name=TrueType font|profile=unknown|codec_type=attachment|codec_time_base=0/1|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=838030140|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:filename=CronosPro-Bold.ttf|tag:mimetype=application/x-truetype-font stream|index=11|codec_name=ttf|codec_long_name=TrueType font|profile=unknown|codec_type=attachment|codec_time_base=0/1|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=838030140|duration=9311.446000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=N/A|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:filename=CronosPro-Semibold.ttf|tag:mimetype=application/x-truetype-font DS411slim>

CutePoisonX commented 9 years ago

Thank you, I'm on it now. I let you know if it is ready (should not take too long).

CutePoisonX commented 9 years ago

Hi, the new parser is ready now. Please download the newest version in the testing branch, try it and report back. I hope it works for you now!

moodyblue commented 9 years ago

Thanks a lot, but now I need another kind of help.

In the meantime I've upgraded from DSM 5.1 to 5.2 and the make command is no longer available. Do I need to bootstrap the Syno again ? What else do I need to do ? Sorry, I'm not a Linux expert...

2015-05-13 15:20 GMT+01:00 CutePoisonX notifications@github.com:

Hi, the new parser is ready now. Please download the newest version in the testing branch, try it and report back. I hope works for you now!

— Reply to this email directly or view it on GitHub https://github.com/CutePoisonX/PoisonConvert/issues/5#issuecomment-101682845 .

CutePoisonX commented 9 years ago

Oh, I see ... no, you don't have to bootstrap it again. Just make sure that in the file /root/.profile the line containing PATH=... starts with PATH=/opt/bin:/opt/sbin: In my case e.g. it is: PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin If you need help editing the file, feel free to ask.

moodyblue commented 9 years ago

I was able to correct the problem with ffmpeg (recompiling again), and now poisonconvert was able to convert the mkv into m4v preserving the video and the audio streams. Thanks a lot. This is a great tool, with a great potential. Now I want to make the following, maybe you can guide me in the right direction:

  1. Extract srt tracks from the mkv file into separate srt files, one for each language
  2. In case the input file has several audio tracks, for example aac-2ch and ac3-5.1, is it possible to remux both audio tracks together withthe video track ?
  3. How can I establish a run calendar for poisonconvert ?

2015-05-13 16:34 GMT+01:00 CutePoisonX notifications@github.com:

Oh, i see ... no, you don't have to bootstrap it again. Just make sure that in the file /root/.profile the line containing PATH=... starts with PATH=/opt/bin:/opt/sbin: In my case e.g. it is:

PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin If you need help editing the file, feel free to ask.

— Reply to this email directly or view it on GitHub https://github.com/CutePoisonX/PoisonConvert/issues/5#issuecomment-101717294 .

moodyblue commented 9 years ago

Well, not 100% correct, I think. I have these rules:

VIDEO-RULES: 1) Container is mkv, Codec is h264 -> 1) Container: m4v, Codec: copy, Bitrate: unchanged, Resolution: unchanged, Fps: unchanged

AUDIO-RULES: 1) Codec is ac3, Channels is 6 -> 1) Codec: copy, Channels: unchanged, Language: unchanged, Bitrate: unchanged, Sample Rate: unchanged 2) Codec is aac, Channels is 2 -> 1) Codec: copy, Channels: unchanged, Language: unchanged, Bitrate: unchanged, Sample Rate: unchanged

SUBTITLE-RULES: 1) Codec is subrip, Language is eng -> 1) Codec: mov_text

If I use start twice, the first time it runs Ok, but the second time it tries to process the m4v and log files, it should do nothing the second run

2015-05-13 23:09 GMT+01:00 Hugo Castelo Branco <hugo.castelobranco@gmail.com

:

I was able to correct the problem with ffmpeg (recompiling again), and now poisonconvert was able to convert the mkv into m4v preserving the video and the audio streams. Thanks a lot. This is a great tool, with a great potential. Now I want to make the following, maybe you can guide me in the right direction:

  1. Extract srt tracks from the mkv file into separate srt files, one for each language
  2. In case the input file has several audio tracks, for example aac-2ch and ac3-5.1, is it possible to remux both audio tracks together withthe video track ?
  3. How can I establish a run calendar for poisonconvert ?

2015-05-13 16:34 GMT+01:00 CutePoisonX notifications@github.com:

Oh, i see ... no, you don't have to bootstrap it again. Just make sure that in the file /root/.profile the line containing PATH=... starts with PATH=/opt/bin:/opt/sbin: In my case e.g. it is:

PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin If you need help editing the file, feel free to ask.

— Reply to this email directly or view it on GitHub https://github.com/CutePoisonX/PoisonConvert/issues/5#issuecomment-101717294 .

CutePoisonX commented 9 years ago

Thanks a lot. This is a great tool, with a great potential.

Thank you! Although I think there is a lot of room for improvement ;)

  1. Extract srt tracks from the mkv file into separate srt files, one for each language

I don't think the program can do this because it lacks several extracting abilities. However, I think I can implement this in further releases, thanks for the suggestion! Why exactly do you want to extract all subtitles?

  1. In case the input file has several audio tracks, for example aac-2ch and ac3-5.1, is it possible to remux both audio tracks together withthe video track ?

If I understand you correctly, you have a single video file with more than one audio track and you wish to have both audio tracks available in your converted file? This is achieved by a separate rule. E.g. when I look at your config-file you have two audio rules specified. One for aac streams and one for ac3 streams. If you want all other audio-streams to be also included in your converted file, you will have to add a rule with priority 3 (lowest) where for every parameter you write: '-'. So basically any audio stream is matched after the rules with the priority 1 and 2 were processed. If I did not understand you correctly, please elaborate.

  1. How can I establish a run calendar for poisonconvert ?

Cron is the way to go here. Just google "cron synology" and you should get lots of results ...

If I use start twice, the first time it runs Ok, but the second time it tries to process the m4v and log files, it should do nothing the second run

You were right, I hope I have fixed it now. Please download again and checkout to the testing branch like before.

Thx for your feedback and please report back!

moodyblue commented 9 years ago

Thanks again. I think it's fixed now.

The reason why I want to extract srt's into external files is because I use Plex (as media server) installed in a Synology NAS with ARM processor. This processor is too slow to "mux" subtitles into the video. My Plex client is running on an AppleTV3. It has the capability to remux subtitles if, and only if, they are external SRT / SSA files (imbedded subtitle tracks are not an option).

I saw that your tool can extract audio tracks into separate files, so I thought, why not subtitles ? I know that ffmpeg can do it

CutePoisonX commented 9 years ago

The reason why I want to extract srt's into external files is because I use Plex (as media server) installed in a Synology NAS with ARM processor. This processor is too slow to "mux" subtitles into the video. My Plex client is running on an AppleTV3. It has the capability to remux subtitles if, and only if, they are external SRT / SSA files (imbedded subtitle tracks are not an option).

This makes sense. I think I will implement this in the next version. Thanks for your participation!