全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 4341|回复: 56

【ffmpeg简单上手】视频处理

  [复制链接]
发表于 2021-2-9 18:49:19 | 显示全部楼层 |阅读模式
本帖最后由 小猪佩奇 于 2021-2-10 08:50 编辑

感谢大家的支持,接上一帖,下面来讲ffmpeg在视频方面的处理

视频编解码这块过于深奥,相关内容其他地方讲的更好,这里直接从实际应用开始

  同上一篇帖子提到,ffmpeg可以对不同格式的媒体文件进行转换,以下将一个mkv转换为mp4为例
  1. ffmpeg -i input.mkv output.mp4
复制代码

  一段最简单的代码,将input.mkv这个文件转成output.mp4,而事实上已经重新编码。以ffmpeg默认的模式即色彩空间不变,由源文件HEVC(265)
转为AVC(264),色深依然保持源文件的10bit,码率控制为crf 23。
  指定一个编码器
  
  1. ffmpeg -i input.mp4 -c:v libx264 output.mp4
复制代码

  码率控制
   一般我们不会直接使用默认的编码模式,为了控制体积和质量,可以手动配置码率
   使用恒定码率(不推荐)
  
  1. ffmpeg -i input.mp4 -b:v 2000k output.mp4
复制代码

   使用固定速率系数 crf,范围0~51,建议在17~23之间
  
  1. ffmpeg -i input.mp4 -crf 23 output.mp4
复制代码

   编码速度
  
  1. ffmpeg -i input.mp4 -preset slower output.mp4
复制代码

   preset:ultrafast/superfast/veryfast/faster/fast/medium/slow/slower/veryslow/placebo
   设置帧率 设置帧率为60帧
  
  1. ffmpeg –i input.mp4 –r 60 output.mp4
复制代码
播放速率不变
  
  1. ffmpeg –r 60 –i input.mp4 output.mp4
复制代码
播放速率增加
   设定时间/切割视频
  
  1. ffmpeg –i input.mp4 -ss 00:00:01 -to 00:01:00 output.mp4
复制代码
从第一秒开始到第一分结束,格式为时/分/秒
  
  1. ffmpeg –i input.mp4 -ss 00:00:01 -t 10 output.mp4
复制代码
从第1秒开始,持续10秒钟
  
  1. ffmpeg –i input.mp4 -ss 00:00:01 -t 10 output.mp4
复制代码

  指定色彩空间为 yuv420p,自动转10bit为8bit
  
  1. ffmpeg -i input.mp4 -pix_fmt yuv420p output.mp4
复制代码

   8bit转10bit
  
  1. ffmpeg -i input.mp4 -pix_fmt yuv420p10le output.mp4
复制代码

   编码等级profile & level profile分为基线-主流-高级,对应的等级从1.0到5.1,等级越高压缩率越高,支持的参数也越多
  
  1. ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level 5.1 output.mp4
复制代码

   预设
  
  1. ffmpeg -i input.mp4 -tune animation output.mp4
复制代码

   -tune:animation动画/film电影/stillimage静态图像/fastdecode快速编码/zerolatency低延迟
   设定分辨率 设定分辨率为1920*1080
  
  1. ffmpeg –i input.mp4 -s 1920*1080 output.mp4
复制代码

  
  1. ffmpeg –i input.mp4 -vf scale=1920:1080 output.mp4
复制代码

   等比例缩放
  
  1. ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 output.mp4
复制代码
缩放为原视频一半大小
  
  1. ffmpeg -i input.mp4 -vf scale=iw0.9:ih0.9 output.mp4
复制代码
缩放为原视频90%
   固定宽/高缩放
  
  1. ffmpeg -i input.mp4 -vf scale=1920:-1 output.mp4
复制代码
固定宽度为1920
  
  1. ffmpeg -i input.mp4 -vf scale=-1:1080 output.mp4
复制代码
固定高度为1080
   指定视频流
  
  1. ffmpeg -i input.mp4 -c:v copy -c:a copy output.mkv
复制代码
这个很有用,可以无损封装为其他格式
  
  1. ffmpeg -i input.mp4 -c:v copy -an copy output.mkv
复制代码
仅保留视频,剔除音频,对应-vn剔除视频,-sn剔除字幕
   选择流
  
  1. ffmpeg -i input.mkv -map 0:v -map 0:a -c:v copy -c:a copy output.mkv
