ffmpeg无损裁剪合并视频
Posted 皮尔斯巴巴罗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg无损裁剪合并视频相关的知识,希望对你有一定的参考价值。
我用的版本是
ffmpeg version git-2020-06-23-ce297b4
官方文档
https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax
时间格式
[-][HH:]MM:SS[.m...]
或
[-]S+[.m...][s|ms|us]
裁剪视频
假设需要裁剪视频aaa.mp4,第5秒到第15秒
ffmpeg -ss 5 -to 15 -i aaa.mp4 -c copy output.mp4
这里要注意参数-ss、-to需要放在-i之前,否则就是另外的意义,而且实际试下来,时间总是有点误差
合并视频
非MPEG容器,但是MPEG编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),先包装进TS容器,再进行合并
例如要将aaa.mp4、bbb.mp4合并成一个视频output.mp4
ffmpeg -i aaa.mp4 -c copy -vbsf h264_mp4toannexb input1.ts
ffmpeg -i bbb.mp4 -c copy -vbsf h264_mp4toannexb input2.ts
ffmpeg -i "concat:input1.ts|input2.ts" -c copy -absf aac_adtstoasc output.mp4
其他视频转码、编辑软件(有损)
HandBrake,单纯转码
https://handbrake.fr/
Shotcut,视频编辑
https://www.shotcut.org/
参考
https://blog.csdn.net/weixin_46021205/article/details/105078552
https://blog.csdn.net/doublefi123/article/details/47276739
https://blog.csdn.net/qq_36292543/article/details/116466013
https://blog.csdn.net/qq_16504067/article/details/114575615
使用 FFmpeg 将 JPEG 图像序列无损合并到网格中
【中文标题】使用 FFmpeg 将 JPEG 图像序列无损合并到网格中【英文标题】:Merge a sequence of JPEG images into a grid losslessly with FFmpeg 【发布时间】:2020-01-19 23:52:50 【问题描述】:我有一系列图像,它们是较大图像的块,它们共同构成了整个图像。这些块是沿均匀间隔的水平和垂直线分割原始图像的结果,因此它们没有奇怪的尺寸。
有没有办法在不重新编码图像的情况下将它们与 FFmpeg(或 ImageMagick 之类的其他东西)结合起来?
This answer 建议使用hstack
或vstack
FFmpeg 过滤器,但我的图像块不一定是原始图像的全宽或全高。
像这样:
也许这可以通过使用hstack
或vstack
的多个FFmpeg 命令来实现(不过我更喜欢一个命令)。还是使用复杂的过滤器?
例如
编辑:我尝试将filter_complex
与 FFmpeg 一起使用:
ffmpeg -i 0.jpg -i 1.jpg -i 2.jpg -i 3.jpg -i 4.jpg -i 5.jpg \
-filter_complex "[0][1]hstack=inputs=2[row 0]; \
[2][3]hstack=inputs=2[row 1];
[4][5]hstack=inputs=2[row 2];
[row 0][row 1][row 2]vstack=inputs=3[out]" \
-map "[out]" -c copy out.jpg
但它不能同时过滤和复制流。
【问题讨论】:
大多数工具会解压缩和重新压缩您的 JPG,因此您会损失一些质量。 ImageMagick 可以使用 convert 和 append 来组合你的网格。但是 ImageMagick 会如上所述解压缩和重新压缩您的 JPG。 我似乎记得 libvips 的工作原理是拆分图像,分别压缩宏块,然后将数据重新合并在一起。您可能会在其源代码中找到一些有用的东西。 libvips.github.io/libvips @Brad 抱歉,libvips 会像 ImageMagick 一样解压缩和重新压缩。 我在 jpegtran 中发现了这个有趣的补丁——它添加了两个 jpg 图像的无损附加:puhuri.iki.fi/src/libjpeg 你也许可以从中解决一些问题。 @jcupitt Lol,就像魔术一样,你在这个线程上停下来。 :-) 是的,我的建议不是他们直接使用 libvips,而是他们看到你是如何在 JPEG 中进行宏块重组的。我的记忆是否正确,因为您分别对每个块进行压缩然后重新组装? 【参考方案1】:您可以使用 ImageMagick 做到这一点。但是,它将解压缩并重新压缩您的 jpg 文件。你会失去一些品质。
IM 6 的 Unix 语法:
convert \
\( 0.jpg 1.jpg +append \) \
\( 2.jpg 3.jpg +append \) \
\( 4.jpg 5.jpg +append \) \
-append \
mona_lisa.jpg
如果使用 Windows,请从括号中删除 \ 并将行尾替换为 ^。
如果使用 IM 7,请将 convert 替换为 magick。
【讨论】:
+append
是 hstack,而 -append
是 vstack。整洁!【参考方案2】:
我发现了一个有趣的patch from 2010 against libjpeg,它将这个功能添加到jpegtran
。它不会拆分块,因此您的图像需要在每个轴上是 8 甚至 16 像素的倍数。
不幸的是,它违反了为 ubuntu10 分发的 libjpeg 6b。这包括来自 8d 的一些补丁,并且与任何官方 libjpeg 版本(据我所知)并不完全对应。
您需要下载 ubuntu10.04 源,解压缩它们的 libjpeg,然后对其进行修补。步骤是:
wget http://old-releases.ubuntu.com/releases/releases/10.04/release/source/ubuntu-10.04-src-1.iso
现在打开该 ISO 并从ubuntu/pool/main/libj/libjpeg6b
中提取文件。存档管理器可以做到这一点,也许还有一些可编写脚本的工具。
现在运行:
# original sources
tar xf libjpeg6b_6b.orig.tar.gz
cd jpeg-6b
# apply ubuntu patches
zcat ../libjpeg6b_6b-15ubuntu1.diff.gz | patch
# apply jpegtran patches
patch < ../append-jpeg6b.patch
./configure
make
sudo make install
这会将修改后的jpegtran
安装到/usr/local
。
给定0.jpg
和1.jpg
:
你可以这样运行它:
jpegtran -appright 1.jpg 0.jpg > join.jpg
制作:
【讨论】:
以上是关于ffmpeg无损裁剪合并视频的主要内容,如果未能解决你的问题,请参考以下文章