欢迎光临
我们一直在努力

【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 颜色空间那更好,尝试一下。

赞(0)
未经允许不得转载:798VPS » 【ffmpeg简单上手】视频处理
分享到: 更多 (0)