【问题标题】:Wrong video duration reported after concatenating video files in BASH script在 BASH 脚本中连接视频文件后报告错误的视频时长
【发布时间】:2012-11-13 20:25:50
【问题描述】:

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

【问题讨论】:

    标签: bash video ffmpeg


    【解决方案1】:

    您似乎还没有“等待”所有转换完成。

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

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

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

    【讨论】:

    • 感谢您的回答。这并没有解决我的问题,但信息仍然很丰富+1
    猜你喜欢
    • 2018-11-28
    • 2021-08-14
    • 1970-01-01
    • 2015-05-30
    • 2021-12-31
    • 2016-09-06
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多