ffmpeg不常用命令整理

news/2024/7/23 21:22:45 标签: ffmpeg

最近做了许多有关音视频方面的工作,接触了一些不常用的命令,整理分享出来。

1.剪辑视频

ffmpeg -ss 1 -to 4 -accurate_seek -i input.mp4 -c:v copy output.mp4

指定从视频中的第1秒开始,到第4秒结束的部分剪辑。

  • ss:指定开始时间。
  • to:指定结束时间。如果换成 t,就是持续时间(1s + 4s)。
  • accurate_seek:时间定位时使用更精确的寻找方式。
  • 时间也可以使用时分秒的格式。例如"00:01:30"表示1分30秒。
  • 注意参数的顺序,不要把-i放在前面,否则会无效。

2.裁切视频

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4

裁切视频的指定区域。

  • 注意码率,可以添加-b:v指定。否则默认按200k处理。
  • crop=w:h:x:y:w和h分别表示裁剪后的宽度和高度,x和y表示裁剪的起始位置。比如一个1920x1080的视频,我需要裁切中间1080x1080的区域,那就是crop=1080:1080:420:0

3.去除绿幕并修改颜色

ffmpeg -i input.mp4 -vf "chromakey=#3fff08:0.1:0.04" -c:v qtrle -c:a copy output.mov
  • #3fff08是绿幕的颜色,也就是需要替换为透明的颜色。
  • 0.1是相似度(similarity)参数。这个参数决定了颜色匹配的严格程度。值越小,匹配的颜色范围越窄,也就是说,只有非常接近指定颜色的像素才会被视为透明。值越大,匹配的颜色范围越宽,也就是说,即使颜色和指定颜色有一些差距,也会被视为透明。
  • 0.04是混合度(blend)参数。这个参数决定了边缘像素的处理方式。值越小,边缘像素的处理越严格,可能会导致边缘部分出现锐利的边缘。值越大,边缘像素的处理越宽松,可能会导致边缘部分出现柔和的过渡。
ffmpeg -i output.mov -vf "color=color=#2B2D30:size=1920x1080 [bg]; [bg][0:v] overlay=shortest=1" output2.mp4
  • #2B2D30是需要修改的视频背景色。
  • 1920x1080是视频的分辨率,也就是给视频一个这么大的背景。

详细内容可以参看我的上篇博客:通过ffmpeg实现视频背景色替换

4.视频填充

ffmpeg -i input.mp4 -vf "scale=780:780:force_original_aspect_ratio=decrease,pad=1920:1920:(ow-iw)/2:(oh-ih)/2:color=#F5F5F5,setsar=1"
  • scale=780:780:表示对输入视频进行缩放操作,将视频的宽和高都缩放到780像素。
  • force_original_aspect_ratio=decrease:保持原始宽高比例。如果缩放后的视频超出了指定的尺寸,它会减少宽度或高度以保持宽高比,从而确保视频不会被拉伸。
  • pad=1920:1920:将视频填充到1920x1920的分辨率。
  • (ow-iw)/2:(oh-ih)/2:这些是填充的位置参数,表示填充的位置是在视频宽高的中心位置。ow,oh分别代表输出宽度和高度,iw,ih分别代表输入宽度和高度。你可以根据自己的情况计算。
  • color=#F5F5F5:填充的颜色。
  • setsar=1:它将视频的 SAR 设置为 1:1,有助于确保在不同的播放设备上视频的显示不会出现形变。

5.获取指定帧数图片

ffmpeg -i input.mp4 -vf "select='eq(n, N)'" -vframes 1 output_image.jpg
  • select='eq(n, N)':过滤器表达式,用于选择特定的帧数N。如果我们需要最后一帧,那就是总帧数-1。比如视频500帧,那就是select='eq(n,499)'
  • -vframes 1:指定处理的视频帧数为1帧。
  • 这种方式相较其他指定时间的方式更精准更灵活,可以获取更加准确的图像数据。只是需要预先知道视频的总帧数。

获取视频总帧数可以使用:

ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 input.mp4

6.图片合成视频

