美文网首页音视频及流媒体
记一次简单的脚本使用(ffmpeg、shell、IFS)

记一次简单的脚本使用(ffmpeg、shell、IFS)

作者: 瓶子裏的鱼 | 来源:发表于2017-11-10 01:35 被阅读806次

    场景

    ​ mac上想将avi格式的视频转mp3文件,然后就是百度啊百度啊。

    ffmpeg

    ​ FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

    ​ 接着安装,因为mac中已经有brew了,所以呢,直接brew installffmpeg,然后就是complete;

    ffmpeg的简单使用

    音频转换:

    1.转换amr到mp3:

    ffmpeg -i shenhuxi.amr amr2mp3.mp3
    

    2.转换amr到wav:

    ffmpeg -acodec libamr_nb -i shenhuxi.amr amr2wav.wav
    

    3.转换mp3到wav:

    ffmpeg -i DING.mp3 -f wav test.wav
    

    4.转换wav到amr:

    ffmpeg -i test.wav -acodec libamr_nb -ab 12.2k -ar 8000 -ac 1 wav2amr.amr
    
    ffmpeg.exe -i PA003.wav -ar 8000 -ab 12.2k -ac 1 target.amr  此方法验证通过 
    文章来自http://blog.csdn.net/tylz04/article/details/9041739
    测试程序下载:http://files.cnblogs.com/xiaofengfeng/WavConvertAmr.zip 已测试过将WAV转AMR格式。
    下载地址http://ftp.pconline.com.cn/d56bb83a0a66440d54ef5473f548e4b9/pub/download/201010/ffmpeg-20131021.zip
    

    5.转换wav到mp3:

    ffmpeg -i test.wav -f mp3 -acodec libmp3lame -y wav2mp3.mp3
    

    实践

    ​ 难道你要一个程序员command+c/v,然后就想到了shell脚本,吭哧吭哧的开车。

    shell脚本实践

    1、写好自己的 脚本,比如aa.sh

    2、打开终端 执行,方法一: 输入命令 ./aa.sh ,

    方法二:直接把 aa.sh 拖入到终端里面。

    注意事项:

    如果 没有成功报出问题::

    Permission denied。就是没有权限。

    解决办法:

    修改该文件aa.sh 的权限 :使用命令:

    chmod 777 aa.sh 。

    shell代码

    function getdir(){
        IFS=$'\n';
        for element in `ls $1`
        do  
            dir_or_file=$1"/"$element
            if [ -d $dir_or_file ]
            then 
                getdir $dir_or_file
            else
                ffmpeg -i $dir_or_file $dir_or_file.mp3
                echo $dir_or_file
            fi  
        done
    }
    root_dir="/Users/y/Documents/y/Prepare/audio"
    getdir $root_dir
    

    补充一下

    if...fi 语句的基本控制语句,它允许Shell有条件作出决定并执行语句。

    语法

    if [ expression ]
    then
       Statement(s) to be executed if expression is true
    fi
    

    Shell expression求值。如果结果值是true,给定statement被执行。如果 expression 为false ,则没有语句将不会被执行。大部分的时候,会使用比较操作符决策。

    关注对括号和表达之间的空间。这个空间是强制性的,否则语法错误。

    如果expression 是一个shell命令,那么它会被假定如此,如果它执行后返回0。如果它是一个布尔表达式,那么返回true。

    例子:

    #!/bin/sh
    
    a=10
    b=20
    
    if [ $a == $b ]
    then
       echo "a is equal to b"
    fi
    
    if [ $a != $b ]
    then
       echo "a is not equal to b"
    fi
    

    语法

    for var in word1 word2 ... wordN
    do
       Statement(s) to be executed for every word.
    done
    

    var是一个变量,word1 到 wordN 是由空格分隔的字符(字)序列的名称。每次for 循环的执行,变量var的值被设置为下一个单词的列表中的字,word1 到 wordN 。

    例子:

    下面是一个简单的例子,它使用for循环跨越通过给定的数字列表:

    #!/bin/sh
    
    for var in 0 1 2 3 4 5 6 7 8 9
    do
       echo $var
    done
    

    这将产生以下结果:

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    • 注意:一开始没有加IFS=$'\n'的时候,遍历文件名带空格的时候,会将空格符单做分隔符,然后拆成多个文件。
    • 原因:默认情况下'\n'会被当做分隔符进行解析,通过IFS,可以会略掉'\n',这就是问题的原因喽。
    参考

    http://blog.csdn.net/whuslei/article/details/7187639

    相关文章

      网友评论

        本文标题:记一次简单的脚本使用(ffmpeg、shell、IFS)

        本文链接:https://www.haomeiwen.com/subject/poevmxtx.html