第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 PDF 中提取聲音注釋

從 PDF 中提取聲音注釋

阿晨1998 2023-10-26 17:04:09
我有一個列出 PDF 文件注釋的腳本從 pdf 解析注釋:import popplerqt5import argparsedef extract(fn):    doc = popplerqt5.Poppler.Document.load(fn)    annotations = []    for i in range(doc.numPages()):        page = doc.page(i)        for annot in page.annotations():            contents = annot.contents()            if contents:                annotations.append(contents)                print(f'page={i + 1} {contents}')    print(f'{len(annotations)} annotation(s) found')    return annotationsif __name__ == '__main__':    parser = argparse.ArgumentParser()    parser.add_argument('fn')    args = parser.parse_args()    extract(args.fn)但它只適用于文本注釋,有很多Python庫,如Poppler、PyPDF2、PyMuPDF,我一直在搜索他們的文檔和源代碼很多,就我而言,他們無法提取聲音注釋的二進(jìn)制。你知道有哪個圖書館可以做到這一點嗎?我需要提取這些聲音注釋的二進(jìn)制文件并將它們轉(zhuǎn)換為 MP3。
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗 獲得超7個贊

PyMuPDF 的下一版本將支持提取音頻注釋。使用此腳本使用 PyMuPDF 從 PDF 中提取音頻注釋,它很容易使用,只需調(diào)用該腳本并將 PDF 文件作為第一個參數(shù)傳遞即可:python script.py myfile.pdf


注意:僅適用于 Windows。


import fitz, sys, os, subprocess

assert len(sys.argv) == 2, "need filename as parameter"

ifile = sys.argv[1]

doc = fitz.open(ifile)

ofolder = os.path.dirname(ifile)

if ofolder == "":

    ofolder = os.getcwd()

flnm = os.path.splitext(os.path.basename(ifile))[0]

defolder = ofolder + "\\" + flnm

os.mkdir(defolder)

defolder = defolder + "\\" + flnm

for page in doc:

    print(page)

    annotNumber = 1

    for annot in page.annots(types=[fitz.PDF_ANNOT_SOUND]):  

        try: 

            sound = annot.soundGet()  

        except Exception as e:

            print(e)

            continue

        for k, v in sound.items():

            print(k, "=", v if k != "stream" else len(v))

        ofile = defolder + ".page." + str(page.number) + ".annot." + str(annotNumber) + ".raw"

        fout = open(ofile,"wb") 

        fout.write(sound["stream"])

        fout.close()

        ofileffmpeg = defolder + ".page." + str(page.number) + ".annot." + str(annotNumber) + ".mp3"

        annotNumber += 1

        if "channels" in sound:

            channels = str(sound["channels"])

        else:

            channels = "1"

        if "encoding" in sound:

            if sound["encoding"] == "Signed":

                encoding = "s"

            else:

                encoding = "u"

        else:

            encoding = "u"

        if "bps" in sound:

            fmt = encoding + str(sound["bps"]) + "be"

        else:

            fmt = encoding + "8"

        subprocess.call(['ffmpeg', '-hide_banner', '-f', fmt, '-ar', str(sound["rate"]), '-ac', channels, '-i', str(ofile), str(ofileffmpeg)], shell=True)



查看完整回答
反對 回復(fù) 2023-10-26
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號