ffmpeg基本命令(转)

1.分离视频音频流

ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

2.视频解复用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

3.视频转码

ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264              //转码为码流原始文件
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264  //转码为码流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi            //转码为封装文件
//-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

4.视频封装

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5.视频剪切

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg        //提取图片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //剪切视频
//-r 提取图像的频率,-ss 开始时间,-t 持续时间

6.视频录制

ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

7.YUV序列播放

ffplay -f rawvideo -video_size 1920x1080 input.yuv

8.YUV序列转AVI

ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

常用参数说明:

主要参数: -i 设定输入流 -f 设定输出格式 -ss 开始时间 视频参数: -b 设定视频流量,默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的宽与高 -aspect 设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 音频参数: -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 -an 不处理音频

------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------

1、将文件当做直播送至live

ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

2、将直播媒体保存至本地文件

 

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、将其中一个直播流,视频改用h264压缩,音频不变,送至另外一个直播服务流

 

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

 

4、将其中一个直播流,视频改用h264压缩,音频改用faac压缩,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

5、将其中一个直播流,视频不变,音频改用faac压缩,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

6、将一个高清流,复制为几个不同视频清晰度的流重新发布,其中音频不变

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

7、功能一样,只是采用-x264opts选项

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

8、将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布

ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

9、将一个JPG图片经过h264压缩循环输出为mp4视频

ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4

10、将普通流视频改用h264压缩,音频不变,送至高清流服务(新版本FMS live=1)

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃

11、滤镜
FFmpeg添加了很多滤镜,查看哪些滤镜有效可用命令:
# ./ffmpeg -filters.
 
1. FFmpeg滤镜文档
更多的信息和每个滤镜的使用示例可查看FFmpeg的滤镜文档: 
  http://ffmpeg.org/ffmpeg-filters.html

2. 示例
2.1 缩放
将输入的640x480缩小到320x240输出:  
# ./ffmpeg -i input -vf scale=iw/2:-1 output

iw  : 是输入的宽度;在本例中,输入宽度为640. 640/2 = 320. 
-1  : 通知缩放滤镜在输出时保持原始的宽高比,因此本例中缩放滤镜将选择240.

2.2 视频加速
1. 加速/减慢视频
可以使用 “setpts"(http://ffmpeg.org/ffmpeg.html#asetpts_002c-setpts)滤镜来改变视频速度。

加速视频命令: 
# ./ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv

Note : 这个方法在实现你想要的速度时,会采取丢帧策略。
如果想避免丢帧,可以指定输出的帧率比输入的帧率高的办法。
例如,输入的帧率为4, 指定输出的帧率为4x, 即16fps :
# ./ffmpeg -i input.mkv -r 16 -filter:v "setpts=0.125*PTS" -an output.mkv

减慢视频命令: 
# ./ffmpeg -i input.mkv -filter:v "setpts=2.0*PTS" output.mkv

2. 加速/减慢音频
可以使用" atempo" 音频滤镜来加速或减慢音频。如双倍速音频命令: 
# ./ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv

"atempo"滤镜对音频速度调整限制在0.5 到 2.0 之间,(即半速或倍速)。
如果有必要,可以使用多个atempo滤镜来实现,如下面的命令实现四倍速音频:
# ./ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv

使用更复杂的滤镜图,可以同时加速视频和音频:
# ./ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv

2.3 滤镜图,链,和滤镜关系
FFmpeg命令行中,跟在 "-vf"之后的就是一个滤镜图。
滤镜图可以包含多个滤镜链,而每个滤镜链又可以包含多个滤镜。

虽然一个完整的滤镜图描述很复杂,但可以简化以避免歧义。
滤镜链使用";"分隔,滤镜链中滤镜使用","分隔;
并且,滤镜链如果没有指定输入或输出,则默认使用前面的滤镜链的输出为输入,并输出给后面的滤镜链做输入。
 
