大批量视音频压制,封装,自动化 Win/Linux 操作 2020.4 版

A@NAZOrip
A@NAZOrip 2020 年 01 月 04 日
  • 在其它设备中阅读本文章

咳咳, 标题有点吓人, 说明白点就是套一堆变量进命令行去, 然后完成一大批操作的操作...

这样做的好处是
1. 既享受到了变量的方便, 又不需要往系统里设置 %PATH%, 可以把所有的命令都存在一个命令文件 (bat, cmd, ps1, sh 等) 内, 放 USB 盘里, 偷偷拿别人的电脑压制以节省电费(误)
2. 解锁所有编码器,滤镜,操作系统控制 (完成关机 / 睡眠,但失败不关机等) 等一般软件懒得理的设置
3. 改改格式就能做到多平台兼容 (作者用 linux 没超过 1000 小时,基础很差)

缺点: 由于引号也会被记录到变量里, 所以不能再用引号来允许文件 / 目录名的空格


给出 bat/cmd/ps1 所在目录下,所有完整 pdf 路径 + 文件名

chcp 65001
@for %%a in (*.pdf) do @echo "%~dp0%%a"
pause

!注意,UTF-8 格式下要空一行才能输命令,而且括号内不能用单引号,有的编码器(如 QAAC)不支持单引号所以全部改用双引号!

 - chcp 65001--------------启用unicode命令行
 - @-----------------------屏蔽cmd回应命令,因为本来已经会给出结果了;
 - %%a---------------------可变的变量%a(不用非得是%a,%0也行);
 - for %%a in ("\*.pdf")---在for循环完成前,变量%%a将被赋值为*.pdf(加双引号能允许文件名空格,不支持    单引号)
 - "%~dp0%%a"--------------将变量%0展开成当前盘符d,路径p。并附上变量%%a,最终得出完整路径+文件名

给出 sh 所在目录下,所有完整 pdf 路径 + 文件名 (可能能用)

#!/bin/bash
for pdf in "/home/user/*.pdf"; do
    echo "$pdf"
done

Win 设置参数。

这里的参数前后加了空格,后面放入命令行里虽然加空格不影响,但会比较难看

如果有运行 dll(软件编写相关)的需求,直接在下面再附上一段 "@ set API 格式视频参数" 就行了

@ set 视频参数=--me umh --merange 32 --subme 11 --no-fast-pskip --keyint 480 --min-keyint 300 --bframes 11 --b-adapt 2 --direct auto --scenecut 30 --ref 3 --crf 22 --qpmin 10 --rc-lookahead 120 --qcomp 0.37 --qpmax 26 --aq-mode 3 --aq-strength 0.4 --trellis 2 --no-psy --opencl --no-fast-pskip --deblock 0:0 --nr 10 --vf
@ set 音频参数=-a 320 -b 16 -r 44100 --threading

Unix 设置参数(大概?)

视频参数=--me umh --merange 32 --subme 11 --no-fast-pskip --keyint 480 --min-keyint 300 --bframes 11 --b-adapt 2 --direct auto --scenecut 30 --ref 3 --crf 22 --qpmin 10 --rc-lookahead 120 --qcomp 0.37 --qpmax 26 --aq-mode 3 --aq-strength 0.4 --trellis 2 --no-psy --opencl --no-fast-pskip --deblock 0:0 --nr 10
音频参数=-a 320 -b 16 -r 44100 --threading

Win 循环压制同文件夹下所有 mkv,所有 flac,输出文件名不变的 mp4 和 aac

chcp 65001
@ for %%1 in (*.mkv) do (
    x265 %视频参数% --output "%%~n1.mp4" "%~dp0%%1"
    qaac %音频参数% -o "%%~n1.aac" "%~dp0%%~n1.flac")
pause

!注意,括号内不能用引号,有的编码器(如 QAAC)不支持单引号所以全部改用双引号!
这个命令比之前多了 %%~n1,目的是去掉文件后缀。举例:香蕉. jpg --> 香蕉
在输出视音频,以及导出音频的时候用 %~n 去掉了后缀,加上了别的后缀。香蕉. jpg --> "香蕉"+".png" = 香蕉. png
如果要导出到特定文件夹,直接用 --output "D: 文件夹 %%~n1.mp4" 就行了
pause 让命令完成后不关闭窗口,能帮助看到报错


