原创bat命令

1,基本

①修改bat

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 清空屏幕
cls

:: 变量初始化
set "fileList="
set "index=0"

:: 遍历当前目录中的所有 .bat 文件
for %%F in (*.bat) do (
    set /a index+=1
    echo !index!、%%F
    set "fileList[!index!]=%%F"
)

:: 如果没有找到 .bat 文件
if "!index!"=="0" (
    echo 暂无可编辑的 .bat 文件。
    pause
    exit /b
)

:: 提示用户输入序号
set /p choice=序号=

:: 检查输入的序号是否有效
if defined fileList[%choice%] (
    notepad "!fileList[%choice%]!"
) else (
    echo 无效
)

endlocal

②打印文件名

@echo off
setlocal

rem 遍历当前文件夹中的所有文件
for %%f in (*) do (
    @echo %%~nxf
)

pause

③批量改后缀

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 获取脚本所在的目录路径
set "SCRIPT_DIR=%~dp0"

:: 旧文件和新文件扩展名输入
set /p "old_ext=旧="
set /p "new_ext=新="

:: 遍历当前目录下的所有文件
for %%f in ("%SCRIPT_DIR%*") do (
    if "%%~xf"==".!old_ext!" (
        set "newname=%%~nf.!new_ext!"
        ren "%%f" "!newname!"
    )
)

:: 脚本执行完毕
exit /b

2,ffmpeg

转格式

①删旧文件

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 获取脚本所在的目录路径
set "SCRIPT_DIR=%~dp0"

:: 旧文件和新文件扩展名输入
set /p "old_ext=旧="
set /p "new_ext=新="

:: 遍历当前目录下的所有文件
for %%f in ("%SCRIPT_DIR%*.%!old_ext!") do (
    set "newname=%%~nf.!new_ext!"
    echo 转换 "%%f" 为 "!newname!"...
    ffmpeg -i "%%f" "!newname!"
    if exist "!newname!" (
        del "%%f"
        echo 删除 "%%f".
    )
)

:: 脚本执行完毕
echo 完成
exit /b

②不删旧文件

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 获取脚本所在的目录路径
set "SCRIPT_DIR=%~dp0"

:: 旧文件和新文件扩展名输入
set /p "old_ext=旧="
set /p "new_ext=新="

:: 遍历当前目录下的所有文件
for %%f in ("%SCRIPT_DIR%*.%!old_ext!") do (
    set "newname=%%~nf.!new_ext!"
    echo 转换 "%%f" 为 "!newname!"...
    ffmpeg -i "%%f" "!newname!"
)

:: 脚本执行完毕
echo 完成
exit /b

③视频转音频

@echo off
chcp 65001
cd /d "%~dp0"

REM 指定要转换的视频文件格式
setlocal enabledelayedexpansion
for %%f in (*.mp4 *.mov *.ts *.mov *.avi) do (
    echo 正在转换: %%f
    ffmpeg -i "%%f" -q:a 0 -map a "%%~nf.mp3"
)

exit

合并

①输入合并

@echo off
chcp 65001
SETLOCAL enabledelayedexpansion

:: 设置要遍历的文件夹路径
set folder_path=%cd%

:main_loop
cls

:: 输入要合并的文件格式
set /p file_extension="格式="
set "file_extension=.%file_extension%"

:: 遍历文件夹中的选择格式文件并按字母顺序编号
set count=0
for %%i in ("%folder_path%\*%file_extension%") do (
    set /a count+=1
    set "file!count!=%%~nxi"
    echo !count!. %%~nxi
)

:: 如果没有找到文件,提示用户
if !count! equ 0 (
    echo 没有找到匹配的文件。
    pause
    goto main_loop
)

:: 输入要合并的文件序号
echo.
set /p indices="文件序号="

:: 清空合并列表文件
> merge_list.txt (
    if /i "!indices!"=="all" (
        for /l %%j in (1,1,!count!) do (
            echo file '!folder_path!\!file%%j!' 
        )
    ) else (
        for %%i in (%indices%) do (
            if %%i gtr 0 if %%i leq !count! (
                echo file '!folder_path!\!file%%i!' 
            ) else (
                echo 序号 %%i 不在有效范围内,将被忽略。
            )
        )
    )
)

