ffmpeg命令行专题一


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】



一、获取视频信息


ffmpeg -i video.avi //查看本地的视频信息

 

ffmpeg -i http://xxxx.com/videofiles/xxx2223.mp4

//查看远程http视频信息

二、分离视频音频流


ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流

 

ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

 

ffmpeg -i input.mp4 -an output.mp4             //去掉视频中的音频

 

ffmpeg -i test.avi -vcodec copy -an output.avi //去掉视频中的音频

三、视频转码相关


ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 output.mp4//ts视频流转mp4

 

ffmpeg -i test.h264 -vcodec copy -f mpegts output.ts//h264视频转ts视频流

 

ffmpeg -i test.h264 -vcodec copy -f mp4 output.mp4//h264视频转mp4

 

ffmpeg -i test.mp4 -b:v 640k output.flv //mp4转flv

 

ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv output.flv //mp4转flv

 

ffmpeg -i test.flv -b:v 640k output.mp4 //flv转mp4

 

ffmpeg -i test.mp4 -s 176x144 -vcodec h263 -r 25 -b 12200 -ab 12200 -ac 1 -ar 8000 output.3gp //mp4转3gp

 

ffmpeg -i test.avi -s aqif -vcodec -acodec mp3 -ac 1 -ar 8000 -r 25 -ab 32 -y output.3gp //avi转3gp

 

ffmpeg -i test.3gp -f avi -vcodec xvid -acodec mp3 -ar 22050 output.avi //3gp转flv

 

ffmpeg -i test.flv -s 176x144 -vcodec h263 -r 25 -b 200 -ab 64 -acodec mp3 -ac 1 -ar 8000 output.3gp //flv转3gp

 

ffmpeg -i test.mp4 output.avi //mp4转avi

 

ffmpeg -i test.flv -vcodec h264 -r 25 -b 200 -ab 128 -acodec mp3 -ac 2 -ar 44100 output.mp4 //flv转mp4

 

ffmpeg -i test.mp4 -c:v libx264 -ar 22050 -crf 28 output.flv //mp4转flv

 

ffmpeg -i test.avi -c copy -map 0 output.mp4 //avi转mp4

 

ffmpeg -i  http://vfile1.grtn.cn/2018/1542/0254/3368/154202543368.ssm/154202543368.m3u8 -c copy -bsf:a aac_adtstoasc -movflags +faststart test.mp4 //m3u8转mp4

 

ffmpeg -i test.mkv -y -vcodec copy -acodec copy output.mp4 //mkv转mp4

 

ffmpeg -i test.mkv -vcodec copy -acodec copy output.avi  //mkv转avi


四、图像处理相关


ffmpeg –i test.mp4 -y -f image2 -ss 8 -t 0.001 -s 350x240 testImage.jpg //截取指定时间的缩略图,-ss后跟的时间单位是秒

 

ffmpeg -i input.mp4 -vf "movie=logo.png [logo]; [in][logo] overlay=10:10:1 [out]" output.mp4//添加图片水印

 

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay test1.mp4//添加图片水印

 

ffmpeg –i input.mp4 -acodec copy-vcodec copy -vf "movie=test.png[watermark];[in][watermark]overlay=10:10:1[out]" output.mp4//添加图片水印

 

ffmpeg -y -i test2.mp4 -ignore_loop 0 -i test.gif -filter_complex overlay=0:H-h test_out2.mp4//添加GIF

 

ffmpeg -i input.flv -vf "drawtext=fontfile=simhei.ttf: text='抖音':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2" drawtext.mp4//添加文字水印


五、视频方向处理相关


ffmpeg -i test.mp4 -metadata:s:v rotate="90" -codec copy out.mp4//旋转90°

 

ffmpeg -i test.mp4 -vf "transpose=1" out.mp4//顺时针旋转90°

 

ffmpeg -i test.mp4 -vf "transpose=2" out.mp4//逆时针旋转90°

 

ffmpeg -i test.mp4 -vf "transpose=3" out.mp4//顺时针旋转90°后再水平翻转

 

ffmpeg -i test.mp4 -vf "transpose=0" out.mp4//逆时针旋转90°后再水平翻转

 

ffmpeg -i test.mp4 -vf hflip out.mp4//水平翻转视频画面

 

ffmpeg -i test.mp4 -vf vflip out.mp4//垂直翻转视频画面


六、视频剪切相关


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 持续时间

//从10s处开始剪切,持续15秒(此方法有时候会遇到视频第一帧黑屏,就是未播放时候的封面是黑色的,原因是未定位到关键帧I帧)

ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4

//从10s处开始剪切,持续15秒(此方法为优化后的方法,此剪切视频的方法可以解决第一帧黑屏问题,但是可能切割的时间落点稍稍的有一丢丢的不准确,但是应该可以落在误差范围之内)

 

ffmpeg -ss 10 -t 15 -i test.mp4 -codec copy cut.mp4

 


七、倒放音视频&加速视频&减速视频

ffmpeg.exe -i inputfile.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4 //视频倒放,无音频

 

ffmpeg.exe -i inputfile.mp4 -vf reverse reversed.mp4//视频倒放,音频不变

 

ffmpeg.exe -i inputfile.mp4 -map 0 -c:v copy -af "areverse" reversed_audio.mp4//音频倒放,视频不变

 

ffmpeg.exe -i inputfile.mp4 -vf reverse -af areverse -preset superfast reversed.mp4//音视频同时倒放

 

ffmpeg -i inputfile.mp4 -vf setpts=PTS/2 -af atempo=2 output.mp4//视频加速,帧速率变为2倍,调整倍速范围【0.25,4】

 

ffmpeg -i input.mkv -an -filter:v "setpts=0.5*PTS" output.mkv//视频减速播放

八、视频拼接

 


这里全部以mp4文件为例子,介绍两种方法,如果不是mp4文件,可以尝试先转码为mp4后再拼接起来


1、将 mp4 先转码为 mpeg文件,mpeg是支持简单拼接的,然后再转回 mp4。


ffmpeg -i 1.mp4 -qscale 4 1.mpg 

 

ffmpeg -i 2.mp4 -qscale 4 2.mpg 

 

cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -qscale 6 -vcodec mpeg4 output.mp4             

 


2、使用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             

九、视频的合并


下面通过动手实现抖音合拍功能来演示命令行的使用,首先准备好两个文件input1和input2,都是用手机拍摄的,高度相同;


1、两个视频的合并(注意参数hstack代表是横向合并,也就是左右合并,横向合并的形象类比为“川”;如果是竖向合并,也就是上下合并,用参数vstack,竖向或者纵向合并的形象类比为“三”)


ffmpeg -i input1.mp4 -i input2.mp4 -lavfi hstack output.mp4

 

注意:经过此命令处理后的视频output.mp4只会保留input1的音频

2、提取视频中的音频并合并音频


ffmpeg -i input1.mp4 -vn -y -acodec copy audio1.m4a

 

ffmpeg -i input2.mp4 -vn -y -acodec copy audio2.m4a

 

ffmpeg -i audio1.m4a -i audio2.m4a -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 audio3.mp3

3、把audio3.mp3文件合并到output.mp4中去


    ffmpeg -i output.mp4 -i audio3.mp3 -c:v copy -c:a aac -strict experimental success.mp4


最后我们得到的success.mp4就是合拍视频,包含了两个视频的音频。


 


三个视频合并(input=3表示希望合并的视频的个数)


ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4



好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***