ffmpeg和ffplay下令行实战手册

打印 上一主题 下一主题

主题 863|帖子 863|积分 2589

视频拼接用concat

n
设置分段数。默认值为2。
v
设置输出视频流的数量,也就是每个片断中视频流的数量。默认值为1。
a
设置输出音频流的数量,也就是每个片断中音频流的数量。默认值为0。
一定要注意n v a的数量
视频分段拼接(ffplay 不可调用seek函数进行seek)

注意:一定是vavava 而不是vvvaaa,否则GG
ffmpeg:
  1. ffmpeg -i C:/Users/CY/Desktop/video4_540_960.mp4 -i C:/Users/CY/Desktop/video5_540_960.mp4
  2. -i C:/Users/CY/Desktop/video6_540_960.mp4 -filter_complex
  3. "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]"
  4. -map "[outv]" -map "[outa]" C:/Users/CY/Desktop/videoddddddddddd.mp4
复制代码
一定要写setsar= 1/1,否则分辨率不同等的时候GG如下:
  1. Input link in1:v0 parameters (size 720x1282, SAR 1:1) do not match the corresponding output
  2. link in0:v0 parameters (720x1280, SAR 1:1)
复制代码
ffplay:
  1. ffplay -f lavfi "movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,setsar= 1/1[v0];
  2. movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,setsar= 1/1[v1];
  3. amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[a0];
  4. amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
  5. [v0][a0][v1][a1]concat=2:v=1:a=1[out0][out1]"
复制代码
ffplay:
  1. ffplay -f lavfi "movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,setsar= 1/1[v0];
  2. movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,setsar= 1/1[v1];
  3. amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[a0];
  4. amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
  5. [v0][v1]concat=n=2:v=1:a=0[out0];
  6. [a0][a1]concat=n=2:v=0:a=1[out1]"