:: 合并文件
echo 正在合并,请稍候...
ffmpeg -f concat -safe 0 -i merge_list.txt -c copy "!folder_path!\new%file_extension%"
if errorlevel 1 (
    echo 合并文件失败。
) else (
    echo 文件已合并为 "!folder_path!\new%file_extension%"。
)

:: 清理临时文件
del merge_list.txt
if errorlevel 1 (
    echo 清理文件失败。
)

:: 回到选择界面
goto main_loop

②直接合并mp4

@echo off
chcp 65001
SETLOCAL enabledelayedexpansion

:: 设置要遍历的文件夹路径
set folder_path=%cd%

:: 设置输出文件名
set output_file=new.mp4

:: 清空合并列表文件
> merge_list.txt (
    for %%i in ("%folder_path%\*.mp4") do (
        echo file '%%i'
    )
)

:: 合并文件
echo 正在合并,请稍候...
ffmpeg -f concat -safe 0 -i merge_list.txt -c copy "%folder_path%\%output_file%"
if errorlevel 1 (
    echo 合并文件失败。
) else (
    echo 文件已合并为 "%folder_path%\%output_file%"。
)

:: 清理临时文件
del merge_list.txt
if errorlevel 1 (
    echo 清理文件失败。
)

③直接合并ts

@echo off
chcp 65001
SETLOCAL enabledelayedexpansion

:: 设置要遍历的文件夹路径
set folder_path=%cd%

:: 设置输出文件名
set output_file=new.ts

:: 清空合并列表文件
> merge_list.txt (
    for %%i in ("%folder_path%\*.ts") do (
        echo file '%%i'
    )
)

:: 合并文件
echo 正在合并,请稍候...
ffmpeg -f concat -safe 0 -i merge_list.txt -c copy "%folder_path%\%output_file%"
if errorlevel 1 (
    echo 合并文件失败。
) else (
    echo 文件已合并为 "%folder_path%\%output_file%"。
)

:: 清理临时文件
del merge_list.txt
if errorlevel 1 (
    echo 清理文件失败。
)

④直接合并mp3

@echo off
chcp 65001
SETLOCAL enabledelayedexpansion

:: 设置要遍历的文件夹路径
set folder_path=%cd%

:: 设置输出文件名
set output_file=new.mp3

:: 清空合并列表文件
> merge_list.txt (
    for %%i in ("%folder_path%\*.mp3") do (
        echo file '%%i'
    )
)

:: 合并文件
echo 正在合并,请稍候...
ffmpeg -f concat -safe 0 -i merge_list.txt -c copy "%folder_path%\%output_file%"
if errorlevel 1 (
    echo 合并文件失败。
) else (
    echo 文件已合并为 "%folder_path%\%output_file%"。
)

:: 清理临时文件
del merge_list.txt
if errorlevel 1 (
    echo 清理文件失败。
)

提取

chcp 65001
@echo off
SETLOCAL enabledelayedexpansion

:: 设置要遍历的文件夹路径
set folder_path=%cd%

:main_loop
cls
:: 遍历文件夹中的视频文件并按字母顺序编号
echo 正在遍历文件夹 %folder_path% 中的视频文件...
set count=1

:: 通过扩展通配符来支持多种视频格式
for %%f in (*.mp4 *.avi *.ts *.mov *.mkv *.flv *.wmv) do (
    set "file!count!=%%f"
    echo !count!. %%f
    set /a count+=1
)

:: 输入要操作的视频文件序号
set /p file_index="请输入要操作的视频文件序号="
if "%file_index%"=="" goto end

set video_file=!file%file_index%!

:: 获取原文件名(不含扩展名)和扩展名
for %%f in ("%video_file%") do (
    set "base_name=%%~nf"
    set "ext_name=%%~xf"
)

:: 输入要提取的片段个数
set /p num_segments="提取片段的个数="
set /a count=1

