我在命令行下剪辑视频

是的,你不需要格式工厂,你也不需要会声会影,更不需要爱剪辑这些莫名其妙的流氓软件,命令行下视频处理,包括剪辑,转码,提取,合成,缩放,字幕,特效等等,全部命令行搞定,这不是疯狂,而是效率:

MP4 转换 GIF

很多社区可以发 MP4,但对桌面录屏这种十多二十秒的小短片远远没有 GIF 来的便捷,GIF 在很多软件里支持的也比 MP4 要广泛,转换命令为:

bash 复制代码
ffmpeg -i in.mp4 -an -c:v gif out.gif

参数 -i 的指明输入文件 "in.mp4" ,-an 代表禁用音频,-c:v 的意思是指定视频编码为 gif,最后是输出文件名。

那么效率在哪里呢? 别急,我们写完善点,做个脚本:video_convert_to_gif.cmd

batch 复制代码
@echo off
if "%1" == "" goto HELP

set "IN=%1"
set "OUT=%~dpn1.gif"

if "%2" == "" goto NEXT
set "OUT=%2"
:NEXT

call ffmpeg -i "%IN%" -an -c:v gif "%OUT%"
pause
goto END

:HELP
echo usage: video_convert_to_gif ^<input^> [^<output^>]
:END
echo.

将上面的脚本完善一下,保存成名为 video_convert_to_gif.cmd 的脚本:

每次要使用的时候,直接把任何格式的视频文件拖到这个脚本上面去,同级目录下就有了一个 gif 文件了,比你格式工厂修改一半天点点点来的高效多了。

转换为 MP4

最简单写法:

bash 复制代码
ffmpeg -i in.wmv -c:v libx264 -c:a aac out.mp4

前面输入可以是任意格式的视频文件,用 -c:v 指定视频编码器是 libx264,用 c:a 指定音频编码器是 aac,然后输出 mp4,考虑到某些安卓机可能无法正确播放,完善下:

bash 复制代码
ffmpeg -i in.wmv -c:v libx264 -c:a aac -pix_fmt yuv420p -vf ^
          "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4

在 Windows 的 Bat 文件里,^ 符号代表换行继续,这里针对部分安卓机只能播放 yuv420 的像素格式的问题,做了一些处理,并且把长宽设置为偶数,否则无法使用 yuv420 格式,完善一下,写成脚本:

batch 复制代码
@echo off
if "%1" == "" goto HELP

set "IN=%1"
set "OUT=%~dpn1.mp4"

if "%2" == "" goto NEXT
set "OUT=%2"
:NEXT

call ffmpeg -i "%IN%" -c:v libx264 -c:a aac ^
	-pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" ^
   	"%OUT%"
pause
goto END

:HELP
echo usage: video_convert_to_mp4 ^<input^> [^<output^>]
:END
echo.

保存成 video_convert_to_mp4.cmd 用法和上面相同,也是鼠标拖上去就行了。

转换 H.265

和转换 264 类似:

bash 复制代码
ffmpeg -i in.mp4 -c:v libx265 -c:a aac ^
	-pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" ^
	out.x265.mp4

脚本文件可以照葫芦画瓢,头两行最后用了 ^ 符号,代表命令在下一行继续。

GIF 转换 MP4

上面有了 MP4 到 GIF,反过来的话,需要做一些处理,添加一段空白音频,不然有些软件或者网站可能出问题:

bash 复制代码
ffmpeg -f lavfi -i anullsrc -i in.gif -c:v libx264 -c:a aac -shortest ^
       -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4

这里用了 anullsrc 代表空的音频输入,同时加了一个 -shortest 代表多个输入取时间最短的那个,一样照葫芦画瓢做一个脚本文件封装一下即可。

MP4 分离音频

将 MP4 的音频分离出来,保存成 mp3 也是比较常见的用法:

batch 复制代码
@echo off
if "%1" == "" goto HELP

set "IN=%1"
set "OUT=%~dpn1.mp3"

if "%2" == "" goto NEXT
set "OUT=%2"
:NEXT

