0

我正在尝试使用 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"
4

1 回答 1

2

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

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

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

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

于 2012-11-13T12:18:29.440 回答