ffmpge 备忘录

ffmpeg -i sp.mp4 -vf scale=500:-1 -t 100 ss.flv

sp.mp4 是所需要转换的文件地址

scale=500:-1 表示准换后的视频的宽度为500px -1表示高度自适应,也可以写成500:500,表示宽度和高度都是500px

-t 100 表示截取的视频的时间为100毫秒,

ss.flv是输出的文件名

ffmpeg -i demo.mp4 -ss 10.1 -t 0.001 1.jpg

截取demo.mp4的视频 从10.1秒开始 -t 0.001表示截取10.1秒的这张图片 保存为 1.jpg

ffmpeg -i demo.mp4 -filter:v "crop=10:20:100:100" out.mp4

crop里的参数依次为: 左边距:右边距:宽度:高度

ffmpeg -i demo.mp4 -vcodec copy -acodec copy out.flv

Ipad 可以直接播放mp4,可以用html5的video标签

<video width="555" height="315" controls preload="auto" src="demo.mp4"></video>

视频合成

因为 ffmpeg 是支持切分 mp4 视频的,所以我就理所当然的以为 ffmpeg 是支持视频合并。直到今天同事找我问方法,才发现一直以为的方法是错误的, mp4 不支持直接 concate(丢人了。。。),赶紧补了一下能量,从网上抓来了多种实现。

注: 这里的 mp4 指的是网上最多见的 h264+aac mpeg4 容器的方式

ffmpeg + ts

这个的思路是先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。

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

关于页面视频播放的一些总结

1.如果文件比较大的话一般只能播放流媒体格式的文件,比如flv格式,采用边下载边播放的形式,所以如果文件不是flv格式的话需要按照上面所介绍的转换方式进行转换。

2.文件的码率会影响下载的速度,如果当前网络为1M,那么想要流畅的播放视频文件的话,播放的文件的码率必须在1024Kbps以下,否则就需要进行转换,以达到最佳播放效果。

更多关于Ffmpeg的介绍 (http://ffmpeg.org/)[http://ffmpeg.org/]

更多关于Jplayer的介绍 (http://www.jplayer.org/)[http://www.jplayer.org/]

ffmpeg -i a.MPG  

Input #0, mpeg, from 'a.MPG':
Duration: 00:00:32.32, start: 245.117611, bitrate: 8581 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x480 [PAR 32:27 DAR 16:9], 9800 kb/s, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0.1[0x31]: Subtitle: dvdsub
Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.3[0x82]: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.4[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Stream #0.5[0x83]: Audio: ac3, 48000 Hz, stereo, s16, 160 kb/s
Stream #0.6[0x84]: Audio: ac3, 48000 Hz, stereo, s16, 160 kb/s
Stream #0.7[0x85]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
Stream #0.8[0x2d]: Subtitle: dvdsub
Stream #0.9[0x2e]: Subtitle: dvdsub
Stream #0.10[0x2f]: Subtitle: dvdsub
Stream #0.11[0x24]: Subtitle: dvdsub
Stream #0.12[0x30]: Subtitle: dvdsub
Stream #0.13[0x2a]: Subtitle: dvdsub
Stream #0.14[0x2b]: Subtitle: dvdsub
Stream #0.15[0x2c]: Subtitle: dvdsub
Stream #0.16[0x23]: Subtitle: dvdsub

可以看到Audio的Stream有2-7个,分别获取这几个audio音轨的命令是:

ffmpeg -i a.MPG -map 0:2 a.2.wav   
ffmpeg -i a.MPG -map 0:3 a.3.wav  
ffmpeg -i a.MPG -map 0:4 a.4.wav  
...  
ffmpeg -i a.MPG -map 0:7 a.7.wav  

a.%d.wav (2-7) 即是输出的几个音轨的音频文件。

命令:

ffmpeg -i AmericanCaptain.mkv -map 0:v -vcodec copy -map 0:a:1 -acodec copyAmericanCaptain.mp4 -strict -2

命令说明:

0:v 代表提取所有视频流(一般视频流只有1路)
0:a:1 代表提取第2路音频流
这个MKV是有2个音轨的,第一个为英文,第二个为中文,若不清楚原文件的信息,输入ffmpeg-i AmericanCaptain.mkv查看。
下面是我的文件信息。

Input #0, matroska,webm, from 'AmericanCaptain.mkv':
  Metadata:
    creation_time   : 2014-04-06 07:05:17
  Duration: 02:04:11.58, start: 0.000000, bitrate: 2497 kb/s
    Stream #0:0: Video: h264 (High), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0:1(eng): Audio: ac3, 48000 Hz, stereo, fltp, 448 kb/s (default)
    Metadata:
      title           : 英语
    Stream #0:2(chi): Audio: ac3, 48000 Hz, stereo, fltp, 448 kb/s
    Metadata:
      title           : 国语
-ss 开始位置
-t 结束位置
-acodec 原始编码

* 视频剪切

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

-ss 开始位置
-to 结束位置
-acodec 音频编码,copy代表沿用原始编码
-vcodec 视频编码,copy代表沿用原始编码
-y 覆盖原视频

* 提取mp3

ffmpeg -i input.mp4 -f mp3 output.mp3

-ar 44100 采样率
-ac 2 通道2位体声
-ab 192 码率192 kb/s
-f mp3 格式 mp3

* 提取音频

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac


参数
-threads n 指定线程 -threads 4
-vf "setpts=0.5*PTS" 加速视频
-vf "setpts=2.0*PTS" 减速视频
-s 640x480 指定画面大小
 144p 192x144
 240p 320x240
 360p 480x360
 480p 640x480
 720p 1280x720
 1080p 1192x1080
 2k 1152x2048
 4k 2304x4096

* 水平翻转视频或gif

ffmpeg -i input.mp4 -vf hflip out.mp4
ffmpeg -i in.gif -vf fhlip out.gif


* mp3改变比特率

ffmpeg -i input.mp3 -codec:a libmp3lame -b:a 128k output.mp3


* 图片修改分辨率

将图片宽度缩成320,高度缩成240

ffmpeg ffmpeg -i input.jpg -vf scale=320:240 output_320.png

将图片宽度缩成320,高度按比例缩小

ffmpeg ffmpeg -i input.jpg -vf scale=320:-1 output_320.png

将图片宽度缩成320,高度按比例缩小

ffmpeg ffmpeg -i input.jpg -vf scale=-1:320 output_320.png


* wav 转 mp3

ffmpeg -i inputfile.wav -ab 320k outputfile.mp3


* wma 转 mp3

ffmpeg -i inputfile.wma -acodec libmp3lame -ab 64K outputfile.mp3


* 合并多个mp3到一个mp3

ffmpeg -i "concat:123.mp3|124.mp3" -acodec copy output.mp3

* mp3 转 m4a

ffmpeg -i input.mp3 -c:a aac -b:a 32k output.m4a


* rtsp 转 rtmp

ffmpeg -re -rtsp_transport tcp -i "rtsp://host/dss/monitor/params?cameraid=1000025%2412&substream=1" -f flv -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 "rtmp://localhost:1935/mylive/1"