我正在尝试使用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"
答案 0 :(得分:2)
看起来您还没有“等待”完成所有转换。
在3个ffmpeg行之后使用命令wait
(这些行在后台运行)
我不确定确切的语法,但很容易理解。
另外,你必须只使用fifo吗?你可以在/ tmp中使用一个简单的文件;除非要占用很大的空间。
编辑:由于fifo的固有阻塞I / O特性,等待ommand可能没有必要;但是,正因为如此,在并行转换3个文件时,您将无法实现并行性。在转换输出文件的第一个4k(或任何你的fifo大小)之后,2(第二和第三)转换命令将停止,直到从fifo读取数据。