苏苏的博客

简约至极

ffmpeg安装使用

下载官方的静态编译的Linux通用二进制包,同时也包含ARM版本的

ffmpeg

armhf比armel硬件要求,树莓派2可用armhf,树莓派1使用armel

Windows版本也提供编译好的下载(也提供MacOs版)

https://ffmpeg.zeranoe.com/builds/

Mac编译好的下载(FFmpeg,FFserver,FFprobe,FFplay)

http://evermeet.cx/ffmpeg/

使用brew安装 brew install ffmpeg --with-ffplay

ffmpeg -protocols 查看ffmpeg支持的协议列表

让ffmpeg转为MP4边下边播

ffmpeg -i input.xx -c copy -movflags faststart output.mp4

-movflags faststart 可修改MP4的moov

关于faststart还有一个python项目,类似于ffmpeg软件包中的qt-faststart https://github.com/danielgtaylor/qtfaststart

可以使用pip install qtfaststart,仅需10KB+

pip3 install qtfaststart 也可以

http://blog.chinaunix.net/uid-342902-id-2416123.html

flv to mp4

ffmpeg -i input.flv -codec copy output.mp4 快速转化flv到mp4,高质量转化( only changes container without reencoding )

ffmpeg -i input.flv -c copy -copyts output.mp4 也比较快,高质量转化

ffmpeg -i aaa.flv -c:v libx264 -crf 28 output.mp4 带压缩的转换,非常消耗CPU和时间

更多用法可以参考 http://www.jianshu.com/p/053665062f22

mp4 to gif

http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html#usage

/tmp/1.sh

#!/bin/sh

palette="/tmp/palette.png"

filters="fps=15,scale=360:-1:flags=lanczos"

ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette
ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2

使用: /tmp/1.sh file.mp4 file.gif

视频裁剪

ffmpeg -i ./plutopr.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 ./cutout1.mp4 -y

-ss time_off set the start time offset 设置从视频的哪个时间点开始截取,上文从视频的第10s开始截取 -to 截到视频的哪个时间点结束。上文到视频的第15s结束。截出的视频共5s. 如果用-t 表示截取多长的时间如 上文-to 换位-t则是截取从视频的第10s开始,截取15s时长的视频。即截出来的视频共15s.

注意的地方是: 如果将-ss放在-i ./plutopr.mp4后面则-to的作用就没了,跟-t一样的效果了,变成了截取多长视频。一定要注意-ss的位置。

参数解析 -vcodec copy表示使用跟原视频一样的视频编解码器。 -acodec copy表示使用跟原视频一样的音频编解码器。

-i 表示源视频文件

-y 表示如果输出文件已存在则覆盖。

处理m3u8地址视频

下载转码 ffmpeg -i "http://m3u8的地址" -c copy -bsf:a aac_adtstoasc output.mp4

ffmepg -i http://xxx.m3u8 "文件名.mp4"

转化为mp4,需要直到结束,一个文件才能完整,才能写入其moov,其moov数据始终是在mdat之后,我们需要使用qtfaststart才能使其适合边下边播

我们可以使其转化为flv文件,这样视频不用完整就能播放,可以边转码边播放。

ffmpeg -i “http://xxx.m3u8" -b 8M -r 12 -g 12 output1.flv

ffmepg - i "http://xxx.m3u8" -b 2M out.flv

ffmpeg -i xx.rmvb -c:a copy -movflags faststart output.mp4

ffmpeg 大文件转换为mp4速度很慢通常低配机器是0.5X倍速, 可以转换为flv文件,转换为flv相比转换为mp4速度快很多,一般能3X倍速,还能边转换,边播放

转换为flv,需要设置码率高一些,不然视频画面,严重模糊,设置比特率高些不很影响转码速度

使用-b设置比特率(码率),默认为200Kbit/s,这里改为2048

-r 设定视屏帧率 即 fps

ffmepg -i xx.rmvb -b 2M a.flv

2M 适用于1280X720 普通清晰度. 如果分辨率更大需调整4M 或 6M

ffmpeg 合并 MP4文件 ffmpeg-sound.txt

file 1.mp4
file 2.mp4
file 3.mp4
file 4.mp4

ffmpeg -f concat -i ffmpeg-sound.txt -c copy final_output.mp4

