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

NAZOrip@A
[email protected] 2019年12月20日
  • 在其它设备中阅读本文章

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

这样做的好处是
1.既享受到了变量的方便, 又不需要往系统里设置%PATH%, 可以把所有的命令都存在一个命令文件(bat, cmd, ps1, sh等)内, 放USB盘里, 偷偷拿别人的电脑压制以节省电费(误)
2.解锁所有编码器,滤镜等软件设置
3.改改格式就能做到多平台兼容(作者用linux没超过1000小时,基础很差)
4.ffmpeg, x264等编码器好像要安装,会附在教程底部

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


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

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

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设置参数。

注意在这里的参数前后加空格,后面放入命令行里就不能加空格了,会比较难看
@ set 视频参数=--me umh --merange 48 --subme 11 --no-fast-pskip --keyint 480 --min-keyint 300 --bframes 11 --b-adapt 2 --direct auto --scenecut 30 --ref 3 --crf 22 --qpmin 18 --rc-lookahead 120 --qcomp 0.37 --qpmax 24 --aq-mode 3 --aq-strength 0.4 --trellis 2  --no-psy --opencl --no-fast-pskip --deblock 0:0 --nr 10 --vf hqdn3d:1.1,1.1,1.1,1.1
@ set 音频参数=-a 320 -b 16 -r 44100 --threading

Unix设置参数

视频参数=--me umh --merange 48 --subme 11 --no-fast-pskip --keyint 480 --min-keyint 300 --bframes 11 --b-adapt 2 --direct auto --scenecut 30 --ref 3 --crf 22 --qpmin 18 --rc-lookahead 120 --qcomp 0.37 --qpmax 24 --aq-mode 3 --aq-strength 0.4 --trellis 2  --no-psy --opencl --no-fast-pskip --deblock 0:0 --nr 10 --vf hqdn3d:1.1,1.1,1.1,1.1
音频参数=-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

这个命令比之前多了%%~n1,目的是去掉文件后缀。因为一开始%%1被赋值为.mkv(可以试试直接.*),所以在输出视音频,以及导出音频的时候用%~n去掉了后缀,加上了别的后缀
如果要导出到特定文件夹,直接用--output 'D:文件夹%%~n1.mp4'就行了
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' '%~dp0%%1')
pause

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

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

其它:

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

Linux安装ffmpeg到系统变量

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

Linux编译x264/x265/qaac等

不知道啊...

那么就这样...

    Snow
    Snow  2019-05-30, 20:26

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