call ffmpeg -i "%IN%" -vn -c:a mp3 -ar 48000 -ac 2 "%OUT%"

pause

goto END
:HELP
echo usage: video_extract_audio ^<input^> [^<output^>]
:END
echo.

保存成 video_extract_audio.cmd 把文件拖上去即可转换。

这里 -vn 的意思是禁用视频,-c:a 指定编码为 mp3,-ar 的意思是指定音频采样率为 48000,同时 -ac 的意思是声道数量。

视频裁剪

直接上脚本:

batch 复制代码
@echo off
if "%3" == "" goto HELP
set "IN=%1"
set "OUT=%~dpn1_clip%~x1"

if "%4" == "" goto NEXT
set "OUT=%4"
:NEXT

call ffmpeg -i "%IN%" -ss "%2" -to "%3" -c:a copy -c:v copy "%OUT%"
pause
goto END

:HELP
echo usage: video_clip ^<input^> ^<from ^(00:00:00.000^)^> ^<to ^(00:10:00.000^)^> [^<output^>]
:END
echo.

指定输入文件,然后从几分几秒到积分几秒即可:

bash 复制代码
video_clip in.mp4  00:00:00  00:00:10 out.mp4

即可剪辑头 10 秒钟的视频保存成 out.mp4

视频合并

将两段视频合并成一段:

batch 复制代码
@echo off
if "%2" == "" goto HELP

set "IN1=%1"
set "IN2=%2"
set "OUT=%~dpn1_%~dpn2_merged.%~x1"

if "%3" == "" goto NEXT
set "OUT=%3"
:NEXT

call ffmpeg -i "%IN1%" -i "%IN2%" ^
	-filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" ^
   	-map "[outv]" -map "[outa]" "%OUT%"
pause

goto END
:HELP
echo usage: video_concat ^<input1^> ^<input2^> [^<output^>]
:END
echo.
区域裁剪

将视频里的一个矩形截取出来,保存成一个新的视频:

batch 复制代码
@echo off
if "%5" == "" goto HELP

set "IN=%1"
set "OUT=%~dpn1_crop%~x1"

if "%6" == "" goto NEXT
set "OUT=%6"
:NEXT

call ffmpeg -i "%IN%" -filter:v "crop=%4:%5:%2:%3" "%OUT%"
pause

goto END
:HELP
echo usage: video_crop ^<input^> ^<x^> ^<y^> ^<w^> ^<h^> [^<output^>]
:END
echo.

这样输入源视频和矩形区域坐标和长宽即可裁剪。

更多用法

欢迎使用 ffmpeg 命令速查表:

附赠:我自己写好的一堆脚本

地址:

--

相关推荐
老贾专利烩20 分钟前
音频共享耳机专利拆解:碰击惯性数据监测与阈值减速识别机制研究
音视频·信息与通信·科技前沿·创新专利
UNbuff_032 分钟前
Linux top 命令使用说明
linux·运维·服务器
九江Mgx1 小时前
使用 Go + govcl 实现 Windows 资源管理器快捷方式管理器
windows·golang·govcl
---学无止境---1 小时前
Linux中dcache和inode缓存回收函数的实现
linux
Мартин.1 小时前
[Meachines] [Hard] Pollution MyBB+Redis_session+PHP-Filter+PHP-FPM+prototype
linux
总有刁民想爱朕ha1 小时前
银河麒麟v10 Mysql8部署教程(小白版)
linux·mysql数据库备份
web前端进阶者1 小时前
音视频开发远端未发布视频占位图
音视频·webrtc
syso_稻草人1 小时前
基于 ComfyUI + Wan2.2 animate实现 AI 视频人物换衣:完整工作流解析与资源整合(附一键包)
人工智能·音视频
LCG元2 小时前
性能排查必看!当Linux服务器CPU/内存飙高,如何快速定位并"干掉"罪魁祸首进程?
linux·后端
路由侠内网穿透2 小时前
本地部署开源数据分析平台 Elastic Stack 并实现外部访问( Windows 版本)
运维·服务器·网络·windows·开源·jenkins