利用ffmpeg将mp4视频转换成多张jpg图片

1,473 阅读1分钟
  1. 分离视频音频流
    ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流
    ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流
  2. -r 提取图像的频率,-ss 开始时间,-t 持续时间
    ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频
  3. ffmpeg从视频中生成gif图片:
    ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif
    // -t参数表示提取前10秒视频
    // -s 表示按照 320x240的像素提取
  4. ffmpeg将视频导出成多张图片
    ffmpeg -i output.mp4 -r 30 -f image2 foo-%05d.jpeg
    // -r参数表示按照30帧的速度提取。
  5. ffmpeg批量将视频转为单帧图片shell脚本
    有一些行车记录仪的视频,需要将其转换为单帧图片以供标注和神经网络学习。ffmpeg安装很简单,见前面1-4,视频格式全部为mp4格式,放在/home/ffmpeg-project目录下。需要将其转换并存储在单独目录下,命名为ffout-【视频名】

先贴出最终脚本

#!/bin/bash
#Program:
#convert MP4 to jpg
#History:
#2017/12/02 raulxty@163.com First release
PATH=/root/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export PATH

filelist=$(find *.mp4)
OLDIFS="$IFS"
IFS=$"\n"
for filename in *.mp4
#$(find -iname *.mp4)
do
	mkdir "ffout-${filename%.*}"
    ffmpeg -i $filename /home/ffmpeg-project/"ffout-${filename%.*}"/%03d.jpg
done
IFS=$OLDIFS

运行方式是

[root@centos7 ffmpeg-project]# ./convert_mp4_to_jpg.sh
可能遇到的两个错误,若提示

-bash: ./convert_mp4_to_jpg.sh: Permission denied
解决方法

chmod 777 convert_mp4_to_jpg.sh 
若提示

-bash: ./convert_mp4_to_jpg.sh: /bin/bash^M: bad interpreter: No such file or directory
解决方法

sed -i 's/\r$//' convert_mp4_to_jpg.sh