下面的命令行是相等的:
ffmpeg -i input -vf [in]scale=iw/2:-1[out] output
ffmpeg -i input -vf scale=iw/2:-1 output               # the input and output are implied without ambiguity

对于下面: 
ffmpeg -i input -vf [in]yadif=0:0:0[middle];[middle]scale=iw/2:-1[out] output 
                                                       # 两个链的方式,每个链一个滤镜,链间使用[middle]填充
ffmpeg -i input -vf [in]yadif=0:0:0,scale=iw/2:-1[out] output                 
                                                       # 一个链的方式,链包含两个滤镜,使用默认链接
ffmpeg -i input -vf yadif=0:0:0,scale=iw/2:-1  output  # 输入输出也使用默认链接

2.4. 多个输入覆盖同一个2x2网格
下例中有四个输入,并使用 -filter_complex滤镜链接。
这个例子中四个输入都是 "-f lavfi -i testsrc", 也可以用别的输入代替。
在滤镜图中,第一个输入被填充到右下角,并设置成高度的两倍。
其它三个输入使用独立的滤镜"hflip, negate,和 edgedetect"。
覆盖视频滤镜被使用多次,后面三个都覆盖到第一个之上。
覆盖滤镜的偏移量在输入上形成一个网格。
# ./ffmpeg -f lavfi -i testsrc -f lavfi -i testsrc -f lavfi -i testsrc -f lavfi -i testsrc 
-filter_complex "[0:0]pad=iw*2:ih*2[a];[1:0]negate[b];[2:0]hflip[c];
[3:0]edgedetect[d];[a][b]overlay=w[x];[x][c]overlay=0:h[y];[y][d]overlay=w:h" 
-y -c:v ffv1 -t 5 multiple_input_grid.avi

2.5 转义字符
如文档中的描述,滤镜间的","分隔符是必须的,但它也会出现在参数中,如下面的"select"滤镜:
# ./ffmpeg -i input -vf select='eq(pict_type\,PICT_TYPE_I)' output        # to select only I frames

作为一个选择,在滤镜图中同样可以在双引号中使用空格,这样更方便阅读:
# ./ffmpeg -i input -vf "select=eq(pict_type,PICT_TYPE_I)" output          # to select only I frames
# ./ffmpeg -i input -vf "yadif=0:-1:0, scale=iw/2:-1" output               # deinterlace then resize

2.6 烧录时间码
使用 "drawtext"视频滤镜。

PAL 25 fps non drop frame: 
ffmpeg -i in.mp4 -vf "drawtext=fontfile=/usr/share/fonts/truetype/DroidSans.ttf: timecode='09\:57\:00\:00': r=25: \
x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1" -an -y out.mp4

 NTSC 30 fps drop frame 
(change the : to a ; before the frame count)_________________________________________________________
                                                                                                     \
ffmpeg -i in.mp4 -vf "drawtext=fontfile=/usr/share/fonts/truetype/DroidSans.ttf: timecode='09\:57\:00\;00': r=30: \
x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1" -an -y out.mp4

2.7 描述命令行参数
构建复杂的滤镜图时,会使命令行看起来一团混乱,如何使滤镜图命令行可管理就变得很有用了。
下面的例子包含三个滤镜,yadif, scale, drawtext的滤镜图的脚本:
 
#!/bin/bash
# ffmpeg test script

path="/path/to/file/"

in_file="in.mp4"
out_file="out.mp4"

cd $path

filter="-vf \"yadif=0:-1:0, scale=400:226, drawtext=fontfile=/usr/share/fonts/truetype/DroidSans.ttf: \
text='tod- %X':x=(w-text_w)/2:y=H-60 :fontcolor=white :box=1:boxcolor=0x00000000@1\""
codec="-vcodec libx264  -pix_fmt yuv420p -b:v 700k -r 25 -maxrate 700k -bufsize 5097k"

command_line="ffmpeg -i $in_file $filter $codec -an $out_file"

echo $command_line
eval $command_line
exit

