FFmpeg 相关命令奉上
最近在使用 ffmpeg ,进行音视频编辑操作,积累了一些常用命令,现在奉上,有需要的可以来拿
显示视频信息 ffmpeg -i mavel4.mp4
将视频中的音频提取 ffmpeg -i mavel4.mp4 -acodec copy -vn m.m4a
将视频中的视频(不带音频)提取 ffmpeg -i mavel4.mp4 -vcodec copy -an mav.mp4
将视频中的字幕流提取 ffmpeg -i deal.mp4 -an -vn -scodec copy dys.ass
ffmpeg -i dys.mp4 -an -vn -bsf:s mov2textsub -scodec copy -f rawvideo dys1.txt
ffmpeg -i deal.mp4 -an -vn -c:s copy -f rawvideo -map 0:s dys2.txt
将视频字幕音频合流 ffmpeg -i input.mkv -i input.ass -i input.m4a -c copy output.mkv
将视频中的字幕去掉 ffmpeg -i dys.mp4 -vcodec+ copy -sn dys_no_vedio.mp4
ffmpeg -i dys.mp4 -sn -c:a copy -c:v copy -hide_banner dys2_no_vedio.mp4
视频叠加 ffmpeg -i main.mp4 -vf 'movie=effect.mp4 [f];[in][f] overlay=3:1 [out]' out.mp4
视频剪辑 ffmpeg -i dys.mp4 -ss 00:01:31.000 -t 00:00:25.000 -c:v libx264 -c:a libmp3lame -hide_banner cut_dys.mp4
视频转图片 ffmpeg -i deal.mp4 -f image2 -vf fps=1/30 -qscale:v 2 .\deal1\img%04d.jpg
获取视频信息 ffprobe -v quiet -show_format -show_streams -print_format json deal.mp4
视频帧数 ffprobe -v error -select_streams v -show_entries stream=nb_frames -of json deal.mp4
视频帧率
视频大小
视频时长
为视频添加logo ffmpeg -i deal.mp4 -i qh.jpg -filter_complex overlay logo_deal.mp4
将视频放在 背景图像指定位置
ffmpeg -loop 1 -i back.jpg -i deal.mp4 -filter_complex "[1]scale=w=480:h=280[s];[0][s]overlay=w/2:h/2" -shortest -y background_deal.mp4
图片嵌套
ffmpeg -loop 1 -i back.jpg -i back1.jpg -filter_complex "[1]scale=w=480:h=280[s];[0][s]overlay=w/2:h/2" -shortest -y -frames:v 1 background_deal.jpg
图片转视频
ffmpeg -f image2 -i image%4d.jpg tt.mp4
ffmpeg -f image2 -i target%04d.jpg -vcodec libx264 -r 30 -b 200k remix.mp4
调整视频分辨率
ffmpeg -i deal.mp4 -vf scale=180:320 deal_180_320.mp4 -hide_banner
调整视频码率
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
调整视频帧率
ffmpeg -i input.mov -sameq -r 24 -y output.mov
一次性调整视频帧率、码率、分辨率
ffmpeg -i daotian_1.mp4 -vf scale=960:540 -b:v 2048K -r 20 -y daotian_3.mp4
ffmpeg -i deal.mp4 -vf "scale=iw/3:ih/3" deal1_3.mp4
视频叠加
ffmpeg -i dys.mp4 -vf 'movie=deal_180_320.mp4 [f];[in][f] overlay=50:50 [out]' contact_dys_deal.mp4 --- 视频叠加
ffmpeg -ss 00:00:20 -i dtfry.mp4 -i daotian_1.mp4 -filter_complex "[1:v]scale=320:240[v1];[0:v][v1]overlay=10:10" -c:v libx264 -preset ultrafast -t 00:00:50 overlay_daotian.mp4
ffmpeg -ss 00:00:20 -i daotian_1.mp4 -i dtfry.mp4 -filter_complex "[1:v]scale=320:240[v1];[0:v][v1]overlay=10:10" -s 640x480 -c:v libx264 -preset ultrafast -r 20 -b:v 200k -t 1200 output.mp4
视频拼接
ffmpeg拼接视频方法concat详解 - 睫树 - 博客园
ffmpeg -f concat -i filelist.txt -c copy output.mkv
00:00:06 00:00:31
ffmpeg -i yunliu.flac -ss 00:00:06 -t 00:00:25 yunliu_25.flac
ffmpeg -i ym.MP3 -ss 00:00:35 -t 00:00:25 ym_25.mp3
ffmpeg -i daotian_1.mp4 -ss 00:00:08.000 -t 00:00:10.000 -c:v libx264 -c:a libmp3lame -hide_banner cut_daotian.mp4
// 视频加入动画
ffmpeg -re -i dtfry.mp4 -vf "movie=daotian_1.mp4,scale=320*240[test]; [in][test] overlay=x=40:y=40:eof_action=2 [out]" -vcodec libx264 overlay_dtfry.mp4
#或者使用 gif 也可以 0 重复 1 不重复
ffmpeg -i daotian_1.mp4 ss 00:00:10.000 -c:v libx264 -c:a libmp3lame -hide_banner daotian_1_back15.mp4
ffmpeg -i {} -i {} -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 -hide_banner {}
// 图片做背景透明
ffmpeg实例,为视频设置透明度的几种方案_张雨zy的博客-CSDN博客_ffmpeg画中画混合模式透明度
ffmpeg -i back_1.png -i daotian_1.mp4 -filter_complex [0:v]geq=a='122':lum='lum(X,Y)':cb='cb(X,Y)':cr='cr(X,Y)'[topV];[1:v][topV]overlay=(W-w)/2:(H-h)/2 -ss 0 -t 5 -y overlay3.mp4
ffmpeg -i back_1.png -i daotian_1.mp4 -filter_complex [0:v]geq=a='122':lum='lum(X,Y)':cb='cb(X,Y)':cr='cr(X,Y)'[topV]; [1:v][topV]overlay=0:0 -ss 0 -t 5 -y overlay3.mp4
// 视频叠加透明
ffmpeg -i a2.mp4 -i a3.mp4 -filter_complex [0:v]format=yuva444p,colorchannelmixer=aa=0.5[valpha];[1:v][valpha]overlay=(W-w)/2:(H-h)/2 -ss 0 -t 5 -y overlay4.mp4
// 视频添加字幕 参考网址
ass 字幕详解 ass字幕特效代码大全 - 百度文库
// 硬字幕 --- 适用于生成MP4
ffmpeg -i daotian_yunliu.mp4 -vf subtitles=subtitle.ass daotian1_hard_subtile.mp4
ffmpeg -i daotian1_hard_subtile.mp4 -i yunliu_25.flac -filter_complex amix=inputs=2 daotian1_hard_subtile_music.mp4
// 软字幕 --- 只适用于生成 mkv
ffmpeg -i daotian_1.mp4 -i subtitle.srt -c copy output.mkv
// 字幕文件格式转换
ffmpeg -i subtitle.srt subtitle.ass
// 将一张图片转换成指定秒数的视频
ffmpeg -r 30 -loop 1 -i back_1.jpg -pix_fmt yuv420p -vcodec libx264 -r:v 25 -preset medium -crf 30 -vframes 250 -r 30 -t 10 back1.mp4
daotian1_hard_subtile_with_background.mp4
ffmpeg -r 30 -loop 1 -i back1.jpg -pix_fmt yuv420p -vcodec libx264 -r:v 30 -preset medium -crf 30 -r 30 -t 30 back1.mp4
// 将一张图片作为视频背景
ffmpeg -loop 1 -i back.jpg -i daotian1_hard_subtile_music_960_540.mp4 -filter_complex 'overlay=900:200:shortest=1,format=yuv420p' -c:a copy daotian1_hard_subtile_with_background.mp4
// 转场
ffmpeg -i daotian1_hard_subtile.mp4 -i daotian1_hard_subtile.mp4 -i daotian1_hard_subtile.mp4 -i daotian1_hard_subtile.mp4 -i daotian1_hard_subtile.mp4 -filter_complex '[0][1]xfade=transition=hlslice:duration=2:offset=25[V01]; [V01][2]xfade=transition=radial:duration=2:offset=50[V02]; [V02][3]xfade=transition=dissolve:duration=2:offset=75[V03]; [V03][4]xfade=transition=vuslice:duration=2:offset=100,format=yuv420p[video]; [0:a][1:a]acrossfade=d=0.5:c1=tri:c2=tri[A01]; [A01][2:a]acrossfade=d=0.5:c1=tri:c2=tri[A02]; [A02][3:a]acrossfade=d=0.5:c1=tri:c2=tri[A03]; [A03][4:a]acrossfade=d=0.5:c1=tri:c2=tri[audio]' -map '[video]' -map '[audio]' -movflags +faststart xfad.mp4
ffmpeg -i daotian_2.mp4 -i daotian_1.mp4 -filter_complex 'xfade=transition=dissolve:duration=2:offset=25,format=yuv420p' -y radialVideo.mp4
// ffmpeg 音频转 flac
ffmpeg -i '14-爱,很简单(I Love You).ape' -acodec flac -compression_level 12 '14-爱,很简单(I Love You).flac'