在BASH脚本中连接视频文件后报告的视频持续时间错误

时间:2012-11-13 11:38:38

标签: 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"

1 个答案:

答案 0 :(得分:2)

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

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

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

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