批量合并ts文件

使用方式同合并mp4文件,这次我们可以使用命令行参数指定文件,而不需要文件列表.

ffmpeg -i "concat:file001.ts|file002.ts|file003.ts|file004.ts" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4

假如有很多文件,我们一个个拼接文件列表也很麻烦,可以使用shell快速生成 for i in {1..100};do echo -e "file$i.ts|\c";done;

对于一个文件夹内存在很多要合并的文件,可以使用下面脚本

ls * | perl -nale 'chomp;push @a, $_;END{printf "ffmpeg -i \"concat:%s\" -acodec copy -vcodec copy -absf aac_adtstoasc out.mp4\n", join("|",@a)}'

http://askubuntu.com/questions/352920/fastest-way-to-convert-videos-batch-or-single

https://www.zhouchun.net/blog/show/293

https://www.cnblogs.com/frost-yen/p/5848781.html

-vf 视频过滤器 -af 音频过滤器 用 -r 参数设置帧率 设置码率 –b 参数

音频参数: -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 -an 不处理音频

视频参数: -b 设定视频流量,默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的宽与高 -aspect 设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

http://blog.csdn.net/danielpei1222/article/details/61916435

ffmpeg 截图

http://blog.csdn.net/yourijing/article/details/50786758

mpv 播放多个url

直接 mpv url1 url2 url3 url4 就可以连起来播放

mpv播放URL时,先发送一个Head请求,探测文件大小,

HEAD请求使用的user-agent Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/47.0 (Chrome)

随后发送GET请求获取数据,使用的User-Agent: mpv 0.26.0.

mpv会读取文件的moov,mdat等信息,可自动处理不是qt-faststart的文件但没有Chrome智能,Chrome浏览器播放视频文件时,也有这个能力.

mpv获取数据是单线程的.

mpv 快捷键

shift+T最前端显示
PageUP下一章节
PageDown上一章节
Right前进5秒
Left后退5秒
Up前进10秒
Down后退10秒
RightClick/Space/P暂停播放
f/LeftDoubleClick全屏
ESC退出全屏
q/command+q退出播放器
O显示进度
[]播放速度
w/e好像是剪裁
r/t字幕位置
u字幕样式override
s/ctrl+s截图
d反交错开关Deinterlace
h/k电视频道(没什么用)
J切换字幕
L某一段重复播放(鬼畜)
Z/X字幕延迟
v隐藏显示字幕
M静音
<逐帧播放
>按下播放,回弹暂停
1对比度-
2对比度+
3亮度-
4亮度+
5伽马-
6伽马+
7饱和度-
8饱和度+
9、/减小音量
0、*增大音量

mpv播放显示

 (+) Video --vid=1 (*) (mpeg4 25.000fps)
 (+) Audio --aid=1 --alang=eng (*) (aac 2ch 44100Hz)
AO: [coreaudio] 44100Hz stereo 2ch floatp
VO: [opengl] 1920x1080 yuv420p

Chrome 浏览器播放只有声音没有图像

使用ffmpeg处理视屏编码,使用h264编码格式 ffmpeg -i xxx.mp4 -c:v libx264 -movflags faststart out.mp4 耗时2:05

ffmpeg -i input.rmvb -c:v libx264 -preset veryfast -crf 18 -c:a copy -movflags faststart output.mp4 编码速度更快,但体积大一下

压缩以缩小体积

18~28是一个合理的范围。18被认为是视觉无损的从技术角度上看当然还是有损的

它的输出视频质量和输入视频相当

ffmpeg -i bigfile.mp4 -c:v libx264 -s 800x450 -b:v 800k -ar 44100 -ab 48k -preset slower -crf 19 -movflags faststart output.mp4

http://blog.csdn.net/happydeer/article/details/52610060

编码后可以播放,并且比mpeg4编码的体积更小

 (+) Video --vid=1 (*) (h264 1920x1080 25.000fps)
 (+) Audio --aid=1 --alang=eng (*) (aac 2ch 44100Hz)
AO: [coreaudio] 44100Hz stereo 2ch floatp
VO: [opengl] 1920x1080 yuv420p

ffmpeg -i 1-2.mp4 -c:v libx264 -preset veryslow -crf 18 -c:a copy -movflags faststart ../1-2.mp4