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
普通