TOC

Linux 工具箱 1:ffmpeg (视频处理)

想写几个常用的 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