bash - 在 BASH 脚本中连接视频文件后报告错误的视频时长

标签 bash video ffmpeg

我正在尝试使用 ffmpeg 将三个视频文件(每个 16 秒长)合并到一个文件中。由于它们是 mpeg 格式,我只是尝试使用 cat 将它们连接到一个文件中。命令。问题是当我运行生成的文件( video.mpg )时,它被报告为大约 16 秒长(与第一个连接的视频相同)。有趣的是,当我在 VLC 中播放文件时,我可以观看整个 48 秒的视频,即使视频进度条也最多只报告 16 秒。

使用 cat 添加另外两个视频后,文件“属性”(例如持续时间等)似乎没有更新。命令。

希望有任何关于我如何解决这个问题的建议。

以下是我创建的 BASH 脚本的相关部分:

mkfifo intermediate1.mpg
mkfifo intermediate2.mpg
mkfifo intermediate3.mpg
ffmpeg -i "./tmp/final01.mp4" -qscale 1 -y intermediate1.mpg < /dev/null &
ffmpeg -i "./tmp/final02.mp4" -qscale 1 -y intermediate2.mpg < /dev/null &
ffmpeg -i "./tmp/final03.mp4" -qscale 1 -y intermediate3.mpg < /dev/null &

echo "[audioforge] Stitching files "
cat intermediate1.mpg >> ./tmp/video.mpg
cat intermediate2.mpg >> ./tmp/video.mpg
cat intermediate3.mpg >> ./tmp/video.mpg

# Convert back to mp4 format.
ffmpeg -i "./tmp/video.mpg" -qscale 1 -y "./tmp/video.mp4"

最佳答案

看起来您还没有“等待”所有转换完成。

使用命令wait在 3 行 ffmpeg 之后(这些行,在后台运行)
我不确定确切的语法,但很容易理解。

另外,你必须只使用fifo吗?你可以在/tmp 中使用一个简单的文件;除非它会占用一个非常大的空间。

编辑:由于 fifo 固有的阻塞 I/O 特性,可能不需要等待命令;但是,正因为如此,您无法在并行转换 3 个文件时实现所需的并行性。在转换输出文件的前 4k(或任何您的 fifo 大小)后,2(第 2 和第 3)个转换命令将停止,直到从 fifo 读取数据。

关于bash - 在 BASH 脚本中连接视频文件后报告错误的视频时长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360099/

相关文章:

linux - 无法在 Windows 上运行 bash 脚本

nginx - 使用 FFMPEG 将 RTMP 源重新流式传输到 YouTube - 输出中没有视频流

jquery - Vimeo/Youtube 播放 Jquery .click() 函数...我什至不知道如何表达这个问题

ffmpeg - 使用 ffmpeeg 编码视频时出现共享 libavfilter.so.0 错误

python - 如何将未压缩的视频从 FFMPEG 子进程传输到 python?

macos - Apple Silicon 的 FFmpeg 包

bash - 如何阻止 virtualenv 更改我的 PATH 顺序

bash - 如何在 ant 中编写多个 exec 参数

node.js - 从 Node 脚本执行时如何查看 bash 命令

php - 允许将视频嵌入评论/文本中