复制代码
拼接3段视频
ffplay:
  1. ffplay -f lavfi "movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,setsar= 1/1[v0];
  2. movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,setsar= 1/1[v1];
  3. movie=C\\:/Users/CY/Desktop/video6_540_960.mp4,setsar= 1/1[v2];
  4. amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[a0];
  5. amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
  6. amovie=C\\:/Users/CY/Desktop/video6_540_960.mp4[a2];
  7. [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[out0][out1]"
复制代码
给视频添加黑边,让视频添补并居中显示

ffmpeg:
  1. ffmpeg -f lavfi -i movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,
  2. scale=270:480,pad=540:960:(ow-iw)/2:(oh-ih)/2:black[out0];
  3. amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[out1]   
  4. C:\Users\CY\Desktop\out.mp4
复制代码
iw ow
  1. ffmpeg -y -i C:\Users\CY\Desktop\0.mp4 -i C:\Users\CY\Desktop\1.mp4 -filter_complex  
  2. "[0:v]scale='if(gte(iw/ih,1),1080,-1)':'if(gte(iw/ih,1),-1,1920)',
  3. pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black[v0];
  4. [1:v]scale='if(gte(iw/ih,1),1080,-1)':'if(gte(iw/ih,1),-1,1920)',
  5. pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black[v1];[v0][0:a][v1][1:a]
  6. concat=n=2:v=1:a=1[v][a]" -map [v] -map [a]  C:\Users\CY\Desktop\out.mp4
复制代码
不同分辨率视频分段拼接,而且,设置单个视频的缩放比例和摆放位置

给视频上下左右添加50像素黑边
scale:将视频缩小到620*476,给即将添加的黑边预留像素
pad: “宽”、“高”、“X坐标”和“Y坐标”,宽和高指的是输入视频尺寸(包含加黑边的尺寸),XY指的是视频地点位置
  1. ffmpeg -i test.ts -vf "scale=620:476,pad=720:576:50:50:black" test.mp4
复制代码
  1. C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -i D:/123.mp4 -vf
  2. "scale=100:100,pad=500:500:0:300:black" D:/linux-share-dir/video_file/output.mp4
复制代码
参数表明:
100:100 视频帧在画布里的尺寸–按比例缩放的. (w:h)
500:500 画布的尺寸 . (w:h)
0:300 视频帧在画面上的位置. (x:y)
black 画布的背景颜色
ffplay:
  1. ffplay  -f lavfi "movie=C\\:/Users/CY/Desktop/video.mp4,setsar= 1/1[v0];
  2. amovie=C\\:/Users/CY/Desktop/video.mp4[a0];
  3. movie=C\\:/Users/CY/Desktop/video5_540_960.mp4, crop=iw:ih/2[croped];
  4. [croped]scale=1080*iw/ih:1080,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,setsar= 1/1[v1];
  5. amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
  6. movie=C\\:/Users/CY/Desktop/mp4.mp4, pad=1920:1080:0:300:black,setsar= 1/1[v2];
  7. amovie=C\\:/Users/CY/Desktop/mp4.mp4[a2];
  8. [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[out0][out1]"
复制代码
视频画中画复杂嵌套用overlay(ffplay 可调用seek函数进行seek)

ffplay:
  1. ffplay -x 600 -i C:/Users/CY/Desktop/video.mp4 -vf
  2. "movie=C\\:/Users/CY/Desktop/gx.mp4[v_logo];[in][v_logo]overlay=100:100[out]"
  3. -af "amovie=C\\:/Users/CY/Desktop/gx.mp4[a_logo];[in][a_logo]amix[out]"
复制代码
ffmpeg:
  1. ffmpeg -y -i C:/Users/CY/Desktop/video.mp4 -vf
  2. "movie=C\\:/Users/CY/Desktop/gx.mp4[v_logo];[in][v_logo]overlay=100:100[out]"
  3. -af "amovie=C\\:/Users/CY/Desktop/gx.mp4[a_logo];[in][a_logo]amix[out]"
  4. C:\Users\CY\Desktop\outttttttt.mp4
复制代码
视频画中画复杂嵌套用overlay(ffplay 不可调用seek函数进行seek)

ffplay:
  1. ffplay -f lavfi "movie=C\\:/Users/cy/Desktop/video.mp4[in];
  2. amovie=C\\:/Users/cy/Desktop/video.mp4[in_a];
  3. movie=C\\:/Users/cy/Desktop/mp4.mp4[logo];
  4. amovie=C\\:/Users/cy/Desktop/mp4.mp4[logo_a];
  5. movie=C\\:/Users/cy/Desktop/video4_540_960.mp4,scale=512:288[logo_v_1];
  6. amovie=C\\:/Users/cy/Desktop/video4_540_960.mp4[logo_a_1];
  7. [in][logo]overlay=100:100[overlay0];
  8. [overlay0][logo_v_1]overlay=200:200[out0];
  9. [in_a][logo_a]amix[m];[m][logo_a_1]amix[out1]"
复制代码
视频拼接+视频画中画复杂嵌套(ffplay 不可调用seek函数进行seek)

out0 out1又可作为输入
ffplay:
  1. ffplay  -f lavfi "movie=C\\:/Users/CY/Desktop/video.mp4,setsar= 1/1[v0];
  2. amovie=C\\:/Users/CY/Desktop/video.mp4[a0];
  3. movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,crop=iw:ih/2[croped];
  4. [croped]scale=1080*iw/ih:1080,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,setsar= 1/1[v1];
  5. amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
  6. movie=C\\:/Users/CY/Desktop/mp4.mp4, pad=1920:1080:0:300:black,setsar= 1/1[v2];
  7. amovie=C\\:/Users/CY/Desktop/mp4.mp4[a2];
  8. [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[out0][out1];
  9. movie=C\\:/Users/cy/Desktop/mp4.mp4[v_logo];
  10. amovie=C\\:/Users/cy/Desktop/mp4.mp4[a_logo];
  11. [out0][v_logo]overlay=100:100[out0];
  12. [out1][a_logo]amix[out1]"
复制代码
视频精准seek

ffmpeg截取帧为图片

  1. ffmpeg -y -f lavfi -i movie=C\\:/Users/CY/Desktop/1658673245.mp4,setsar=1/1[out_v_1];
  2. amovie=C\\:/Users/CY/Desktop/1658673245.mp4[out_a_1];
  3. movie=C\\:/Users/CY/Desktop/bb.mp4,scale=64:36,pad=64:36:(ow-iw)/2:(oh-
  4. ih)/2:black,setsar=1/1[out_v_2];
  5. amovie=C\\:/Users/CY/Desktop/bb.mp4[out_a_2];
  6. [out_v_1][out_v_2]overlay=100:100[out0];[out_a_1][out_a_2]amix[out1]
  7. -ss 00:00:20 -t 1 -r 3 -q:v 2 -f image2  C:/Users/CY/Desktop/foo-%05d.jpeg
复制代码
ffplay seek_point

  1. ffplay  -f  lavfi   "movie=C\\:/Users/CY/Desktop/video.mp4:seek_point=8.337878[out0];
  2. amovie=C\\:/Users/CY/Desktop/video.mp4:seek_point=8.337878[out1]"
复制代码
ffplay:
  1. ffplay -f lavfi "movie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8[in];
  2. amovie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8[in_a];
  3. movie=C\\:/Users/cy/Desktop/mp4.mp4::seek_point=8[logo];
  4. amovie=C\\:/Users/cy/Desktop/mp4.mp4::seek_point=8[logo_a];
  5. movie=C\\:/Users/cy/Desktop/video4_540_960.mp4::seek_point=8,scale=512:288[logo_v_1];
  6. amovie=C\\:/Users/cy/Desktop/video4_540_960.mp4::seek_point=8[logo_a_1];
  7. [in][logo]overlay=100:100[overlay0];
  8. [overlay0][logo_v_1]overlay=200:200[out0];
  9. [in_a][logo_a]amix[m];
  10. [m][logo_a_1]amix[out1]"
复制代码
视频到放 reverse areverse

ffplay:
  1. ffplay -x 500 -f  lavfi  
  2. "movie=C\\:/Users/CY/Desktop/video4_540_960.mp4:seek_point=0,reverse[out0];
  3. amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4:seek_point=0,areverse[out1]"
复制代码
ffplay:
  1. ffplay -x 600 -f lavfi "movie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8,reverse[in];
  2. amovie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8,areverse[in_a];
  3. movie=C\\:/Users/cy/Desktop/mp4.mp4:seek_point=8,reverse[logo];
  4. amovie=C\\:/Users/cy/Desktop/mp4.mp4:seek_point=8,areverse[logo_a];
  5. movie=C\\:/Users/cy/Desktop/video4_540_960.mp4:seek_point=8,scale=512:288,reverse[logo_v_1];
  6. amovie=C\\:/Users/cy/Desktop/video4_540_960.mp4:seek_point=8,areverse[logo_a_1];
  7. [in][logo]overlay=100:100[overlay0];
  8. [overlay0][logo_v_1]overlay=200:200[out0];
  9. [in_a][logo_a]amix[m];
  10. [m][logo_a_1]amix[out1]"
复制代码
GIF编解码

png图片合成GIF:
  1. ffmpeg -i C:\Users\CY\Desktop\%d.png -vf palettegen C:\Users\CY\Desktop\palette.png
  2. ffmpeg  -framerate 2 -i C:\Users\CY\Desktop\%d.png
  3. -i C:\Users\CY\Desktop\palette.png -lavfi paletteuse C:\Users\CY\Desktop\out.gif
复制代码
先给所有png图片天生一个调色板PNG图片,然后再利用调色板PNG图片合成带透明度的GIF图片,否则有色差或者无透明度。注意:是所有和一个,不能是所有和所有,只能有一个调色板PNG图片,否则还是有色差。
天生高质量GIF

1.默认配置+关闭抖动
  1. ffmpeg -i C:\Users\CY\Desktop\相框.mp4 -vf
  2. "fps=10,scale=480:-1:flags=lanczos,split[split1][split2];[split1]palettegen[pal];
  3. [split2][pal]paletteuse=dither=none" C:\Users\CY\Desktop\相框.gif
复制代码
这个方式已经是最好的,用全局调色板(用单个调色板,反而色带更严峻,编码也更久),关门抖动(否则很容易出现色差和网格)
输出RGB数据

  1. ffmpeg -i C:\Users\CY\Desktop\bjz.gif -vf "format=rgb24" -f image2
  2. C:\Users\CY\Desktop\bjz\bjz_output%d.rgb
复制代码
播放RGB数据

  1. ffplay -pixel_format rgb24 -video_size 480x856 -i C:\Users\CY\Desktop\bjz41.rgb
复制代码
必须指定分辨率,否则花屏或者报错0x0 invalid
音视频倍速

  1. ffmpeg -y -i C:\Users\CY\Desktop\相框.mp4 -r 25*4 -filter_complex
  2. "[0:v]setpts=1/4*PTS[v];[0:a]atempo=4.0[a]" -map "[v]" -map "[a]"
  3. C:\Users\CY\Desktop\相框2.mp4
复制代码
注意:音频倍速和视频倍速是分开写的,想降低视频的总时长,音频也是要增速的,如果盼望不丢帧,则设置精确的帧率
天生圆角矩形图片

  1. ffmpeg -y -i C:\Users\CY\Desktop\mn.jpg -frames:v 1  -filter_complex "
  2. [0]format=rgba,geq=lum='p(X,Y)':a='if(gt(abs(W/2-X),W/2-200)*gt(abs(H/2-Y),H/2-200),
  3. if(lte(hypot(200-(W/2-abs(W/2-X)),200-(H/2-abs(H/2-Y))),200),255,0),255)'"  
  4. C:\Users\CY\Desktop\example.png
复制代码
天生圆形图片

  1. ffmpeg -y -i C:\Users\CY\Desktop\mn.jpg -vf
  2. "format=yuva420p,geq=lum='p(X,Y)':a='if(lt(sqrt((X-3648/2)^2+(Y-
  3. 5472/2)^2),3648/2),255,0)'"
  4. C:\Users\CY\Desktop\mn_yj.png
复制代码
中文文字天生PNG图片

  1. ffmpeg -y -f lavfi -i "color=c=0x00000000:s=300x100,drawtext=text='快乐体':fontfile=C\\:/Users/CY/Desktop/ZCOOL_KuaiLe/ZCOOLKuaiLe-Regular.ttf:fontsize=100:fontcolor=#ffffffdd:x=(w-text_w)/2:y=(h-text_h)/2,format=rgba" -frames:v 1 C:\Users\CY\Desktop\ZCOOL_KuaiLe\ZCOOLKuaiLe-Regular.png
复制代码
注意:指定fontfile路径时,:号必须用\\转义,路径不能用\,必须/,纵然''包起来和\\转义也不行,否则乱码,由于路径指定有误,ffmpeg无法找到字库。文字颜色必须是rgba,RRGGBBAA排序。不能写argb然后幻想AARRGGBB

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表