前言
FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。
FFmpeg的用户有Google,Facebook,Youtube,优酷,爱奇艺,土豆等。
组成
1、libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库;
2、libavcodec:用于各种类型声音/图像编解码;
3、libavutil:包含一些公共的工具函数;
4、libswscale:用于视频场景比例缩放、色彩映射转换;
5、libpostproc:用于后期效果处理;
6、ffmpeg:是一个命令行工具,用来对视频文件转换格式,也支持对电视卡实时编码;
7、ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移;
8、ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;
提取视频中音频与视频画面
想要提取视频中的音频信息,首选的技术是ffmpeg,网上的绝大多数ffmpeg使用教程都是:
比如你的文件是 test.mp4
分离视频出来:ffmpeg -i test.mp4 -vcodec copy -an 视频流.avi
分离音频出来:ffmpeg -i test.mp4 -acodec copy -vn 音频流.mp3
用这样的方法,提取视频是没有问题的。但在提取音频时,我遇到了以下错误:
代码如下 | 复制代码 |
Invalid audio stream. Exactly one MP3 audio stream is required. could not write header for output file #0 (incorrect codec parameters ) invalid argument |
其实,简单地提取音视频并不需要这么复杂,只要执行以下两行就行了:
分离视频出来:ffmpeg -i test.mp4 视频流.avi
分离音频出来:ffmpeg -i test.mp4 音频流.mp3
本篇文章为大家介绍了,在laravel 5.1下php artisan migrate的使用注意事项,很有一定的参考价值的,一起来看一看吧。PHP artisan migrate命令是laravel十分重要的问题,但在使用时需要注意几个情况:
(1)在migration文件夹下创建一张新的表,要使用php artisan make:migration语句
php artisan已经拥有强大的功能,就不要自己新建一个表
(2)composer dump-autoload的使用
composer dump-autoload是用来更新vendor/composer/autoload_classmap.php文件的,这个文件有许多配置,使用php artisan命令时就是事先调用这个文件。在新添加一张表时,先执行这个命令,在使用migrate。在删除一张表示,先使用migrate:rollback,再使用composer,在删除文件。
执行这条语句将修改laravel框架内vendor/composer/文件夹下的所有文件
(3)安装composer
有可能使用composer时显示命令不存在,这时就要安装composer。
代码如下 | 复制代码 |
php -r"readfile('https://getcomposer.org/installer');"> composer-setup.php
php composer-setup.php
php -r"unlink('composer-setup.php');" |
执行第一条命令下载下来的 composer-setup.php 脚本将简单的检测 php.ini 中的参数设置,如果某些参数未正确设置则会给出警告;然后下载最新版本的composer.phar 文件到当前目录。
上述 3 条命令的作用依次是:
下载安装脚本(composer-setup.php)到当前目录。
执行安装过程。
删除安装脚本 -- composer-setup.php 。
全局安装是将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了。
Mac 或 Linux 系统:打开命令行窗口并执行如下命令将前面下载的 composer.phar 文件移动到/usr/local/bin/ 目录下面:
代码如下 | 复制代码 |
sudomvcomposer.phar/usr/local/bin/composer |
选择排序:
选择排序(Selection sort)是一种简单直观的 排序算法 。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
Python 实现:
代码如下 | 复制代码 |
# selection_sort.py defselection_sort(arr): count=len(arr) foriinrange(count-1): # 交换 n-1 次 min=i # 找最小数 forjinrange(i, count): ifarr[min] > arr[j]: min=j arr[min], arr[i]=arr[i], arr[min] # 交换 returnarr
my_list=[6,23,2,54,12,6,8,100] print(selection_sort(my_list)) |
原文链接:http://www.cnblogs.com/tingshuo123/p/6935445.html
本篇文章主要介绍了Python递归函数定义与用法,有需要的朋友可以来参考一下。本文实例讲述了Python递归函数定义与用法。分享给大家供大家参考,具体如下:
递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出:
fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n
所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。
于是,fact(n)用递归的方式写出来就是:
代码如下 | 复制代码 |
deffact(n): ifn==1: return1 returnn*fact(n-1) |
上面就是一个递归函数。可以试试:
代码如下 | 复制代码 |
>>> fact(1) 1 >>> fact(5) 120 >>> fact(100) 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000L |
如果我们计算fact(5),可以根据函数定义看到计算过程如下:
代码如下 | 复制代码 |
===> fact(5) ===>5*fact(4) ===>5*(4*fact(3)) ===>5*(4*(3*fact(2))) ===>5*(4*(3*(2*fact(1)))) ===>5*(4*(3*(2*1))) ===>5*(4*(3*2)) ===>5*(4*6) ===>5*24 ===>120 |
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算
代码如下 | 复制代码 |
fact(10000)。 defdigui(n): sum=0 ifn<=0: return1 else: returnn*digui(n-1) print(digui(5)) |