:: 循环获取每个片段的起始和结束时间,并提取
:loop
if %count% leq %num_segments% (
    set /p start_time="第!count!个片段的起始时间="
    set /p end_time="第!count!个片段的结束时间="

    echo 正在提取第!count!个片段,请稍候...
    ffmpeg -i "%video_file%" -ss !start_time! -to !end_time! -c copy "out_!count!.mp4"
    if errorlevel 1 (
        echo 提取第!count!个片段失败。
    ) else (
        echo 第!count!个片段提取完成。
        set /a count+=1
        goto loop
    )
)

:: 创建concat协议的列表文件
echo 正在创建concat协议的列表文件,请稍候...
(for /l %%i in (1,1,%num_segments%) do (
    echo file 'out_%%i.mp4'
)) > concat_list.txt
if errorlevel 1 (
    echo 创建列表文件失败。
) else (
    echo 列表文件创建成功。
)

:: 合并片段并生成新文件名
echo 正在合并,请稍候...
set "new_video_name=%base_name%剪辑版%ext_name%"
ffmpeg -f concat -safe 0 -i concat_list.txt -c copy "%new_video_name%"
if errorlevel 1 (
    echo 合并片段失败。
) else (
    echo 片段已合并为 "%new_video_name%"。
)

:: 清理临时文件
echo 正在清理临时文件,请稍候...
del out_*.mp4
del concat_list.txt
if errorlevel 1 (
    echo 清理文件失败。
)

:: 回到选择界面
goto main_loop

:end
ENDLOCAL

BGM

①静音加BGM

ffmpeg -i 1.mp4 -i 1.mp3 -map 0:v -map 1:a -c copy -shortest nolyBGM.mp4

②原声加BGM

ffmpeg -i 1.mp4 -i 1.mp3 -c:v copy -filter_complex "[0:a][1:a]amerge=inputs=2[a]" -map 0:v -map "[a]" -ac 2 -shortest 2voice.mp4

3,ImageMagick

图片转格式

①删旧文件

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 获取脚本所在的目录路径
set "SCRIPT_DIR=%~dp0"

:: 旧文件和新文件扩展名输入
set /p "old_ext=旧="
set /p "new_ext=新="

:: 遍历当前目录下的所有文件
for %%f in ("%SCRIPT_DIR%*.%!old_ext!") do (
    set "newname=%%~nf.!new_ext!"
    echo 转换 "%%f" to "!newname!"...
    magick "%%f" "!newname!"
    if exist "!newname!" (
        del "%%f"
        echo 删除"%%f".
    )
)

:: 脚本执行完毕
echo 完成
exit /b

②不删旧文件

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 获取脚本所在的目录路径
set "SCRIPT_DIR=%~dp0"

:: 旧文件和新文件扩展名输入
set /p "old_ext=旧扩展名(如png,jpg等)="
set /p "new_ext=新扩展名(如png,jpg等)="

:: 遍历当前目录下的所有文件
for %%f in ("%SCRIPT_DIR%*.%!old_ext!") do (
    set "newname=%%~nf.!new_ext!"
    echo 转换 "%%f" to "!newname!"...
    magick "%%f" "!newname!"
    if exist "!newname!" (
        echo 成功生成新文件:"!newname!"
    )
)

:: 脚本执行完毕
echo 完成
exit /b

4,whisper

AI音频转字幕

@echo off
chcp 65001
cd /d "%~dp0"

REM 遍历音频—>转换字幕
for %%f in (*.mp3 *.m4a *.avi *.wav *.flac *.ogg *.aac) do (
    echo 正在转换: %%f
    whisper "%%f" --model medium --task transcribe --output_format srt --language en
)

exit

视频加上字幕

@echo off
chcp 65001
setlocal enabledelayedexpansion

rem 设置源文件夹
set "source_folder=C:\path\to\your\folder"

rem 切换到源文件夹
cd /d "%source_folder%"

rem 遍历所有 srt 文件
for %%s in (*.srt) do (
    set "base_name=%%~ns"
    ffmpeg -i "!base_name!.mp4" -i "%%s" -vf "subtitles='%%s':force_style='Font=Segoe UI,Fontsize=18,PrimaryColour=&HFFFFFF&,BackColour=&H000000&,BorderColour=&H000000&,Outline=0,Alignment=2,MarginV=93'" -c:v libx264 -c:a aac "!base_name!英文字幕.mp4"
)

