大头猫米吧 关注:3,931贴子:15,768
  • 6回复贴,共1

ffmpeg压制SUP字幕到视频画面里的方法

只看楼主收藏回复

需要用的ffmpeg
创建一个bat文件,代码为网上搜索获得,并非我原创,如侵告删
代码是
ffmpeg -i "%~dp1%~nx1" -c:v libx264 -crf 22 -x264opts force-cfr=1 -preset medium -vsync cfr -filter_complex idet,bwdif=1:deint=interlaced[v1],[v1][0:s:0]overlay=shortest=1[v2],[v2]scale=w=1920:h=1080:flags=lanczos[video],aresample=async=1000 -map [video] -map 0:a -c:a aac -s 1920*1080 -aspect 16:9 -f matroska "%~dp1%~nx1.mkv"
pause
把视频文件直接拖动到这bat上即可,当然这个视频文件里面必须是已经封装了sup字幕文件,不然就谈不上压制sup到画面里
这段代码的意思是用x264编码器 crf 22的参数压制sup到画面里,其中压制sup的插件是overlay
命令行中的第一个1920 1080是视频分辨率 第二个1920 1080的意思是sup安装1920 1080的分辨率处理不缩放.
如果要缩放则修改第二个1920 1080
这个脚本生效还注意,不能有中文路径和中文文件名,全部路径和文件名都必须是英文或数字.


IP属地:福建1楼2021-06-10 17:09回复
    ffmpeg -ss 00:02:58 -t 00:00:10 -i "%~dp1%~nx1" -c:v libx264 -crf 16 -x264opts force-cfr=1 -preset medium -vsync cfr -filter_complex idet,bwdif=1:deint=interlaced[v1],[v1][0:s:0]overlay=x=0:y=-180:[v2],[v2]crop=1920:720:0:180,scale=w=1920:h=720:flags=lanczos[video],aresample=async=1000 -map [video] -s 1920*720 -f matroska "%~dp1%~nx1.mkv"
    pause
    代码2,增加了去黑边、指定时间、移动sup字幕位置
    做一下代码说明免得自己也忘了
    1. -ss 00:02:58 -t 00:00:10
    这个是指定截取视频的时间段
    前面的时间是起始时间,后面的是时长而不是时间位置
    此处为非精确时间,会受关键帧影响
    必须放在-i之前
    2.[v1][0:s:0]overlay=x=0:y=-180:[v2]
    此代码为指定字幕位移,去掉黑边后,原来在黑边里的字幕必须上移才能出现在画面里,使用此代码即可
    x表示字幕横坐标(0就是不变),y代表纵坐标(-180)就是上移180个像素
    3.crop=1920:720:0:180
    此代码为去黑边代码,意思是画面由坐标(0,180)这个位置作为起点把画面裁剪为1920×720
    4.scale=w=1920:h=720和-map [video] -s 1920*720
    缩放为1920x720 其实这个代码似乎不是必要的
    不过既然代码能用就不动了.保留即可.


    IP属地:福建2楼2023-01-29 20:49
    收起回复
      2025-08-15 13:22:20
      广告
      不感兴趣
      开通SVIP免广告
      这个代码有一个问题.压制过程中要编码音频.导致速度会变慢
      但是不知道怎么插入 -c:a copy的指令
      有大佬知道的指个路


      IP属地:福建3楼2023-02-10 16:21
      收起回复
        ffmpeg -i "%~dp1%~nx1" -c:v hevc_nvenc -cq 10 -preset slow -rc vbr -vsync cfr -filter_complex idet,bwdif=1:deint=interlaced[v1],[v1][0:s:0]overlay=x=0:y=-276:[v2],[v2]crop=3840:1608:0:276,scale=w=3840:h=1608:flags=lanczos[video],aresample=async=1000 -map [video] -s 3840*1608 -map 0:a -c:a ac3 -an -f matroska "%~dp1%~nx1.mkv"
        pause
        4K去黑边,不编码音频


        IP属地:福建4楼2023-02-21 20:10
        回复
          最近发现一个情况.有些sup可能是1080p的sup,整合到4k视频里的时候会出现位置对不齐的情况
          这就需要使用公式对齐
          代码是
          ffmpeg -i "%~dp1%~nx1" -c:v hevc_nvenc -cq 10 -preset slow -rc vbr -vsync cfr -filter_complex idet,bwdif=1:deint=interlaced[v1],[v1][0:s:0]overlay=main_w/2-overlay_w/2:main_h-overlay_h-10:[v2],[v2]scale=w=3840*2:h=2160*2:flags=lanczos[video],aresample=async=1000 -map [video] -s 3840*1608 -map 0:a -c:a ac3 -an -f matroska "%~dp1%~nx1.mkv"
          overlay=main_w/2-overlay_w/2 的意思是(主视频横向尺寸-覆盖横向尺寸)/2,则左右居中
          main_h-overlay_h-10的意思是主视频纵向尺寸-覆盖纵向尺寸-10,就是按底部-10的位置定义字幕位置
          但怎么缩放字幕就不太清楚了.希望有大佬指点一下.


          IP属地:福建5楼2023-04-19 00:07
          回复