NOTE: 包含整个滤镜图的双引号需要使用转义符 \", 
eval $command_line变量用于避免转义符丢失。
 
2.8 测试源
testsrc源滤镜生成一个测试视频源,包含有颜色模式,灰度值和时间戳。它在用于测试目的时很有用。
下面的例子生成一个10秒的输出,30fps,共300帧,帧大小为 1280x720:
# ./ffmpeg -f lavfi -i testsrc=duration=10:size=1280x720:rate=30 output.mpg

使用 smptebars源滤镜的例子:
# ./ffmpeg -f lavfi -i "smptebars=duration=5:size=1280x720:rate=30" output.mp4

ffplay同样能用于查看结果滤镜图:
ffplay -f lavfi -i "testsrc=duration=10:size=1280x720:rate=30"




ffmpeg -loglevel panic -i 1.mp4 -ss 0 -y -t 10 p%3d.jpg

ffmpeg -loglevel panic -i 1.mp4 -ss 0 -r 0.2 -y -t 60 p%3d.jpg

ffmpeg -ss 0 -i 1.mp4 -r 0.2 -y -t 60 p%3d.jpg

ffmpeg -i 1.mp4 -ss 03:00 -y p%3d.jpg

ffmpeg -ss 03:00 -i 1.mp4 -y -t 20 p%3d.jpg

ffmpeg -y -ss 00:00:50.000 -i 1.mp4 -f image2 out.jpg

ffmpeg -i input.flv -f image2 -vf fps=fps=1 out%d.png

ffmpeg -y -ss 00:00:50.000 -i 1.mp4 -f image2 -vf scale=200:-2 01.jpg


ffmpeg -y -ss 00:00:50.000 -i 1.mp4 -f image2 -vf scale=200:-2 -vf fps=fps=1 %2d.jpg

ffmpeg -y -i 1.mp4 -f image2 -vf scale=200:-2 -r 1 out%3d.jpg

ffmpeg -i 1.mp4 2>&1 | grep 'Duration' | cut -d ' '-f 4 | sed s/,//

./ffmpeg -i /data/screenshot/1.mp4 2>&1 | grep 'Duration' |cut -d ' ' -f 4 | sed s/,// //获取视频播放时长


首帧:
ffmpeg -y -i .\Ice.Age.Continental.Drift.720p.mkv -f image2 -vframes 1 firstpic.png
关键帧:
ffmpeg -y -vsync passthrough -i .\Ice.Age.Continental.Drift.720p.mkv -vf 'select=expr=eq(pict_type\,I)' -f image2 .\testpic\out_%05d.png
照片墙
ffmpeg -y -vsync passthrough -i .\Ice.Age.Continental.Drift.720p.mkv -vf select='gt(scene\,0.4)',scale=160:90,tile -vframes 2 preview_%05d.png

ffmpeg -y -i 1.mp4 -f image2 -vframes 1 %4d.jpg

ffmpeg -y -vsync passthrough -i 1.mp4 -vf select=expr=eq(pict_type\,I) -f image2 %05d.jpg

ffmpeg -y -vsync passthrough -i 1.mp4 -vf select=expr=eq(pict_type\,I) -vf scale=200:-2 -f image2 %05d.jpg


ffmpeg -y -vsync passthrough -i 1.mp4 -vf select='gt(scene\,0.4)',scale=160:90,tile -vframes 2 preview_%05d.png

ffmpeg -ss 00:00:50.000 -i 1.mp4 -f image2 -vframes 1 -y 123123.jpg

time ./ffmpeg -y -i 2.mp4 -filter_complex "select=e=isnan(prev_selected_t)+gte(t-prev_selected_t\,1)" -vsync passthrough -f image2 pic_1/%05d.jpeg

ffmpeg -y -i 2.mp4 -r 1 -s 200*120 -f image2 -vsync 2 ./pic2/out_%05d.jpeg






转载于:https://www.cnblogs.com/groundsong/p/5146112.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值