我的意思是,如何从视频中生成图像文件(例如屏幕截图)。
答案1
尝试用ffmpeg
ffmpeg -i inputfile.avi -r 1 -f image2 image-%3d.jpeg
您可以阅读文档这里
-i inputfile.avi
视频输入文件是inputfile.avi-r 1
视频中每秒提取 1 个图像。将该数字替换为您想要每秒获取的图像数。-f image2
强制图像输出格式,您可能可以忽略此选项,因为程序会尝试从文件扩展名中选择输出图像格式。image-%3d.jpeg
输出图像的名称,%3d 表示输出生成的图像将具有 3 位小数的序列号,如果您希望数字用零填充,则只需使用 %03d。
答案2
我刚刚下载了适用于 Windows 32 的最新版本的 VLC - 2.1.2 Rincewind,它可以很好地执行此操作。
脚步:
1 - 单击工具 > 首选项,然后单击单选按钮全部
2 - 向下滚动并单击视频旁边的 + 号以展开
3 - 向下滚动并单击“场景过滤器”,然后填写“目录路径前缀”信息(要在其中保存帧)。不要单击“保存”。
4 - 向上滚动并单击“过滤器”下的“视频”一词
5 - 单击场景视频过滤器复选框,然后单击保存。
6 - 打开并运行视频,它将保存 .png
7 - 要停止保存帧,请返回步骤 5 并取消选中场景视频过滤器。一旦您知道在哪里可以找到设置,就真的很容易。
答案3
在 VLC 中,您可以右键单击“视频”,然后拍摄快照
答案4
希望这有帮助
#!/bin/bash
source_dir="."
output_dir="."
input_file_types=(avi wmv flv mkv mpg mp4)
output_file_type="jpg"
convert() {
echo "" | ffmpeg -ss $ss -y -i "$in_file" -an -f image2 -vframes 1 "$output_dir/$out_file"
}
for input_file_types in "${input_file_types[@]}"
do
find "$source_dir" -name "*.$input_file_types" -print0 | while IFS= read -r -d $'\0' in_file
do
echo "Processing…"
echo ">Input "$in_file
# Replace the file type
out_file=$(echo $in_file|sed "s/\(.*\.\)$input_file_types/\1$output_file_type/g")
echo ">Output "$out_file
# get video duration
# fulltime=`ffmpeg -i "$in_file" 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//`;
# hour=`echo $fulltime | cut -d ':' -f 1`;
# minute=`echo $fulltime | cut -d ':' -f 2`;
# second=`echo $fulltime | cut -d ':' -f 3 | cut -d '.' -f 1`;
# seconds=`expr 3600 \* $hour + 60 \* $minute + $second`;
# ss=`expr $seconds / 2`; # from the middle of video
ss=`expr 10`; # from the 10sec of video
# Convert the file
convert "$in_file" "$out_file"
if [ $? != 0 ]
then
echo "$in_file had problems" >> ffmpeg-errors.log
fi
echo ">Finished "$out_file "\n\n"
done
done