Author : zbzhen, Modified : Sat Jul 13 18:29:55 2024
常见需求
最终目标: 体积小,视频和音频清晰,并且有字幕的mp4文件,
整个过程都可选用免费开源软件!
必备神器ffmpeg:
当然也可以用一些开源可视化的工具, 如果不做特效的话, 个人感觉用命令行会更方便, 也会更通用
本文主要参考gpt并且用平板自带录制功能录制视频,最后处理成功
推荐两款软件
obs: https://mirrors.tuna.tsinghua.edu.cn/github-release/obsproject/obs-studio/
Captura: https://github.com/MathewSachin/Captura/releases/download/v8.0.0/Captura-Portable.zip
视频录制错了, 就暂停, 然后从某个节点开始重新录制
然后对视频做后处理, 也就是要处理:
提取视频的某一时间段, 以及多个视频的合并
噪音方面
录制视频有个比较麻烦的问题就是噪声太大,如果有N卡的话,推荐使用N卡降噪声. 参考(页面有下载地址):
https://www.nvidia.com/en-us/geforce/guides/nvidia-rtx-voice-setup-guide/#Requirements
如果没有N卡,也可用腾讯会议录制,手机电脑分别加入会议, 需要注意的是一定要断开某个设备里腾讯会议的音频。
或者采用后面提到的视频后处理的方案
下面命令表示提取视频input.mp4的00:00:00 -- 00:27:30
输出为output.mp4
ffmpeg -ss 00:00:00 -t 00:27:30 -i input.mp4 -vcodec copy -acodec copy output.mp4
比较快且使用的方法是先转化为ts格式,然后拼接
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
不过在实践中, 这样的到的视频会被莫名奇妙的被旋转了90度,后续需要做个视频旋转处理
ffmpeg -i output.mp4 -metadata:s:v rotate="90" -codec copy output2.mp4
推荐使用软件UVR:
https://github.com/Anjok07/ultimatevocalremovergui/releases
不过它依赖显卡(否则比较慢), 但是效果非常好, 可以直接提出视频中的MP3音频文件, 并且得到清晰音频; 甚至它可以用来分离歌曲中的人声和伴奏甚至合唱
不过接下来还需要一个操作:
把xx.mp4中的音频(有噪声)替换成1.MP3的音频(无噪声)
ffmpeg -i xx.mp4 -i 1.MP3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
只需要一行简单的命令即可
推荐在线软件:
推荐离线软件:
Buzz(基于cpu):https://github.com/chidiwilliams/buzz
WhisperDesktop(基于gpu):https://github.com/Const-me/Whisper
繁体简体字幕转换工具:https://github.com/xiaoxinpro/ChineseSubtitleConversionTool
需要下载模型文件,会在首次使用自行下载,具体使用以及网盘下载链接可参考 https://www.bilibili.com/video/BV15c411j789
通过上面的软件可以通过视频文件得到.srt字幕文件
接下来就是合并字幕文件1.srt
和视频文件xxx.wmv
ffmpeg -i xxx.wmv -vf subtitles=1.srt xxx.mp4
有时候视频体积大是因为视频帧数比较高, 因此可以通过降低视频帧数来减少视频体积:
ffmpeg -i input.mp4 -r 24 -c:v libx264 -crf 23 -preset medium output.mp4
解释一下这个命令:
-i input.mp4
:指定输入视频文件的路径和文件名。-r 24
:设置输出视频的帧率为24帧/秒。你可以根据需要调整这个值。-c:v libx264
:指定使用libx264编码器进行视频压缩。-crf 23
:设置视频的质量。较低的值会产生更高质量的视频,但文件大小也会更大。较高的值会产生较低质量的视频,但文件大小会更小。一般推荐使用18-28之间的值,你可以根据需要调整这个值。-preset medium
:设置编码速度和压缩效率的预设值。可以选择的预设值有:ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow。你可以根据需要选择适合的预设值。output.mp4
:指定输出视频文件的路径和文件名。运行命令后,FFmpeg将会压缩输入视频并减少帧率,生成一个新的输出视频文件。你可以根据需要修改命令中的参数来调整压缩和帧率设置。
下面是gpt4回答, 实测可用
FFmpeg是一个非常强大的工具,可以用来处理视频和音频文件。如果你想要减小MP4文件的体积,大致有以下几种方法:
降低比特率:这是减小视频文件大小最直接的方法。比特率越低,视频文件越小,但视频质量也会相应降低。
ffmpeg -i input.mp4 -b:v 1000k -bufsize 1000k output.mp4
这里的-b:v
是指定视频比特率,1000k
表示1000kbps。-bufsize
也设置为1000k,这有助于控制输出文件的大小。
改变分辨率:减小视频的分辨率也会减小文件的大小。
ffmpeg -i input.mp4 -s 1280x720 output.mp4
-s
后面跟的是新的分辨率大小。
转换编码器:某些编码器比其他编码器更有效率。例如,H.265/HEVC通常能比H.264/AVC提供更小的文件大小,在相同的质量下。
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
-c:v libx265
指定使用x265编码器,-crf
是常量速率因子,数字越大,压缩越高,质量越低。
移除音轨:如果视频文件中的音频不是必须的,移除音轨可以进一步减小文件大小。
ffmpeg -i input.mp4 -c:v copy -an output.mp4
-an
参数指示ffmpeg忽略音频流。
使用2-pass编码:2-pass编码可以在给定的比特率下提供更好的质量。这会让编码过程运行两次,第一次分析视频,第二次进行实际的编码。
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 1000k -pass 1 -an -f mp4 /dev/null && \ ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 2 -c:a aac -b:a 128k output.mp4
第一行命令是第一遍编码,它会生成一个日志文件,不会输出视频。第二行命令是第二遍编码,它会使用第一遍编码生成的日志文件来优化视频编码。
使用上述方法时,需要注意的是,视频质量和文件大小之间总是存在权衡。你可能需要进行一些实验,以找到适合你需要的设置。另外,FFmpeg的各个版本可能支持不同的编码器和选项,所以请确保你使用的FFmpeg版本支持你想要使用的功能。
`ffmpeg -i output2.mp4 -vn -ar 44100 -ac 2 -ab 128k -f mp3 "output.mp3"