关键字:ffmpeg 截取视频 精确时间 知乎|ffmpeg -strict experimental 知乎
分类: FFmpeg
ffmpeg-140秒提取方案 精确时间提取视频 twitter专用2分20秒视频
关键字:twitter视频|ffmpeg|ffmpeg精准提取视频
脚本版本1
@echo off
ffmpeg -ss 00:01:55 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_1.mp4
ffmpeg -ss 00:03:35 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_2.mp4
ffmpeg -ss 00:05:15 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_3.mp4
ffmpeg -ss 00:06:55 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_4.mp4
ffmpeg -ss 00:08:35 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_5.mp4
ffmpeg -ss 00:10:15 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_6.mp4
echo "file 'C9268AF3D6A91C8F0788BAECE2DEE01C_1.mp4'\nfile 'C9268AF3D6A91C8F0788BAECE2DEE01C_2.mp4'\nfile 'C9268AF3D6A91C8F0788BAECE2DEE01C_3.mp4'\nfile 'C9268AF3D6A91C8F0788BAECE2DEE01C_4.mp4'\nfile 'C9268AF3D6A91C8F0788BAECE2DEE01C_5.mp4'\nfile 'C9268AF3D6A91C8F0788BAECE2DEE01C_6.mp4'" >>G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt
ffmpeg -f concat -i G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt -c copy -y G:\GoogleVideo\1020\Prev\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4
echo "14\n"
脚本版本2
@echo off
ffmpeg -ss 00:01:55 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_1.mp4
ffmpeg -ss 00:03:35 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_2.mp4
ffmpeg -ss 00:05:15 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_3.mp4
ffmpeg -ss 00:06:55 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_4.mp4
ffmpeg -ss 00:08:35 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_5.mp4
ffmpeg -ss 00:10:15 -t 23 -i G:\GoogleVideo\1020\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4 -y -c:v libx264 -c:a aac -strict experimental -b:a 98k -y G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_6.mp4
echo file 'G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_1.mp4' >>G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt
echo file 'G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_2.mp4' >> G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt
echo file 'G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_3.mp4' >> G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt
echo file 'G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_4.mp4' >> G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt
echo file 'G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_5.mp4' >> G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt
echo file 'G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_6.mp4' >> G:\\GoogleVideo\\1020\\temp\\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt
ffmpeg -f concat -i G:\GoogleVideo\1020\temp\C9268AF3D6A91C8F0788BAECE2DEE01C_files.txt -c copy -y G:\GoogleVideo\1020\Prev\C9268AF3D6A91C8F0788BAECE2DEE01C.mp4
echo 14
ffmpeg-错误-提取视频预览时 报错-h.264 – FFMPEG (libx264) height not divisible by 2
I sometimes get the following error:
[libx264 @ 0xa3b85a0] height not divisible by 2 (520×369)
归结原因就是 height 不是偶数
After playing around with this a bit, I think I’ve answered my own question. Here is the solution in case anyone else runs into a similar issue… I had to add the below argument to the command:
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"
Command
ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"
Basically, .h264 needs even dimensions so this filter will:
Divide the original height and width by 2
Round it down to the nearest pixel
Multiply it by 2 again, thus making it an even number
https://stackoverflow.com/questions/20847674/ffmpeg-libx264-height-not-divisible-by-2
http://www.itkeyword.com/doc/3596353026169028160/ffmpeg-libx264-height-not-divisible-by-2
ffmpeg-错误-编译FFmpeg时 ld terminated with signal 9 [Killed]
编译FFmpeg时
collect2: ld terminated with signal 9 [Killed]
编译出错主要原因是服务器虚拟内存不足导致,而服务器刚好又没有swap分区(我司信息管理部很伟大),所以需要建个swap分区
ffmpeg-命令使用汇总-不断更新中
转mp4格式
ffmpeg -i input.mp4 output.avi
FFMPEG -i uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4
FFMPEG -i uploadfile/video/test.wmv -c:v libx264 -strict -2 -s 1280x720 -b 1000k uploadfile/mp4/test.mp4
截取一张图片
使用说明
测试视频
66666.MP4
2155秒
请问视频1秒播放几帧图像,使用ffmpeg反复在同一秒截取图片是否截取的是同一帧图像?
答案是:是同一张图片
【通过】截取一张图片
ffmpeg -ss 00:00:30 -i input.mp4 -f image2 -y 66666-1.jpg
参数说明
-i 设定输入流
-f 设定输出格式 【网上说一般不用,会更加后缀名自动识别,但是我还是每次都加上】
image2 表示输出jpg格式
-ss 开始时间【时间格式:允许毫秒】 从视频哪里开始处理
比如下面的格式都是有效的
‘55’
55 seconds
‘12:03:45’
12 hours, 03 minutes and 45 seconds
‘23.189’
23.189 seconds
-y 覆盖输出文件 同名 不需要询问直接覆盖
【备注】 建议把ss参数放在 -i参数之前使用
截取多张图片
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r 表示每一秒几帧
-q:v 表示存储jpeg的图像质量,一般2是高质量
如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来.假设有60s,那会有60张 [如果视频特别长就会截取很多图片来,所以要设置一个时间段儿]
设置开始的时间,和你想要截取的时间,每秒1帧
ffmpeg -ss 00:00:30 -t 10 -i input.mp4 -r 1 -q:v 2 -f image2 -y pic-%03d.jpeg
-t 表示共要多少时间
ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧
其他
每秒2帧
ffmpeg -ss 00:00:30 -t 10 -i 66666.mp4 -r 2 -q:v 2 -f image2 -y pic-%03d.jpeg
每秒23帧 持续40秒 920张
ffmpeg -ss 00:00:30 -t 40 -i 66666.mp4 -r 23 -q:v 2 -f image2 -y pic-%03d.jpeg
每秒25帧 持续2秒 【默认25帧】
ffmpeg -ss 00:00:07 -t 2 -i 66666.mp4 -r 25 -q:v 2 -f image2 -y pic-%03d.jpeg
可以设置1.5吗
每秒24帧 持续1.5秒 36张图
ffmpeg -ss 00:00:07 -t 1.500 -i 66666.mp4 -r 24 -q:v 2 -f image2 -y pic-%03d.jpeg
最终:视频9秒 6个场景 每个场景1.5秒 持续截取1.5秒 开始在7.5秒左右 每秒24帧图像 一共36张图片
ffmpeg -ss 00:00:07.500 -t 1.500 -i input.mp4 -r 24 -q:v 2 -f image2 -y pic-%03d.jpeg
下面这个不清楚-r 0.2
假如影片第10分钟到第20分钟之间,每隔5秒截一张 共计120张
ffmpeg -ss 10:00 -t 10:00 -i 66666.mp4 -r 0.2 -q:v 2 -f image2 -y pic2-%03d.jpeg
ffmpeg -ss 10:00 -i input -f image2 -r 0.2 -t 10:00 %3d.jpg
设置输出帧大小 -s 480X270 300X168
ffmpeg -ss 00:00:07.500 -t 1.500 -i input.mp4 -r 24 -q:v 2 -f image2 -y -s 480X270 pic-%03d.jpeg
提取视频
ffmpeg -i "A_File.mp4" -ss 00:00:0.0 -t 10 -an "B_File.mp4"
-an 不处理音频
【通过】提取视频–默认方式
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an B_File.mp4
【通过】提取视频–指定尺寸
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -s 480X270 B_File.mp4
【通过】提取视频–缩放方式
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File.mp4
ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。【但是必须保证一定的比率】,否则就会向下面这样报错
【不通过】 height not divisible by 2 (300×169)
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=300:-1 B_File.mp4
【通过】
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=300:168 B_File.mp4
通过设置高度168 可以解决
提取视频【实际使用】
在实际使用中我使用下面的命令提取视频
ffmpeg -i 88888.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 cutout1.mp4 -y
ffmpeg -i 88888.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 -ss 00:01:30 -to 00:01:50 cutout1.mp4 -y
ffmpeg -ss 00:46:28 -i "Morning_News.asf" -acodec copy -vcodec copy -t 00:03:25 output.asf
这行命令解释为:从文件 Morning_News.asf 第 46:28 分秒开始,截取 03: 25 的时间,其中视频和音频解码不变,输出文件名为 output.asf
这样提取出来的视频和原始视频一样的编码
视频合并
首先提前截取各个场景
480
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File1.mp4
ffmpeg -ss 00:06:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File2.mp4
ffmpeg -ss 00:12:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File3.mp4
ffmpeg -ss 00:18:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File4.mp4
ffmpeg -ss 00:24:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File5.mp4
ffmpeg -ss 00:30:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File6.mp4
合并视频
ffmpeg -f concat -i files.txt -c copy -y output.mp4
files.txt格式如下
file 'B_File1.mp4'
file 'B_File2.mp4'
file 'B_File3.mp4'
file 'B_File4.mp4'
file 'B_File5.mp4'
file 'B_File6.mp4'
再看一个例子
264秒
ffmpeg -ss 00:00:07.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File1.mp4
ffmpeg -ss 00:00:51.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File2.mp4
ffmpeg -ss 00:01:35.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File3.mp4
ffmpeg -ss 00:02:19.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File4.mp4
ffmpeg -ss 00:03:03.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File5.mp4
ffmpeg -ss 00:03:47.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File6.mp4
ffmpeg -f concat -i files.txt -c copy -y output2.mp4
视频转码
一个视频的编码是MPEG4,想用H264编码,咋办?
ffmpeg -i c.mp4 -vcodec h264 c_output.mp4
相反也一样
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。
(不知道什么是X265,可以 Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然 了,ffmpeg自己也有编码器)
ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4
ffmpeg-gif-图片合成Gif命令-秋名山
命令如下
C:\Users\Administrator\AppData\Local\Temp\ScreenToGif\Recording\
ffmpeg.exe -f image2 -i C:\Users\Administrator\AppData\Local\Temp\ScreenToGif\Recording\G1006\%d.png -vcodec libx264 -r 10 G1006.mp4
ffmpeg.exe -f image2 -i C:\Users\Administrator\AppData\Local\Temp\ScreenToGif\Recording\G1015\%d.png -vcodec libx264 -r 10 G1015.mp4
ffmpeg支持很多中视频格式,想知道ffmpeg支持哪些编码格式,可以用 ffmpeg -codecs 命令来查看
你的图片可以是jpg, 可以bmp,可以是tiff。其他的格式可以自己测试
假如你的图片在c:\temp\下面。那么通过下面的命令就可以将这个目录下面的图片转换成视频。这里面有个要求就是你的图片全部是自然数为文件名, 001, 002, 003这样的。前面要几个0取决于你的图片的个数,如109张,那么就是3-1=2个0,从001 到109,如果是1009张就是0001到1009
ffmpeg -f image2 -i c:\temp\d.jpg test.mp4
你可以指定编码格式:
ffmpeg -f image2 -i c:\temp\d.jpg -vcodec libx264 test.mp4
也许你还想指定输出帧率:
ffmpeg -f image2 -i c:\temp\d.jpg -vcodec libx264 -r 10 test.mp4
这样输出的test.mp4就是每秒播放10帧了
如果你要指定码率:
ffmpeg -f image2 -i c:\temp\d.jpg -vcodec libx264 -r 10 -b 200k test.mp4
注意这里的200k的单位bit/s.
最后生成的文件的参数都是什么样子,比如我们刚才设置的参数,还有我们没有设置的参数:
那么这个命令就可以帮你搞定:
ffmpeg -i test.mp4
前面是你用的ffmpeg的基本信息:
包括版本,编译时间,用的编译器,配置选项。
重点看绿色部分,这也是你会关心的东西:
duration告诉视频时长,这里是10秒, bitrate是码率。
video: 视频编码格式。 帧率是10fps。
ffmpeg-视频切片
ffmpeg-学习汇总
ffmpeg-错误-视频合并Unsafe file name问题解决
使用ffmpeg进行多个视频合并过程中出现了“unsafe file name”错误,解决的办法是
加个-safe 0 参数:
./ffmpeg.exe -f concat -safe 0 -i ./fileToMerge.txt -c copy -y ./out.mp4
上面的命令是合并多个mp4文件
关键字:ffmpeg concat Unsafe file name