echo 合并成功
exit

5,下载视频

①输链接

@echo off
chcp 65001
setlocal enabledelayedexpansion

:loop
set /p url=链接=

if "%url%"=="out" goto end

:: 检查链接是否包含 "m3u8"
echo %url% | findstr /i "m3u8" >nul
if !errorlevel! == 0 (
    set /p title=标题=
    if "!title!"=="" (
        echo 错误:标题不能为空,请重新输入
        goto loop
    )
    echo 正在处理: "!title!"...
    ffmpeg -i "!url!" -c copy "!title!.mp4"
    echo 已保存为: "!title!.mp4"
) else (
    echo 正在下载视频...
    yt-dlp -f 137/136/271/313/1080p/hls-8000 "!url!"
)

goto loop

:end
echo 程序已退出。
pause
@echo off
REM *******************************************************
REM 需要cookies
chcp 65001
setlocal enabledelayedexpansion

:loop
set /p url=链接=

if "%url%"=="out" goto end

:: 检查链接是否包含 "m3u8"
echo %url% | findstr /i "m3u8" >nul
if !errorlevel! == 0 (
set /p title=标题=
if "!title!"=="" (
echo 错误:标题不能为空,请重新输入
goto loop
)
echo 正在处理: "!title!"...
ffmpeg -i "!url!" -c copy "!title!.mp4"
echo 已保存为: "!title!.mp4"
) else (
echo 正在下载视频...
yt-dlp --cookies 2.txt -f "bv*[ext=mp4]+ba[ext=m4a]" --merge-output-format mp4 "!url!"
)

goto loop

:end
echo 程序已退出。
pause

②读txt

@echo off
chcp 65001
setlocal enabledelayedexpansion

:: 打开文本文件并读取内容
set "filename=1.txt"
set "title="
set "errorfile=错误.txt"

:: 初始化行计数器
set "is_title_line=0"

:: 清空错误文件(如果存在的话)
if exist "%errorfile%" del "%errorfile%"

for /f "tokens=* delims=" %%a in (%filename%) do (
    if !is_title_line! == 1 (
        :: 当前行是标题,保存标题
        set "title=%%a"
        set "is_title_line=0"  :: 重置为0,准备读取下一行URL
        echo 正在处理: "!title!"...
        
        ffmpeg -i "!url!" -c copy "!title!.mp4"
        if errorlevel 1 (
            echo 出现错误处理标题 "!title!" 对应的文件. >> "%errorfile%"
        ) else (
            echo 已保存为: "!title!.mp4"
        )
    ) else (
        :: 当前行是链接
        set "url=%%a"

        :: 检查链接是否包含 ".m3u8"
        echo !url! | findstr /i ".m3u8" >nul
        if !errorlevel! == 0 (
            set "is_title_line=1"  :: 标记下一行是标题
        ) else (
            echo 正在下载视频...
            yt-dlp -f 137/136/271/313/1080p/hls-8000 "!url!"
            if errorlevel 1 (
                echo !url! >> "%errorfile%"
            )
        )
    )
)

:: 如果错误文件存在并且有内容,输出相应信息
if exist "%errorfile%" (
    echo 错误已保存 "%errorfile%"
) else (
    echo 成功
)

exit
1.txt
https://ppvod01.kqgfbs.com/splitOut/20241015/539505/V2024101517545277531539505/index.m3u8?t=1942fe1df1c&whip=60.213.177.163&sign=e9ea430dd598d29ea2077555cb8bc502ede90d92
异形
https://ppvod01.blbtgg.com/splitOut/20240709/349166/V2024070917061447676349166/index.m3u8?auth_key=1735970239-fb15d6b8b19642389cf19a683ee68d92-0-60de4d8b045e12cb26fc34ce876b7277
怦然心动
1.txt
https://vip1.155bf.com/20230413/CmcyztpX/index.m3u8
光
https://vip1.155bf.com/20230413/p69BOitK/index.m3u8
白
https://vip1.155bf.com/20230411/49PzuK3U/index.m3u8
黑
https://vip1.155bf.com/20230413/MZIizjMG/index.m3u8
普通

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值