也许能用得上的FFmpeg常用命令
这几天闷着研究了几天的FFmpeg其实还有Aegisub和vs但这边两个也只能说是浅尝辄止,想着发个综合的总结文章,就当是学习成果的笔记了
但其实都是些比较常用的视频处理命令,再复杂一些的ffmpeg命令我也不会而且还是直接上Pr吧好吧就是因为不想开Pr才会研究这些
我也是外行,可能会有用词不准确等地方,而且讲的都是些很基础的命令,有问题欢迎评论区指教
首先还是
环境问题都用ffmpeg了还要问环境问题吗
首先必然是要把ffmpeg目录添加到环境变量的Path里 基本操作 不懂先百度
我用的是windows terminal开命令提示符不是Powershell真是很抱歉,进设置把默认的启动目录改成了桌面。这么做的理由是桌面仅仅是作为一个临时的文件夹,后来处理结束的视频项目都会被我归类到存储文件夹里,简单总结来说就是整理起来很方便。
一图流(用于广播)
如果不加-x264opts "keyint=24:min-keyint=24:no-scenecut" 这段代码的话,很有可能出现关键帧问题,类似于你点到了00:05这个位置但关键帧是在00:04所以跳去了00:04这个时间上,无论是本地播放还是打轴都会有影响,但上传后经过服务器转码应该就没有这个问题
-tune stillimage 静止图像
如果是本地视频没什么需要改的,但是有上述关键帧问题的话,可以用这条命令解决:
复制视频流和音频流,不经过二次转码,画面没有损失,速度快
一开始我是用小丸和quickcut来做一图流,但都有一些兼容性问题,只好自己研究下
可以通过crf这个命令自行修改画质 额 该不会我还要在这里介绍crf是什么吧?
简单点来说crf这个数值越大画质越差,越小画质越好,但都一图流了,画质随便你了.jpg
将第一个视频的画面和第二个视频的音频合并(用于文化放送之类的低画质画面广播)
将一个视频内的第一个音轨和第二个音轨混流(用于鹅鹅鸭or其他游戏)
因为我的个人习惯是OBS把自己的录音和游戏声音放在两个音轨里 因为一旦录音这边出了什么突发状况我可以后期把它剪掉
有的时候会需要把鹅鹅鸭的录像发给群友,但视频太大不方便,这里可以同时把视频变成720p外加混流两条音轨,在同一条命令里解决:
继续延伸一下 有的时候你不需要整个视频全发出去 要剪切一下的
按秒剪切+合并音轨+缩放成720p+改帧率
按秒剪切这个只能简单地剪切一下,有的时候你得准确到关键帧,但ffmpeg的准确到关键帧剪切这个我研究了一下没研究出来,一直在报错,干脆用的losslesscut的GUI
地址:https://github.com/mifi/lossless-cut
这玩意儿支持导入potplayer的章节文件,我有的时候直接potplayer打好位置然后把.pbf章节文件直接导入进来首先你得去potplayer设置里把章节文件设置成保存在视频文件旁边,选好内容导出完事
这玩意儿还支持把多余的音轨给去掉,就是不支持混流,不过够用了。
合并音视频(用于扒流orVS混流)最基础的一条
顺便说一句 -y的意思是默认覆盖 -hide_banner的意思是省略开头一长串的内容
压硬字幕(字幕文件要放在运行目录下不然会报错 我也不知道为什么)
-b:v 8000k 设置码率,这个设定和crf冲突,两边只能选一个
码率是8000k 1080p下这个画质基本已经很好看了
-c:v 后面跟的是编码器,可以输入ffmpeg -encoders来查询受支持的编码器,可以根据喜好换成libx264、h264_nvenc、libx265、hevc_nvenc之类的
如果追求压制速度,当然前提你是n卡可以无脑
当然出来的画质也就十分感人了
-preset 是压制速度预设 一般选slow
放大到1080p(用于处理文化放送之类的感人画质广播)字幕是1080p的就行了
可以自选加一下编码器、码率、压制预设等设定
缩小到720p(用于处理上传大小限制)比如QQ群啥的你只是想分享一下好看的视频当然不需要那么大对不对
可以自选加一下编码器、码率、压制预设等设定
然后就是偶尔要加入的说明性图片,这个如果要加的有点多处理起来麻烦那还是干脆Pr吧
真的不想开Pr真的不想开Pr真的不想开Pr真的不想开Pr真的不想开Pr
插入1280*720大小的图片 放在x=0 y=0的位置 时间从第240秒到第327秒
这个是按秒加入图片的,如果需要更准确一点,按帧加入图片的话:
图片缩放至400:300 放在x=100 y=150的位置 时间从第11帧到第21帧
再发散思维一下,如果我要加入多个图片怎么办
首先-filter_complex这个命令后面的内容,不同的命令可以通过分号「;」来分隔开来
通过这种方式我们可以在-filter_complex后的命令里同时完成多个目的
然后简单介绍一下,[1:v]代表第二个输入内容的画面部分,[0:a]代表第一个输入内容的所有音频部分
[0:0]代表第一个输入文件的第一个轨道一般是画面本体,[0:1]代表第一个输入文件的第二个轨道一般是音频轨道,[0:2]代表第一个输入文件的第三个轨道一般还是音频轨道,以此类推
所以"[1:v]scale=400:300[ovrl], [0:v][ovrl]overlay=100:150:enable='between(n,11,21)'"这段的意思是,第二个输入图片改变为400*300的大小,并且把改变后的图片自定义命名[ovrl],把[0:v]和[ovrl]混流合并 位置是x=100 y=150 持续时间按帧计数 从第11帧到第21帧
这么一来的话,加入两个图片就是
解释一下就是第一个图片拉伸到400:300 放在x=100 y=150的位置 时间从第11帧到第21帧,第二个图片500:200 放在x=200 y=220的位置 时间从第70帧到第90帧
但这是嵌套的,临时想出来,也许有更好的写法吧。开Pr啦(低语)
插入gif好像要设定一下给透明通道,但我到现在还没试过加gif,先不管了
可以自选加一下编码器、码率、压制预设等设定
有的时候你临时用整个桌面录制的视频,但是实际上你只需要这个桌面的一部分画面 该怎么办呢
1920*1080大小的视频 以左上角为原点 x=10 y=20的位置 截取250*300大小的画面
在这之前可以先用截图工具定位一下,比如snipaste
-vf crop=w:h:x:y
w h是裁切后的视频的大小 x y是原视频左上角的起点
可以自选加一下编码器、码率、压制预设等设定
最后
-vn 不处理视频
-sn 不处理字幕
-an 不处理音频
简单点写一下
提取音频
好像大部分视频默认的音频都是aac格式,所以这里-c:a copy后面跟的输出的音频文件是aac格式的
如果不介意有损压缩的话就转换成mp3格式 应该不会因为直接复制码流而报错
提取视频
感觉这些应该可以包括大部分平时常用的视频处理命令了
大概整篇文章都很nerd吧 都是些很无聊的碎碎念 能看到这里真是非常感谢
如果能帮到你就再好不过了