• cygwin和ffmpeg的两三事


    cygwin和ffmpeg的下载地址:

    https://cygwin.com/install.html
    
    http://www.ffmpeg.org/download.html

    标题看上去有些无厘头,然而事实也是如此。事出本因是自己用维棠下载网页视频时速度很是不快,于是复制出来原始的下载地址贴到迅雷上去下载。速度一下提高了很多。但是由于网页上的某些视频是分段下载的,比如一个你在线看视频时服务器其实是将视频拆成几个段落分别下发给客户端(浏览器),这样就涉及一个问题:下载到本地后需要将分段视频合并成一个。维棠当然是有这样的功能,它会自动帮你完成,不过为了提高下载速度而选择迅雷的我就要另想办法了。

    因为记得有个开源的视频处理工具ffmpeg好像有类似功能,上网搜索了下发现它确实具备合并视频的能力。同样也找到了具体操作的方法:http://www.cnblogs.com/gmapapi/archive/2013/01/18/2866405.html

    本来也是有别人做好的什么“mp4合并器”之类的工具,但是自己来感觉更geek,哈哈。下载并安装好ffmpeg,在cmd按如下操作即可:

    ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
    ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
    ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

    PS:ffmpeg先将mp4文件封装成ts,然后再合并ts流为mp4。

    至于为什么跟cygwin扯上关系是这样的,因为不太喜欢cmd,所以在win7上安装了cygwin。因为这个ffmpeg合并mp4的过程每次都手动输入的话还是很麻烦的,所以写了个shell脚本。有朋友会讲那你为什么舍近求远不用bat,答案很简单:不会。

    #! /bin/bash
    #what: merge mp4 files into output.mp4
    #usage: mmp4 -i mp4files [-o output.mp4]
    #    e.g:    mmp4 xxx.1.mp4 xxx.2.mp4 xxx.3.mp4 -o yyy.mp4
    #    output: yyy.mp4, default output.mp4
    
    declare -a VIDEOS
    CONCAT=""
    OUTPUT=""
    COUNT=0
    
    if [ $# -eq 0 ]; then
        echo "usage: mmp4 -i mp4files [-o output.mp4]"
        exit 1
    elif [ "$1" != "-i" ]; then
        echo "usage: mmp4 -i mp4files [-o output.mp4]"
        exit 2
    else
        shift
        until [ $# -eq 0 -o "$1" == "-o" ]
        do
            VIDEOS[$COUNT]="$1"
            let COUNT++
            shift
        done
        if [ "$1" == "-o" ]; then
            shift
            if [ "$1" != "" ]; then
                OUTPUT="$1"
            else
                echo "usage: mmp4 -i mp4files [-o output.mp4]"
                exit 3
            fi
        else
            OUTPUT="output.mp4"
        fi
        if [ $COUNT -eq 0 ]; then
            echo "usage: mmp4 -i mp4files [-o output.mp4]"
            exit 4
        fi
    fi
    
    for VIDEO in ${VIDEOS[@]}
    do
        ffmpeg -loglevel 8 -i "$VIDEO" -vcodec copy -acodec copy -vbsf h264_mp4toannexb ${VIDEO%.*}.ts
        CONCAT=$CONCAT"|${VIDEO%.*}.ts"
    done
    
    ffmpeg -loglevel 8 -i "concat:${CONCAT:1}" -acodec copy -vcodec copy -absf aac_adtstoasc $OUTPUT
    rm *.ts    

    保存上述代码为mmp4.sh,然后在cygwin下创建个链接/usr/bin/mmp4,就可以使用了。

    mmp4 xxx.1.mp4 xxx.2.mp4 xxx.3.mp4

    PS:合并xxx.1/2/3.mp4到output.mp4

    啊,好像说来跟cygwin没什么关系。为了避免文不对题,还是再记录下cygwin的部分事宜:

    1、cygwin的安装源,可以使用国内的http://mirrors.163.com这样安装时会快一些。

    2、安装cygwin上非默认而不存在的工具时(比如curl),可以打开cygwin的setup程序,在选择package时输入自己想安装的工具,状态都改成install然后安装即可。

    3、cygwin在使用本地命令显示中文乱码,可在标题框右键选择options,设置Text:locale=C, Character-set=GBK

  • 相关阅读:
    授权中的with admin option和with grant option
    CentOS6.2(64bit)下mysql5.6.16主从同步配置
    linux zip命令
    从模版中找到控件的方法和找到样式的方法
    WPF 在事件中绑定命令(不可以在模版中绑定命令)
    WPF: ShowDialog() 切换到其他应用窗口后,再切换回来无法让子窗口总在最上方
    TreeViewItem实现整行选中 (两种用法)
    BitmapImage 读取内存流和显示图片
    IsKeyboardFocused -- 键盘焦点
    WPF中的imagesource 和内存图片的处理
  • 原文地址:https://www.cnblogs.com/lichmama/p/4805726.html
Copyright © 2020-2023  润新知