同理 ---ffmpeg 转换当前所有. flac 到. wav
chcp 65001
@ for %%1 in (*.flac) do (
    ffmpeg -i "%~dp0%%~n1.flac" -c:a pcm_s16le -ar 44100 "%%~n1.wav")
pause
同理 ---qaac 转换当前所有. mp3 到. wav,且删除源文件
chcp 65001
@ for %%1 in (*.mp3) do (
    D:\QAAC\qaac64.exe -a 320 -b 16 -r 44100 --threading -o "%%~n1.wav" "%~dp0%%~n1.mp3")
    del "%~dp0%%~n1.mp3"
pause

Unix 循环压制视音频

#!/bin/bash
for 视音频 in "/home/user/文件夹/*.mkv"; do
    x265 $视频参数 --output "${视音频%.*}.mp4" "$视音频"
    qaac $音频参数 --output "${视音频%.*}.aac" "${视音频%.*}.flac"
done
read -p "按Enter继续哦"

可能需要修改才能用,然后 ${FILE%.*} 好像就是去文件后缀的方法吧...


Win 循环封装视音频 (另写一个 bat/cmd/ps1,这里顺便在输出文件名前加了个'完成_')

chcp 65001
@ for %%1 in (*.mp4) do (ffmpeg -i "%%3" -c:v copy -i "%%~n1.aac" -c:a copy "完成_%%1.mp4")
pause

Unix 循环封装视音频

#!/bin/bash
for 封装 in "/home/user/文件夹/*.mp4"; do
    ffmpeg -i "$封装" -c:v copy -i "${封装%.*}.aac" -c:a copy "完成_%%1.mp4" --output "完成_${封装%.*}.mp4" "$封装"
done
read -p "按Enter继续哦"

Win 滤镜循环压制,导出视频 (未测试)

chcp 65001
@ for %%1 in (*.vpy) do (VSpipe "%%1" --y4m - | x265 %视频参数% --output "%%~n1.mp4" - )
pause

Unix 滤镜循环压制,导出视频 (未测试)

#!/bin/bash
for 压制 in "/home/user/文件夹/*.vpy"; do
    VSpipe "$压制" --y4m - | x265 $视频参数 - --output "${压制%.*}.mp4" -
done
read -p "按Enter继续哦"

其它 ---CMD 符号:

@的用途是不让CMD把其之后的内容重复一遍,精简画面
::是powershell, cmd的注释格式
#是bash的注释格式

其它 --- 文件路径太长或者 NAS/SAN 网盘路径被隐藏

CMD和Bash都能用pushd "\\服务器\文件夹\文件夹"来制作临时盘符,且将路径以堆栈法输入内存
使用后能看到服务器的根目录作为盘符出现在命令行终端和文件浏览器中。用popd即可以堆栈法逐个退出

Linux 安装 ffmpeg 到系统变量

sudo add-apt-repository universe
sudo apt update
sudo apt install ffmpeg

Linux 编译 x264/x265/qaac 等

不知道啊...

Win 完成后清点文件,文件存在就睡眠,反之暂停 (未测试)

if exist "F:\视频1.mp4" (
    if exist "F:\视频2.mp4" (
        if exist "F:\视频n.mp4" (
            %pass = '1' & echo "视频文件都找到了")
        else %pass = '' & echo "!视频n没找到")
    else %pass = '' & echo "!视频2没找到")
else %pass = '' & echo "!视频1没找到"

if %pass == '1' (echo "开始睡眠" & psshutdown -h -t 00) else (pause)

那么就这样...

打赏信息

在线丢人,求个打赏,支持一下 T_T
pp_tip_qrcode.png

    NAZOrip@A
    NAZOrip@A  2020-07-04, 13:03

    更新 2020.4: 循环滤镜压制下的 pipe 没写对,清点文件增加一个视频 n

    Snow
    Snow  2019-05-30, 20:26

    @ set 压好的视频 1=E: 新建文件夹 1.aac 请把 aac 改成 MP4

      NAZOrip@A
      NAZOrip@A  2019-06-10, 12:22

      搞定,感谢提醒