ffmpeg -loop 1 -i output_image.jpg -c:v libx264 -t 30 -pix_fmt yuv420p -vf "scale=1920:1080" -r 30 still_video.mp4
  • -loop 1:1表示启用循环。此时会无限循环图片。0的话就是一遍。
  • -c:v:指定视频编解码格式libx264。
  • -t:指定输出视频的时间。这里是30s。
  • -pix_fmt:指定像素格式yuv420p。
  • -vf "scale=1920:1080":将图片缩放到1920x1080像素的大小。如果原始图片的宽高比与1920x1080不同,那么图片将被拉伸以适应这个分辨率。
  • -r:指定帧数。这里是30帧。

7.指定固定码率(CBR)

或者说是静态码率。可以强行提升码率,比如上面图片生成的视频,可能结果就几十k的码率,如果想提高码率就可以使用此方法。

ffmpeg -i input.mp4 -b:v 2M -minrate 2M -maxrate 2M -bufsize 2M -nal-hrd cbr output.mp4
  • -b:v:设置视频的码率为2M。这是输出视频的平均码率。
  • -minrate 2M:设置视频的最小码率为2M。
  • -maxrate 2M:设置视频的最大码率为2M。
  • -bufsize 2M:设置编码器的缓冲区大小为2M。在CBR模式下,缓冲区大小通常设置为一个与码率相同的值,这有助于维持恒定的比特率输出。
  • -nal-hrd cbr:强制CBR模式。

输出码率结果会有一些偏差,但整体来说控制的不错。


后面我也会持续补充,大家可以收藏起来,以备不时之需。


http://www.niftyadmin.cn/n/5442085.html

相关文章

深度学习500问——Chapter03:深度学习基础(4)

文章目录 3.7 预训练与微调(fine tuning) 3.7.1 为什么无监督预训练可以帮助深度学习 3.7.2 什么是模型微调 fine tuning 3.7.3 微调时候网络参数是否更新 3.7.4 fine-tuning模型的三种状态 3.8 权重偏差和初始化 3.8.1 全都初始化为0 3.8.2 全都初始化为…

直播预告!5位大厂测开学长学姐助力你上岸测开

大家好,我是洋子,24届春招补录&25届暑期实习招聘已经进入到白热化阶段,近期收到了很多同学关于求职问题的咨询,所以开一场公益直播来为大家答疑解惑 主题:校招测试开发求职如何准备&职业发展 时间&#xff1…

增强创新与复杂问题解决能力

在当前的科技和工业革命中,人工智能(AI)的角色变得尤为重要,特别是其在增强创新能力和解决复杂问题方面的潜力。随着深度学习和机器学习技术的持续进步,AI的能力不断扩展,正逐步成为研发团队不可或缺的一员…

【蓝桥杯入门记录】模板1.0

基于STC15F2K60S2单片机的数码管显示程序。主要功能包括: 定义了一些宏和全局变量,包括数码管显示需要的码表、数码管的各个位的值、刷新计数器、按键扫描标志等。初始化函数All_Init()用来初始化IO口,包括控制蜂鸣器、LED灯、数码管位选和段…

Linux笔记之shell中的重定向

Linux笔记之shell中的重定向 code review! 文章目录 Linux笔记之shell中的重定向1.shell重定向介绍2.文件描述符3.输出重定向chatgpt——>和>>都是用于将输出重定向到文件的符号,它们的区别 4.输入重定向5.重定向绑定>/dev/null2>&1>/dev/n…

【漏洞复现】京师心智心理健康测评系统MyReport.ashx存在敏感信息泄露

漏洞描述 京师心智心理健康测评系统MyReport.ashx存在敏感信息泄露 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未…

【目标检测】基于深度学习的垃圾桶满溢检测(yolov5算法,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内) 路虽远,行则将至;事虽难,做…

面试常问:为什么 Vite 速度比 Webpack 快

前言 最近作者在学习 webpack 相关的知识,之前一直对这个问题不是特别了解,甚至讲不出个123....,这个问题在面试中也是常见的,作者在学习的过程当中总结了以下几点,在这里分享给大家看一下,当然最重要的是…