〖求助〗MP4提取字幕文字的方法-有新问题

  • 西
    西小柚
    一百多个视频,每个都要提取字幕文字…都是mp.4格式的,要怎么办最快……谢谢。 iOS fly ~



    新问题来了,为什么忽然转换不出来了呢。。。说转换完毕但是没有字出来,保存的文档是空白的。
  • i
    iamez
    已经嵌入视频的字幕很难提取吧,对于无字幕视频,只能语音识别+校对了。 很大的工作量。

    有字幕的视频,当然了人工记录也可以,我觉得可能相对简单一点。
  • i
    insn
    想免费就提取MP3 讯飞转,想省力就淘宝花钱人工校对,精度高。
  • 西
    西小柚
    回复3#insn
    迅飞也要钱,我最开始想到的就是这样整理,哎。 iOS fly ~
  • 西
    西小柚
    回复2#iamez
    视频有字幕,全人工,我一个人,月底肯定弄不完。 iOS fly ~
  • l
    lsxs
    ffmpeg自己百度下
  • 西
    西小柚
    回复6#lsxs
    谢谢!! iOS fly ~
  • i
    iamez
    这个玩意不好用,我上次用了一个晚上折腾完各种注册,搞的自己是it程序员一样,上传视频听文字读取率很低,还不如网易见外平台。真心话

    楼主这个情况人工比较省事,按暂停键抄就行了,至少可以保证100%正确,又不用对时间轴的。
  • k
    kaien
    不是封装的就不可能提取出来,只能想办法摘录或者ocr了
  • l
    lsxs
    回复8#iamez
    ffmpeg是命令行程序好嘛,你搞错了吧。
  • 降温军
    把音轨提出来,然后转文字这样可行吗?
  • A
    Aweall
    没什么好办法,ffmepg隔几秒截个图,裁出文字部分去ocr,然后文本校对去重。

    如果有特效字幕估计ocr也有难度。
  • 西
    西小柚
    回复12#Aweall
    听着我就不会……头大 iOS fly ~
  • 西
    西小柚
    回复11#降温军
    上传mp3迅飞转换,也是要收费呢 iOS fly ~
  • 西
    西小柚
    回复8#iamez
    我一个人,我怕弄不完…感觉会崩溃 iOS fly ~
  • t
    tiens
    有个软件叫subrip,是从DVD的vob文件里自动OCR识别字幕的。你大不了把mp4转成vob,然后让subrip识别就行了
  • 西
    西小柚
    回复16#tiens
    谢谢!!我试试~~ iOS fly ~
  • a
    a66xr
    百度什么的都有ocr接口的,把字幕截图出来再识别
  • l
    lsxs
    你这个太慢了
  • 西
    西小柚
    ffmepg看不懂,subrip不会用。。。我烦死了
  • t
    tiens
  • 西
    西小柚
    回复18#a66xr


    可以具体说说么。。。
  • 西
    西小柚
    回复21#tiens


    恕我愚昧,我真没看懂。。。
  • i
    i4cuilione
    坚果手机可以炸声音
  • t
    tiens
    光看没用,装一个试试呗。可以用格式工厂把mp4转一个vob,然后让subrip读读看
  • 西
    西小柚
    回复25#tiens
    装了呀,然后就不会用硬字幕太烦了 iOS fly ~
  • 西
    西小柚
    回复24#i4cuilione
    什么意思?我老公备用机就是坚果iOS fly ~
  • a
    apolodi
    学好PYTHON拯救工作,响应一波D版的PYTHON热。
    1. import cv2
    2. from PIL import Image
    3. import numpy as np
    4. import os
    5. import datetime


    6. def format_time(second):
    7. hours = second // 3600
    8. minutes = (second - hours * 3600) // 60
    9. second = second - hours * 3600 - minutes * 60
    10. t = datetime.time(hour=hours, minute=minutes, second=second)
    11. return datetime.time.isoformat(t)


    12. def cal_stderr(img, imgo=None):
    13. if imgo is None:
    14. return (img ** 2).sum() / img.size * 100
    15. else:
    16. return ((img - imgo) ** 2).sum() / img.size * 100


    17. def save_image(ex_folder, img: Image, starts: int, ends: int):
    18. # 保存字幕图片到文件夹
    19. start_time = format_time(starts)
    20. end_time = format_time(ends)
    21. timeline = '-'.join([start_time, end_time]) + ".png"
    22. try:
    23. imgname = os.path.join(ex_folder, timeline)
    24. img.save(imgname)
    25. print('export subtitle at %s' % timeline)
    26. except Exception:
    27. print('export subtitle at %s error' % timeline)


    28. def export_subtitle(video_filename):
    29. ex_folder = os.path.splitext(video_filename)[0]
    30. if not os.path.exists(ex_folder):
    31. os.mkdir(ex_folder)
    32. skip_frames = 2818
    33. videoCap = cv2.VideoCapture(video_filename)
    34. for i in range(skip_frames):
    35. videoCap.read()
    36. start_frame = skip_frames
    37. curr_frame = skip_frames
    38. fps = videoCap.get(cv2.CAP_PROP_FPS)
    39. success = True
    40. subtitle_img = None
    41. last_img = None
    42. img_count = 0
    43. while success:
    44. for j in range(9):
    45. videoCap.read()
    46. curr_frame += 1
    47. success, frame = videoCap.read()
    48. curr_frame += 1
    49. if frame is None:
    50. print('video: %s finish at %d frame.' % (video_filename, curr_frame))
    51. break

    52. img = frame[:, :, 0]
    53. img = img[495:570, :]
    54. _, img = cv2.threshold(img, 220, 255, cv2.THRESH_BINARY)

    55. if cal_stderr(img) < 1:
    56. continue

    57. if img_count == 0:
    58. subtitle_img = img
    59. print('video: %s add subtitle at %d frame.' % (video_filename, curr_frame))
    60. last_img = img
    61. img_count += 1
    62. elif img_count > 10:
    63. img_count = 0
    64. subtitle_img = Image.fromarray(subtitle_img)
    65. save_image(ex_folder, subtitle_img, int(start_frame/fps), int(curr_frame/fps))
    66. start_frame = curr_frame # 开始时间往后移
    67. else:
    68. if cal_stderr(img, last_img) > 1:
    69. subtitle_img = np.vstack((subtitle_img, img))
    70. last_img = img
    71. img_count += 1
    72. print('video: %s add subtitle at %d frame.' % (video_filename, curr_frame))
    73. if img_count > 0:
    74. subtitle_img = Image.fromarray(subtitle_img)
    75. save_image(ex_folder, subtitle_img, int(start_frame / fps), int(curr_frame / fps))
    76. print('video: %s export subtitle finish!' % video_filename)


    77. if __name__ == '__main__':
    78. video_filename = '/Users/csd/S01E01.mkv'
    79. export_subtitle(video_filename)
    复制代码



    原文链接,基于图像识别和文字识别用 Python 提取视频字幕
  • i
    iamez
    这么大的工作量本来一个人就搞不定的,招募一些学生帮你做吧,给点点报酬,反正这活儿也没啥技术含量
  • 四维
    好奇什么职业什么需求

    如果手下有人,就分给他们干

    手下没人,要提醒一下自己领导,找了好久程序,没有能提取字幕的,需要手打。问领导要不要找外包做这个事。如果价格高,领导会衡量这个事情几个人一起有没有可能一起完成,还是这个视频字幕提取的事只是锦上添花,不值得投入那么多,索性不做这个事。 人生如梦
  • 西
    西小柚
    回复30#四维
    学校,必须月底完成 iOS fly ~
  • 西
    西小柚
    回复28#apolodi
    你这是什么………… iOS fly ~
  • l
    lsmlive
  • v
    victory623
    回复28#apolodi
    牛逼…… iOS fly ~
  • i
    ilovepizi
    讯飞人工最快…… iOS fly ~
  • v
    victory623
    回复31#西小柚
    抛开技术角度,从社会工程学来看问题,字幕网站能不能找到?如果找不到能不能找到视频的原作者,说明原因从原作者处获取字幕。 iOS fly ~
  • k
    kanxue
    你至少来视频截图看看啊 iOS fly ~
  • z
    zdb1115
    一个求助贴 学了很多东西。
  • z
    zdb1115
    回复1#西小柚





    链接:https://pan.baidu.com/s/1was7AHqRcLczLtdkn4K-CQ提取码: 87mx 复制这段内容后打开百度网盘手机App,操作更方便哦
  • r
    redsky21327
    搞定啦?
  • 7
    77880099
    回复36#victory623

  • 西
    西小柚
    回复39#zdb1115
    太感谢了……… iOS fly ~
  • 西
    西小柚
    回复36#victory623
    电视台说没有了,没存iOS fly ~
  • r
    robbie_williams
    上传youtube 自动生成字幕 然后在字幕窗口可以复制粘贴吧 试试看
    我下englishsingsing的台本就是这样
  • 猫了个咪的
    还是机器学习靠谱
  • w
    wcs244
    转成音频,上传到讯飞转成文字再校对就行了啊,虽然要花钱,但是你可以根据你的视频总长度选择一个对自己比较划算的套餐
  • t
    thevilled
    回复39#zdb1115

    这个软件很给力的样子
  • 西
    西小柚
    回复46#wcs244
    我有一个不转mp3直接就可以转文字的网站,叫突字幕,转的挺好的,一样花钱,我就是不想花钱…… iOS fly ~
  • 西
    西小柚
    回复39#zdb1115


    感谢你解决了我的问题。。。这软件牛啊!
  • l
    liushixiong
    mark......