复制代码
选择第一个文件的音视频进行混流
   
   实例(另存为bat)
   将目录内所有mp4文件使用X264编码|预设为动画|等级high5.1|速度为更慢|crf18|音频编码为aac|质量为6|输出为源文件名mp4保存至 完成 文件夹
  
  1. for %%a in ("*.mp4") do ffmpeg -i "%%~a" -c:v libx264 -tune animation -profile:v high -level 5.1 -preset slower -crf 18 -c:a aac -q:a 6 "完成/%%~na.mp4"
复制代码

   为目录内所有的mp4文件,匹配与文件名相同的ass字幕,封装为mkv
  
  1. for %%a in ("*.mp4") do ffmpeg -i "%%~a" -f ass -i "%%~na.ass" -map 0:v -map 0:a -map 1:s -c:v copy -c:a copy -c:s mov_text "完成/%%~na.mkv"
复制代码

   把目录内所有的mp4/mkv文件从第1秒开始截取1分钟,并固定宽为720像素等比例缩放,另存为文件名_new在当前目录
  1. for %%a in ("*.mp4" and "*.mkv") do ffmpeg -i "%%~a" -c:v libx264 -ss 00:00:01 -to 00:01:00 -vf scale=-1:720  "%%~na_new.mp4"
复制代码


硬编码
   目前芯片对硬编码的支持越来越完善,硬编码有着软编码无可比拟的性能,当然在质量上有所下降。
   以qsv(Quick Sync Video) 为例,只要把编码器替换成h264/h265_qsv,并转换色彩空间为nv12,即可支持大部分的参数(当然不支持crf了)
   我现在用的这个脚本,两天完成了超过500G的视频内容,节约了部分硬盘空间,同时带来更好的兼容性
   你问我为啥不换资源,部分资源确实很难找
  
  1. for %%a in ("*.mkv") do ffmpeg -i "%%~a" -filter_complex "subtitles='D\:/文件/临时/%%~na.ass'" -pix_fmt nv12 -c:v h264_qsv -preset slower -s 1920*1080 -q:v 19 -c:a aac -q:a 6 "完成/%%~na.mp4"
复制代码


追加一段硬编码 没错就是用GPU 前提是需要GPU支持。比较多的是Intel QSV和Nvidia NVENC,QSV门槛低大部分处理器都支持(甚至某n3450)
NV的比较蛋疼,得自行确认,我手上这块940m并不支持,所以无法给出更多建议。
  1. for %%a in ("*.mkv" and "*.mp4") do ffmpeg -i "%%~a"  -pix_fmt nv12 -c:v h264_qsv -preset slower  -q:v 18 -c:a aac -q:a 6 "完成/%%~na.mp4"
复制代码
输出至 完成 这个文件夹,你也可以改成其他名称。
  1. for %%a in ("*.mkv" and "*.mp4") do ffmpeg -i "%%~a"  -pix_fmt nv12 -c:v h264_nvenc -preset slower  -q:v 18 -c:a aac -q:a 6 "完成/%%~na.mp4"
复制代码
NV用这个,理论上也可以。。如果可以使用 -pix_fmt yuv420p 颜色空间那更好,尝试一下。
发表于 2021-2-9 18:52:34 | 显示全部楼层
支持技术大佬
发表于 2021-2-9 18:53:13 | 显示全部楼层
牛逼
 楼主| 发表于 2021-2-9 18:54:39 | 显示全部楼层

谢谢支持!
发表于 2021-2-9 19:01:04 | 显示全部楼层
好帖 不用百度了
 楼主| 发表于 2021-2-9 19:03:38 | 显示全部楼层
ddane 发表于 2021-2-9 19:01
好帖 不用百度了

希望对你有帮助
发表于 2021-2-9 19:35:50 来自手机 | 显示全部楼层
谢谢技术大佬,收藏备用
发表于 2021-2-9 19:37:26 | 显示全部楼层
大佬厉害了,能不能给个官方下载的链接?下哪个版本好一些?新手实在是不懂。
 楼主| 发表于 2021-2-9 19:41:34 | 显示全部楼层
雪丫鬟 发表于 2021-2-9 19:37
大佬厉害了,能不能给个官方下载的链接?下哪个版本好一些?新手实在是不懂。 ...

官网提供不同平台的安装包 http://www.ffmpeg.org/download.html
win:https://github.com/BtbN/FFmpeg-Builds/releases
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-20 09:41 , Processed in 0.063205 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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