Ticket #2796: diff

File diff, 7.2 KB (added by anonymous, 14 years ago)

diff

  • mytharchive/mythburn/scripts/mythburn.py

     
    28362836
    28372837
    28382838# tuple index constants
    2839 VIDEO_INDEX = 0
    2840 VIDEO_CODEC = 1
    2841 VIDEO_ID    = 2
     2839VIDEO_INDEX   = 0
     2840VIDEO_CODEC   = 1
     2841VIDEO_ID      = 2
    28422842
    2843 AUDIO_INDEX = 0
    2844 AUDIO_CODEC = 1
    2845 AUDIO_ID    = 2
    2846 AUDIO_LANG  = 3
     2843AUDIO_INDEX   = 0
     2844AUDIO_CODEC   = 1
     2845AUDIO_ID      = 2
     2846AUDIO_LANG    = 3
     2847AUDIO_BITRATE = 4
    28472848
    28482849def selectStreams(folder):
    28492850    """Choose the streams we want from the source file"""
    28502851
    2851     video    = (-1, 'N/A', -1)         # index, codec, ID
    2852     audio1   = (-1, 'N/A', -1, 'N/A')  # index, codec, ID, lang
    2853     audio2   = (-1, 'N/A', -1, 'N/A')
     2852    video    = (-1, 'N/A', -1)             # index, codec, ID
     2853    audio1   = (-1, 'N/A', -1, 'N/A', -1)  # index, codec, ID, lang, bitrate
     2854    audio2   = (-1, 'N/A', -1, 'N/A', -1)
    28542855
    28552856    #open the XML containing information about this file
    28562857    infoDOM = xml.dom.minidom.parse(os.path.join(folder, 'streaminfo.xml'))
     
    28932894        lang = node.attributes["language"].value
    28942895        format = string.upper(node.attributes["codec"].value)
    28952896        pid = int(node.attributes["id"].value)
     2897        bitrate = int(node.attributes["bitrate"].value)
    28962898        if lang == preferredlang1 and format == "AC3":
    28972899            if found:
    2898                 if pid < audio1[AUDIO_ID]:
    2899                     audio1 = (index, format, pid, lang)
     2900                if bitrate > audio1[AUDIO_BITRATE]:
     2901                    audio1 = (index, format, pid, lang, bitrate)
    29002902            else:
    2901                 audio1 = (index, format, pid, lang)
     2903                audio1 = (index, format, pid, lang, bitrate)
    29022904            found = True
    29032905
    29042906    # second try to find a stream with mp2 and preferred language 1
     
    29082910            lang = node.attributes["language"].value
    29092911            format = string.upper(node.attributes["codec"].value)
    29102912            pid = int(node.attributes["id"].value)
     2913            bitrate = int(node.attributes["bitrate"].value)
    29112914            if lang == preferredlang1 and format == "MP2":
    29122915                if found:
    2913                     if pid < audio1[AUDIO_ID]:
    2914                         audio1 = (index, format, pid, lang)
     2916                    if bitrate > audio1[AUDIO_BITRATE]:
     2917                        audio1 = (index, format, pid, lang, bitrate)
    29152918                else:
    2916                     audio1 = (index, format, pid, lang)
     2919                    audio1 = (index, format, pid, lang, bitrate)
    29172920                found = True
    29182921
    29192922    # finally use the stream with the lowest pid, prefer ac3 over mp2
     
    29222925            index = int(node.attributes["ffmpegindex"].value)
    29232926            format = string.upper(node.attributes["codec"].value)
    29242927            pid = int(node.attributes["id"].value)
     2928            bitrate = int(node.attributes["bitrate"].value)
    29252929            if not found:
    2926                 audio1 = (index, format, pid, lang)
     2930                audio1 = (index, format, pid, lang, bitrate)
    29272931                found = True
    29282932            else:
    29292933                if format == "AC3" and audio1[AUDIO_CODEC] == "MP2":
    2930                     audio1 = (index, format, pid, lang)
     2934                    audio1 = (index, format, pid, lang, bitrate)
    29312935                else:
    2932                     if pid < audio1[AUDIO_ID]:
    2933                         audio1 = (index, format, pid, lang)
     2936                    if bitrate > audio1[AUDIO_BITRATE]:
     2937                        audio1 = (index, format, pid, lang, bitrate)
    29342938
    29352939    # do we need to find a second audio stream?
    29362940    if preferredlang1 != preferredlang2 and nodes.length > 1:
     
    29412945            lang = node.attributes["language"].value
    29422946            format = string.upper(node.attributes["codec"].value)
    29432947            pid = int(node.attributes["id"].value)
     2948            bitrate = int(node.attributes["bitrate"].value)
    29442949            if lang == preferredlang2 and format == "AC3":
    29452950                if found:
    2946                     if pid < audio2[AUDIO_ID]:
    2947                         audio2 = (index, format, pid, lang)
     2951                    if bitrate > audio2[AUDIO_BITRATE]:
     2952                        audio2 = (index, format, pid, lang, bitrate)
    29482953                else:
    2949                     audio2 = (index, format, pid, lang)
     2954                    audio2 = (index, format, pid, lang, bitrate)
    29502955                found = True
    29512956
    29522957        # second try to find a stream with mp2 and preferred language 2
     
    29562961                lang = node.attributes["language"].value
    29572962                format = string.upper(node.attributes["codec"].value)
    29582963                pid = int(node.attributes["id"].value)
     2964                bitrate = int(node.attributes["bitrate"].value)
    29592965                if lang == preferredlang2 and format == "MP2":
    29602966                    if found:
    2961                         if pid < audio2[AUDIO_ID]:
    2962                             audio2 = (index, format, pid, lang)
     2967                        if bitrate > audio2[AUDIO_BITRATE]:
     2968                            audio2 = (index, format, pid, lang, bitrate)
    29632969                    else:
    2964                         audio2 = (index, format, pid, lang)
     2970                        audio2 = (index, format, pid, lang, bitrate)
    29652971                    found = True
    29662972
    29672973        # finally use the stream with the lowest pid, prefer ac3 over mp2
     
    29702976                index = int(node.attributes["ffmpegindex"].value)
    29712977                format = string.upper(node.attributes["codec"].value)
    29722978                pid = int(node.attributes["id"].value)
     2979                bitrate = int(node.attributes["bitrate"].value)
    29732980                if not found:
    29742981                    # make sure we don't choose the same stream as audio1
    29752982                    if pid != audio1[AUDIO_ID]:
    2976                         audio2 = (index, format, pid, lang)
     2983                        audio2 = (index, format, pid, lang, bitrate)
    29772984                        found = True
    29782985                else:
    29792986                    if format == "AC3" and audio2[AUDIO_CODEC] == "MP2" and pid != audio1[AUDIO_ID]:
    2980                         audio2 = (index, format, pid, lang)
     2987                        audio2 = (index, format, pid, lang, bitrate)
    29812988                    else:
    2982                         if pid < audio2[AUDIO_ID] and pid != audio1[AUDIO_ID]:
    2983                             audio2 = (index, format, pid, lang)
     2989                        if bitrate > audio2[AUDIO_BITRATE] and pid != audio1[AUDIO_ID]:
     2990                            audio2 = (index, format, pid, lang, bitrate)
    29842991
    2985     write("Video id: 0x%x, Audio1: [%d] 0x%x (%s, %s), Audio2: [%d] - 0x%x (%s, %s)" % \
    2986         (video[VIDEO_ID], audio1[AUDIO_INDEX], audio1[AUDIO_ID], audio1[AUDIO_CODEC], audio1[AUDIO_LANG], \
    2987          audio2[AUDIO_INDEX], audio2[AUDIO_ID], audio2[AUDIO_CODEC], audio2[AUDIO_LANG]))
     2992    write("Video id: 0x%x, Audio1: [%d] 0x%x (%s, %s, %d), Audio2: [%d] - 0x%x (%s, %s, %d)" % \
     2993        (video[VIDEO_ID], audio1[AUDIO_INDEX], audio1[AUDIO_ID], audio1[AUDIO_CODEC], audio1[AUDIO_LANG], audio1[AUDIO_BITRATE], \
     2994         audio2[AUDIO_INDEX], audio2[AUDIO_ID], audio2[AUDIO_CODEC], audio2[AUDIO_LANG], audio2[AUDIO_BITRATE]))
    29882995
    29892996    return (video, audio1, audio2)
    29902997