想写几个常用的 ffmpeg 命令作个分享,又想起来还有 convert,pwgen 等命令,干脆搞一个 Linux 工具箱系列,总结一下为什么我被锁定在 Linux 平台上无法自拔了。
安装 ffmpeg
sudo apt install ffmpeg
获取视频基本信息
ffprobe
格式转换
ffmpeg -i 汪汪队立大功S1E01.mkv -codec copy 汪汪队立大功S1E01.mp4
清除所有元数据
ffmpeg -i 汪汪队立大功S1E01.mkv -codec copy -map_metadata -1 汪汪队立大功S1E01.mp4
提取音频
ffmpeg -i 汪汪队立大功S1E01.mp4 -vn 汪汪队立大功S1E01.mp3
旋转
ffmpeg -i input.mp4 -metadata:s:v rotate="90" -codec copy output.mp4
视频合并 Merge
echo "file 'input1.mp4'" > list.txt
echo "file 'input2.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
转 TS 文件,然后再合并:
ffmpeg -i input1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 01.ts
ffmpeg -i input2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 02.ts
echo "file '01.ts'" > list.txt
echo "file '02.ts'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
截取
ffmpeg -i input.mp4 -ss 00:00:30.00 -to 00:03:00.00 -codec copy output.mp4
# 同样意思:
ffmpeg -i input.mp4 -ss 00:00:30.00 -to 00:03:00.00 -vcodec copy -acodec copy output.mp4
# -ss 指定从第多少秒开始
# -t 指定截取时间长度
ffmpeg -i input.mp4 -ss 15 -t 25 -c:v libx264 -c:a aac -strict experimental output.mp4
偏移 30 秒之后,每隔 30 秒截图一张,保存到指定位置:
mkdir ./video_screenshots/AnyVideo/
ffmpeg -i AnyVideo.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -ss 30 -t 30 -f image2 ./video_screenshots/AnyVideo/%d.jpeg
-s 160x90
-vcodec mjpeg
-vframes 1
$cmd = "$ffmpeg -i $video -ss $interval -vframes 1 -f image2 -s $size $temp_thumbnail_url";
- http://www.ffmpeg.org/documentation.html
- http://www.ffmpeg.org/ffmpeg.html
ffmpeg -h full > ~/Documents/ffmpeg.txt
提取制定帧为图片
ffmpeg -i input.mp4 -threads 1 -ss 00:00:30.00 -f image2 -r 1 -t 1 /tmp/snapshot.jpg
ffmpeg -i input.mp4 -threads 1 -ss {{mm:ss}} -f image2 -frames 1 -s {{128x128}} {{image.png}}
保存直播视频
ffmpeg –i rtsp://host:port/path –vcodec copy save.avi
常用参数
-i
-y
-ss # 时间起始点
-to # 时间结束点
-c copy
-codec copy
-vcodec copy
-acodec copy