视频转mkv sh-gui

这个主要是解释脚本命令为主
以下是我的理解 如果有不对的 地方 欢迎 留言
视频转mkv sh-gui 一个滚动条实例 把一条 命令 结构装到另外一条 命令里 xx= $() $xx 和编程一样 框框套框框 主窗口是桌面
虽然 GUI脚本 不会体现出窗口的代码 那是应为GUI是一个窗口程序 所有按钮 各种框 都是窗口的子集

#!/bin/bash
#转mkv 编码格式 H265 音频 acc 码率 128K  每秒帧数 crf=28 
#gui 脚本一定要声明 系统语言 英文 可以不申明
LANG="zh_CN.UTF-8"  #这样按钮才会跟谁系统,显示为当前系统的语言,申明比不申明好。
d1="$(zenity  --file-selection --title="视频文件在哪 ?" \
    --directory)"
    # $? 是上一个程序执行是否成功的标志#
    # 如果执行成功则$? 为0,否则 不为0#
    # && 同|| 意思大体相同都是选择 &&我想优先级比较高 自动完成
   # && exit 后自动跳到了 $d2  $d2结束后 就给一个名字 开始转换同步执行进度条 进度条的时间取决于机器的性能 模块 libx265
   # && 逻辑与 可以理解为并且的意思
   # ||  逻辑或,可以理解为或者的意思,也就是条件可以2取一#
   # ! 逻辑非  (一元表达式)#
[[ "$?" != 0 ]] && exit # || sleep 2  长时间不选择就关闭 这个适合网络连接

d2="$(zenity  --file-selection --title="转换保存在哪 ?" \
    --directory)"
[[ "$?" != 0 ]] && exit   #在这边加上时间就强制结束了

for i in "$d1"/* ; do   # i 和 "$d1"/* 这是一个路径  坑爹要用甲骨文发明个编程语言  in 你不能用中文  外国人天生会编程

    ## 筛选出实际的文件名   #filename=文件名字
    filename=$(basename -- "$i")  
    ## 根名字 的参数 $i  # "$d2"/"${filename%.*} #  一个可以扩展接口的方法  
    ## 文件名=变量 同一文件夹里 不会封装 这也是一个笨办法  
    ## 其实编程也是过家家没什么 就看谁的逻辑更合理
    ## 我喜欢结果导向过成 我的目的是功能 $是导向过程的  笑死我了
    ## 使用的模块 libx265 这个外国人是个大厨  肉块
    ## 没有这个模块这个脚本就不会起作用
    ## ffmpeg是一个内置解码器? 终端输入也可以或得具体参数
    ## crf=27 也是一个可选参数  视频每秒中的画面 超过30帧每秒就没有意义了 27就可以  
    ## 动画 才10几帧每秒  3d动画除外 有些60 FPS 这个和显示器刷新有关
    ## libx265 可选模块 x264 
    ## 视频解码 https://baike.baidu.com/item/%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81/839038?fr=aladdin
    ffmpeg -i "$i" -c:v libx265 -preset medium -x265-params crf=28 \  
        -c:a aac -strict experimental -b:a 128k "$d2"/"${filename%.*}.mkv"  # 谁机名字?128k 也是一个可选参数
# ffmpeg 和 zenity 一起  ffmpeg 结束时 zenity也结束 
done | zenity --progress --pulsate --title "Processing " \
              --text "正在转换请稍候" \
              --pulsate --auto-close --auto-kill

猜你喜欢

转载自blog.csdn.net/lcs910102814/article/details/106291614