493292479吧 关注:4贴子:117

回复:一些日用 bat 小脚本记录

只看楼主收藏回复

【ffmpeg无损旋转视频90度】
ffmpeg -i input.mp4 -metadata:s:v rotate="90" -c copy output.mp4


IP属地:安徽17楼2019-01-22 21:02
收起回复
    【批量解压子文件夹下压缩包到各自原文件夹】
    @echo off
    set WinRAR="C:\Program Files\WinRAR\WinRAR.exe"
    for /r . %%a in (*.rar *.zip) do (
    cd "%%~pa"
    %WinRAR% x "%%a"
    )
    【解压到各自原文件夹下以压缩包名为文件夹名的目录中】
    @echo off
    set WinRAR="C:\Program Files\WinRAR\WinRAR.exe"
    for /r . %%a in (*.rar *.zip) do (
    cd "%%~pa"
    %WinRAR% x -ad -y "%%a"
    )


    IP属地:安徽19楼2019-04-16 15:29
    回复
      2026-01-19 10:05:29
      广告
      不感兴趣
      开通SVIP免广告
      【ffmpeg抽取MKV文件内封装字幕】
      for /r . %%a in (*.mkv) do ffmpeg -i "%%~na.mkv" -map 0:2 -c copy "%%~na(jp+chs).ass" -map 0:3 -c copy "%%~na(jp).ass"
      【解释】
      -map 0:2 的意思是“针对轨道2”,一般视频流是轨道0,音频是轨道1(如果有多音轨就可能轨道2、轨道3也是音频),然后就是字幕轨道了。我要处理的视频是一个视频流,一条音轨,两个内封字幕,所以如果我要提取字幕01和字幕02,那就是要 -map 0:2、-map 0:3
      PS:如果两个字幕轨道都要提取,那务必像上面我写的那样一起提取,不要分开成两次,因为这段代码每次执行都有一个导入(-i),而这个导入很占时间。


      IP属地:安徽20楼2019-04-18 21:13
      回复
        【FFmpeg截取视频为GIF并设置后者】
        ffmpeg -i input.mp4 -vf scale=960:-1,setpts=PTS/3 -r 5 -ss 00:00:14 -t 00:00:15 00.gif
        【注释】
        1、scale=960:-1 我是打算把一个1920×1080的视频做成GIF的时候缩放一下,完整写法应该是“960:540”,不过后面那个如果懒得算的话写“-1”也就可以了。注意,这个虽然也可以用在 视频-视频 转换上,但两个数字都必须是偶数,否则会报错,原因大概是跟视频扫描的制式有关,需要一个“返回”(或者其他什么名字,记不清了)。
        2、setpts=PTS/3 加速3倍,其中PTS必须大写。
        3、两个-vf效果之间需要连接符号,有时候是“;”,有时候是“,”,至于何时嘛……都试试呗,不行就换一个,反正我是看不懂使用说明原话:在同一个线性链中的filter使用逗号分隔,在不同线性链中的filter使用分号隔开
        4、-ss和-t 这里的都是按加速过的来算的,比如你要截取一个1分钟视频的30秒到45秒,要是你和我一样开了3倍加速,那就应该是“-ss 00:00:10 -t 00:00:05”
        5、-r GIF帧率,不用说了吧


        IP属地:安徽21楼2019-06-23 03:08
        收起回复
          【FFmpeg将多条音轨封入一份mp4的方法】
          ffmpeg -i Input.mp4 -i Input1.aac -i Input2.aac -i Input3.aac -i Input4.aac -i Input5.aac -map 0:v -map 1:a -map 2:a -map 3:a -map 4:a -map 5:a -c copy output.mp4
          【解释】
          这个做法似乎是会覆盖原本mp4里有的音频,然后按导入顺序(-i 的顺序)来依次放入音轨。最后的-c copy是总体的copy,如果改成-c:a或者-c:v,那视频/音频就会被重编码。
          不过封装进去后的音轨名字都是一样的,我还没查怎么修改音轨名字。


          IP属地:安徽22楼2020-03-11 00:06
          回复
            【将当前目录下子文件夹内内容上移一层】
            @璐村惂鐢ㄦ埛_000076K馃惥 off
            for /f "tokens=*" %%i in ('dir/ad/b /s "%~dp0"') do (
            for /f "tokens=*" %%j in ('dir/ad/b "%%i\"') do (
            move /y "%%i\%%j" "%%j"))


            IP属地:安徽23楼2021-03-24 13:45
            回复
              【批量删除子文件夹下,指定后缀名(在脚本第一行)文件以外的所有文件】
              set Ext=jpg,bat
              for /f "delims=" %%i in ('dir /s /ad /b') do (
              cd /d %%i
              for %%a in (*) do (
              set "Skip="
              for %%b in (%Ext%) do if /i "%%~xa"==".%%~b" set "Skip=1"
              if not defined Skip del /a/f/q "%%~a"
              )
              for /r /d %%a in (*) do del /a/f/q/s "%%~a\*"
              )


              IP属地:安徽26楼2021-06-10 10:34
              收起回复
                【FFmpeg裁切画面】
                ffmpeg -i input.mp4 -vf crop=640:480:1280:400,scale=540:-1 output.gif
                【解释】
                crop 也是vf之一,上面那段的作用是“在input.mp4上裁切出一个640×480的区域,起始点为x=1280 y=400,并等比缩放至宽为540,导出为gif”。vf 里面的顺序会影响导出结果,即上面那条如果 crop 和 scale 顺序互换就会报错,因为视频会被先等比缩放到540宽,那就没有1280的裁切点了


                IP属地:安徽27楼2022-07-15 17:40
                回复
                  2026-01-19 09:59:29
                  广告
                  不感兴趣
                  开通SVIP免广告
                  【FFmpeg批量替换字幕并加入封面】
                  for /r . %%a in (*.mkv) do ffmpeg -i "%%~na.mkv" -i "%%~na(sub).mp4" -i G:\Cover.jpg -map 0:v -map 0:a -map 1:s -map 2 -c copy -disposition:v:1 attached_pic "E:\%%~na.mp4"
                  【解释】
                  视频文件有两份,一份mkv质量高,另一份mp4封装的字幕符合需要(其实还带封面,但封面文件太大,我拿出来另外处理了一下)
                  我并不理解为什么“disposition:v:1”这段最后是1,但反正我改成其他数的话cover都无法正常封装
                  此前我有写过-map的后一个数的意义,没写第一个数的意义:第一个数就是第n个导入(-i)的文件,所以导入多个文件处理时就必须用到-map


                  IP属地:安徽28楼2024-03-20 00:30
                  回复