分解MKV+写一个对应的压制文件
简单讲压制过程: 原文件的标题都是"Yu-Gi-Oh! Zexal - 013 - The Number Hunter, Part 1.mkv"的格式。 压成0.49倍码率的mp4,重命名为"[Yu-Gi-Oh! ZEXAL][English][1080P][013] The Number Hunter, Part 1"的格式。
——以上的步骤,之前都是手动处理的,包括手动复制粘贴命令分解mkv…… 源文件也不方便乱动,总之很烦。 今晚搞了个一键分解.bat来做这些事。只要把源文件名粘贴进去就行了。
目前的问题: 取得源视频比特率的地方失败。 如果把其他没影响的内容都注释掉,只留定义num和这行,就能正常输出bit。 完全不知道是哪一步出了问题,难道是电脑存不下太多变量吗(……)
REM开头的是注释。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 @echo off echo E:\源文件目录 的mkv文件分解 echo 请输入无后缀的原文件名(例:Yu-Gi-Oh! Zexal - 013 - The Number Hunter, Part 1) set /p "full_name=请输入:" REM 得到文件名full_name后,从里面提取编号和标题部分 REM 第19位开始,往后3位是编号,存入变量num;第25位开始,往后全是标题,存入变量title。 set "num=%full_name:~18,3%" set "title=%full_name:~24%" echo num=%num% echo title=%title% echo 请确保目录"E:\压制目录"存在,如不存在请修改保存路径。 REM 没问题的话按y继续。/i是忽略Y大小写的指令。 set /p "confirm=是否继续执行?(y/n)" if /i "%confirm%"=="y" ( echo 开始分解... cd /d E:\源文件目录 if exist "%full_name%.mkv" ( REM 提取字幕、音频、视频。 ffmpeg -i "%full_name%.mkv" -an -vn -scodec copy "E:\压制目录\%num%.srt" ffmpeg -i "%full_name%.mkv" -vn -y -acodec copy "E:\压制目录\%num%_a.ac3" ffmpeg -i "%full_name%.mkv" -vcodec copy -an "E:\压制目录\%num%_v_o.mp4" echo 分解完成。 echo 开始制作压制命令文件... cd /d E:\压制目录 REM 取得源视频比特率 for /f "tokens=2 delims== " %%a in ('ffprobe -v error -select_streams v:0 -show_entries stream^=bit_rate %num%_v_o.mp4 2^>^&1') do set "bit=%%a" REM 这里我是除以1000让单位变成k,再乘0.49。最后结果四舍五入保留到百位。比如原本是10011k,压制要求就是4900k. set /a "bit=bit*49/100000" set /a "bit=(bit+50)/100*100" REM 然后把压制用的命令写进一个bat文件里。 ( echo ffmpeg -i %num%_v_o.mp4 -b:v %bit%k -c:v libx264 -pass 1 -y -f mp4 NUL echo ffmpeg -i %num%_v_o.mp4 -b:v %bit%k -c:v libx264 -pass 2 %num%_v.mp4 echo ffmpeg -i %num%_v.mp4 -i %num%_a.m4a -i %num%.srt -vcodec copy -acodec copy -c:s mov_text "[Yu-Gi-Oh! ZEXAL][English][1080P][%num%] %title%.mp4" echo del ffmpeg2pass-0.log.mbtree echo del ffmpeg2pass-0.log ) > %num%.bat echo 完成!请用GoldWave将ac3文件转为m4a格式! ) else ( echo E:\源文件目录\%full_name%.mkv 文件不存在。 ) ) else ( echo 操作已取消。 ) pause
运行之后,会生成字幕.srt、源视频.mp4、源音频.ac3,和一个包含压制命令的bat文件。 记得压制前要用GoldWave把音频ac3文件转为m4a。
因为压制蛮花时间的(以我的电脑配置),就没有一口气包含进来,慢慢攒着做了。
为什么不用ffmpeg转码音频:之前试过失败了,具体是为什么失败不记得了。 也想在一键脚本里直接调用GoldWave转码,好像付费版才有命令行工具……算了。 (懒)