如何利用ffmpeg完成MKV转换MP4的视频格式,视频转gif图片格式。

xc
xc
2022-06-01 / 0 评论 / 733 阅读 / 正在检测是否收录...

ffmpeg视频处理

最近,从youtube上下载了一些视频,文件格式是.mkv的,那如何可以将视频无损的转换为,mp4格式呢?
首先,你的电脑需要安装一个神级的软件程序ffmpeg,安装方法请自行百度,很多了,我就不重复了,请注意要设置环境变量。
安装好以后,在你所需要的转换的视频文件夹的地址栏,输入:cmd 回车

视频mkv转mp4

此时,cmd命令窗口就会切换到你目前视频地址。执行:

ffmpeg -i A.mkv -vcodec copy A.mp4

注意:
A就是你的视频文件名,请自行修改。
-vcodec copy 命令是视频不重新编码,快速转换。
当我们有时候需要利用h264重新编码时,执行:

ffmpeg -i A.mkv -vcodec h264 A.mp4

视频webm和音频m4a合并转mp4,mkv

当我们需要将一个无声音的视频文件,比如youtube下载下来的高清视频文件.webm和音频文件.m4a进行合并在一起,并转换为mkv或mp4时,执行

ffmpeg -i A.webm -i A.m4a -vcodec copy A.mkv
ffmpeg -i A.webm -i A.m4a -vcodec copy A.mp4

注意:
此时转换出来的视频,很有可能是有声音无画面,这个似乎是ffmpeg的bug导致的,网上有很多这样的问题,建议还是利用h264重新编码转换,如何做?请看上面的示例,要学会举一反三。

mkv转mp4 批处理

最后来说一下,当我们的文件夹中有很多mkv文件的时候,如何实现批量mkv转换mp4呢?
,在视频所在文件夹新建记事本,并复制一下代码,最后文件后缀txt修改为bat,并双击执行:

@echo off & title
cd /d %~dp0
for %%a in (*.mkv) do (
ffmpeg -i "%%~sa" -y -vcodec copy -acodec copy "%%~na.mp4"
)
pause

以上代码是视频不进行重新编码,如果需要h264重新编码,请学着举一反三,不要只会复制和粘贴。

批量ts合并转mp4

直接写文件名,文件之间使用 | 隔开。如下所示:

ffmpeg -i "concat:media-18.ts|media-19.ts|media-20.ts|media-21.ts|media-22.ts|" -c copy output.mp4

视频转图像gif

补充一下:视频格式转换GIF图片的代码,因为目前利用迅雷播放器转换出来的效果不理想或找软件还收费,特此一下代码:
直接转换mp4到gif
其中:480是尺寸长480px,根据自己需要修改。

ffmpeg -i input_video.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -q:v 2 output.gif

做一些优化修改进行转换mp4到gif,-ss 2 -t 5,从第2秒的地方开始,往后截取5秒钟, -r 用于设定帧数. 通常Gif有15帧左右就比较流畅了,但不建议增加,根据需要:

ffmpeg -ss 2 -t 5 -i 00.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -q:v 2 -r 15 output.gif

视频转图像webp

相对于gif,在现在的浏览器支持中,webp格式的图像会更有优势,同样的品质,文件大小却能缩减超过一半:
ffmpeg 编码时两个参数说明
-lossless boolean 启用/禁用无损模式 缺省值是0
-qscale float 对于有损编码,这将控制图像质量,0到100.
对于无损编码,这将控制更多压缩工作量和时间。缺省值为75.
推荐有损方式,已目前我们常规显示器来看,几乎看不出区别,但有损的文件大小却是无损的1/10.
其中:480是尺寸长480px,根据自己需要修改。

无损方式

ffmpeg -i 00.mp4 -vf scale=480:-1 -r 10 -lossless 1 -loop 0 -y 00-lossless.webp

有损方式

