FFmpeg 如何使用 bash 生成视频序列
Posted
技术标签:
【中文标题】FFmpeg 如何使用 bash 生成视频序列【英文标题】:FFmpeg how generate a sequence of videos with bash 【发布时间】:2018-01-24 17:52:30 【问题描述】:我尝试编写一个读取文件夹的 .sh 创建一个 mp4 文件的播放列表,然后生成一个唯一的大视频,其中包含在文件夹中找到的所有视频序列,并将其编码为破折号:
printf "file '%s'\n" ./*.mp4 > playlist.sh
ffmpeg -f concat -safe 0 -i playlist.sh -c copy concat.mp4
直到现在我都按照 demux concat 官方 guido 访问 ffmpeg 网站。 没有结果,以下也给我“序列视频之间重复超过 1000 帧”
ffmpeg -f concat -i playlist.sh -c:a aac -b:a 384k -ar 48000 -ac 2 -c:v libx264 -x264opts 'keyint=50:min-keyint=50:no-scenecut' -r 25 -b:v 2400k -maxrate 2400k -bufsize 1200k -vf "scale=-1:432 " out.mp4
非常感谢
【问题讨论】:
【参考方案1】:对不起,不能评论(还)...
您的命令是正确的,我可以连接一些示例视频。 您是否总是收到上述错误或其他错误?视频是否正常工作,或者没有创建视频? 在大多数情况下,输入视频不正确。错误的输入格式(不适合文件扩展名)或更糟糕的是以错误的帧结尾。 也许您可以提供视频?
PS:需要在第二条命令后面加上-safe 0
,以免报错[concat @ 0x7fbfd1000000] Unsafe file name './small.mp4'
提示:请勿在视频文件列表中使用文件扩展名 .sh
。此扩展用于 shell 脚本,因此可能会造成混淆。只需使用.txt
。
更新@Massimo Vantaggio
我们不应该创建新的答案,但我不能评论你的答案,我也不知道如何继续我们的讨论,所以我编辑了我的答案。
您的视频看起来并没有太大的不同。看不懂,第一个有什么问题。
也许您可以使用ffprobe -report input.mp4
获取更多信息。查找错误或警告。
我的假设仍然是视频被硬剪辑(通过转换软件),所以关键帧被弄乱了或其他什么。
您也可以先尝试使用 ffmpeg 重新编码您的视频。之后,它应该完全兼容 ffmpeg ;)
类似这样的:
ffmpeg -i small.mp4 -acodec aac -ab 192k -vcodec libx264 -vb 1024k -f mp4 output.mp4
使用输入视频中的-ab
和-vb
,或者至少使用输入的比特率。质量会下降一点,文件大小会增加,但应该没问题。
【讨论】:
嗨,乌维!感谢您的回复,我上传了视频,视频连接过程之间出现错误,之后,它等待并跳过视频1 +视频2可能的最大时间范围,它可以工作..暂停几分钟后的第一个视频发生第二个具有奇怪错误 fps 效果的视频。这是您可以下载我的视频测试的链接,我不明白我还需要什么才能使视频符合 concat,我不确定音频编码,非常感谢您的时间 video concat 之间的另一条消息是“[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f8ef505de00] Auto-inserting h264_mp4toannexb bitstream filter" 测试了您的视频,也没有运气:(您的视频似乎有问题。无法通过 concat 协议成功连接它们。但也可以使用 concat 视频过滤器。使用此命令:ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]' -map '[v]' -map '[a]' output.mp4
(解决方案取自这里***.com/a/11175851/6472702)。这将重新编码视频。如果你想连接两个以上的文件,例如3个文件,你必须添加-i 3.mp4
,编辑filter_complex和concat=n=3 . 查看其他 *** 答案。以上是关于FFmpeg 如何使用 bash 生成视频序列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 VLC 或 FFMPEG 命令行将外部音轨添加到视频文件