lazybios

ffmpeg批量flv转mp3 shell脚本

经常看类似《罗辑思维》、《晓说》之类的节目,讲的内容还不错,但是观感上有些欠缺,如果是视频,放到手机上又没法后台,费电不说还得拿出整块时间盯着屏幕,后来想想干脆转成mp3格式,当音乐听了,时间和空间上也更灵活了。最近接触了下ffmpeg,所以决定写个shell脚本批量转了。

思路就是:

  • 用flvcd硕鼠,批量下载了,获取flv格式文件
  • ffmpeg 批量脚本转mp3

这篇文章针对写批量flv2mp3 shell脚本过程遇到的一些问题,做个详尽的记录,以备后查

#!/bin/bash

声明script使用的解释器类型,通过这个声明可以使脚本执行时自动加载相应解释器的环境变量,bash对应的环境变量位于~/.bashrc

export

自定义变量转环境变量,因为bash中执行的命令是以bash衍生子进程的方式进行,子进程会继承父进程的环境变量,不会继承父进程的自定义变量,如果想要传递自定义变量到子进程中,可以用export var的方式将自定义变量加入到环境变量中,用下列方式可测试该过程

temp=1234  
env   
export temp
env | grep 1234

$?、&&、||、$0\$1\$2…

$? 保存上次执行命令结果
&&||
&&||可组合为条件判断句式:comd1 && comd2 || comd3 与 c语言的 comd1 ? comd2 : comd3等价
$0\$1\$2 与c语言相同,0表示程序本身,1、2… 标识参数1,参数2… shfit n 可以略过指定个数的参数

shell脚本执行方式

修改script脚本权限为rw,即可通过./script.sh执行,修改命令chmod a+x script.sh ,该方式脚本的执行是在bash的子进程中执行,子进程内的修改不会作用到父进程中
source script.sh 在仍在父进程中执行,脚本对于bash来说相当与上下文函数,即脚本对某一变量做修改退出后,在bash中访问该值是可以访问到的,这也是为什么某些rc配置文件修改后要用source执行一下生效的缘故,可以免去注销系统。

shell中的$IFS

IFS,为Internal Field Separator (内部字段分隔符) 缩写,该值用于设定间隔字符,默认为空格,但当你要遍历一个目录下的文件时,碰到了文件名中有空格是一件相当头疼的事情,如果这时临时修改$IFS值,对于解决这个棘手的问题会有很大的帮助,处理完毕在恢复元值即可。

就是这些了,至于语法细节,找本书参考一下就可以了,最后附上小脚本的代码:

#!/bin/bash
#Program:
#    convert flv to mp3
#History:
#2013/07/02 lazybios@gmail.com First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/ffmpeg/bin
export PATH

filelist=$(find *.flv)
OLDIFS="$IFS"
IFS=$"\n"
for filename in *.flv
#$(find -iname *.flv)
do
    ffmpeg -i $filename -acodec libmp3lame -ab 128k mp3/"${filename%.*}".mp3
done
IFS=$OLDIFS

使用方法:直接放到,存放flv目录下,执行即可

微信关注「日拱一卒」公众号