ffmpeg -i 00.mp4 -vf scale=480:-1 -r 10 -qscale 90 -loop 0 -y 00-loss90.webp

音频wav转mp3

补充内容:
利用ffmpeg完成WAV转换MP3的音频格式,批量执行代码:

@echo off & title
cd /d %~dp0
for %%a in (*.wav) do (
ffmpeg -i "%%~sa" -f mp2 "%%~na.mp3"
)
pause

wma转换mp3

利用ffmpeg完成wma转换MP3的音频格式,批量执行代码:(平均比特率为192kb每秒,采样率为44100hz的mp3文件)

@echo off & title
cd /d %~dp0
for %%a in (*.wma) do (
ffmpeg -i "%%~sa" -ab 192 -ar 44100 "%%~na.mp3"
)
pause

旋转视频画面

利用ffmpeg 将视频图像顺时针旋转90°。 如果是逆时针,将-90修改为90即可。
需要手动新建子文件夹:result

@echo off & title
cd /d %~dp0
for %%a in (*.mp4) do (
ffmpeg -i "%%~sa" -metadata:s:v rotate="-90" -codec copy "result\%%~na.mp4"
)
pause

画面裁剪

有时候一个竖屏展示的画面是横屏,我们只想要横屏部分,就需要视频画面裁剪功能了,通常的做法是用视频编辑软件,裁剪后,再次转码,无论是保存为720P还是1080P 视频的体积都变大很多。
用ffmpeg 可以很好的处理这个问题,似乎也会转码,但基本参数都和原视频一致。

crop的参数格式为w:h:x:y,
w、h为输出视频的宽和高,
x、y标记输入视频中的某点,将该点作为基准点,向右下进行裁剪得到输出视频。

如果x y不写的话,默认居中剪切

举例:
我手机保存的短视频的尺寸是1080:1990,我只想要中间横屏的部分:
一般横屏视频的比例是16:9,所以算出横屏的高度尺寸是608。

ffmpeg -i 1.mp4 -vf crop=1080:608 out.mp4 -y

批量截取视频图片

有时需要批量截取视频指定时间点的画面作为缩略图,给出代码:

@echo off & title
cd /d %~dp0
for %%a in (*.mp4) do (
ffmpeg -i "%%~sa" -ss 00:00:02 -frames:v 1 "%%~na.jpg"
)
pause

上下/左右3D格式分离为2D正常视频

下面的代码是上下格式分离为正常的2D视频代码:相关的代码说明 stereo3d
最核心的代码就是:abl:ml
分离后,视频比例一般会失衡。所以用“-aspect 16:9”来调整视频画面比例,最后用“-vcodec h264” 编码转换为mp4格式。请根据自身情况,灵活调整。

上下格式代码

ffmpeg -i A.mkv -vf stereo3d=abl:ml -metadata:s:v:0 stereo_mode="mono"  -aspect 16:9 -vcodec h264 B.mp4

左右格式代码

ffmpeg -i A.mkv -vf stereo3d=sbsl:ml -metadata:s:v:0 stereo_mode="mono"  -aspect 16:9 -vcodec h264 B.mp4

结尾

最后,不得不感叹ffmpeg的强大之处,有了它,还需要什么视频转换软件,还需要什么视频编辑软件?
ffmpeg最大的优点就是:非常流畅,快速搞定,不像某些封装好的软件,进度条只见动不见走。
ffmpeg最大的缺点就是:可能就是可视化界面不好吧?不过似乎已经有人给它穿了界面的衣服,有兴趣的自己百度一下,不过对我来说,代码执行更省事,简单明了,大多数还不是复制和粘贴,简单调整一下,很快就好了。

1

评论 (0)

取消
使用 Typecho 建站,并搭配 joe 主题(有修改)
蜀ICP备2022005623号 川公网安备 51012202001212号
本站已运行 00000000
Copyright © 1970 ~ Xcshare All rights reserved.