【发布时间】:2018-08-23 13:23:57
【问题描述】:
我有一个script,它可以自动编码和连接一系列输入视频文件。 我正在尝试在单个命令中进行编码和连接。
目前它不起作用,导致最终视频输出出现巨大的空白停顿。
我想使用 concat demux 而不是 concat 协议来获得结果,因为在脚本中自动化要困难得多
您知道是否可以使用 concat demux 归档此结果? 非常感谢!
马西莫
编码/连接 1080p
for f in ./*.mp4; do echo "file '$f'" >> list.txt; done
ffmpeg -f concat -safe 0 -y -i list.txt -i ../logo/logo.png -c:a aac -b:a 384k -ar 48000 -ac 2 -af aresample=async=1000 -c:v libx264 -x264opts keyint=50:min-keyint=50:no-scenecut -bf 0 -r 25 -b:v 4800k -maxrate 4800k -bufsize 3000k -profile:v main -crf 22 -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:10,scale=1920:1080,setsar=1" ../buffer/1080set.mp4
似乎在低帧率下增加了长时间的停顿:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fb03f05e600] 自动插入 h264_mp4toannexb 比特流过滤器
帧= 9745 fps= 13 q=27.0 大小= 186368kB 时间=00:18:52.56 比特率=1348.0kbits
帧= 9745 fps= 13 q=27.0 大小= 186368kB 时间=00:18:56.57 比特率=1343.3kbits/
帧= 9745 fps= 13 q=27.0 大小= 186368kB 时间=00:19:00.65 比特率=1338.5kbits/
帧= 9745 fps= 13 q=27.0 大小= 186368kB 时间=00:19:02.29 比特率=1336.5kbits/
超过 1000 帧重复
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : mp42
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 2016-02-27T22:25:49.000000Z
encoder : HandBrake 0.10.5 2016021100
Duration: 00:06:29.87, start: 0.000000, bitrate: 3447 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 768x432, 3282 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc (default)
Metadata:
creation_time : 2016-02-27T22:25:49.000000Z
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 159 kb/s (default)
Metadata:
creation_time : 2016-02-27T22:25:49.000000Z
handler_name : Stereo
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : M4V
minor_version : 1
compatible_brands: M4V mp42isom
creation_time : 2016-02-27T18:52:37.000000Z
Duration: 00:07:16.93, start: 0.000000, bitrate: 1184 kb/s
Stream #1:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 768x432, 991 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
Metadata:
creation_time : 2016-02-27T18:52:37.000000Z
handler_name : Mainconcept MP4 Video Media Handler
encoder : AVC Coding
Stream #1:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default)
Metadata:
creation_time : 2016-02-27T18:52:37.000000Z
handler_name : Mainconcept MP4 Sound Media Handler
Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '3.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2017-06-27T17:58:17.000000Z
Duration: 00:05:05.05, start: 0.000000, bitrate: 2622 kb/s
Stream #2:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 768x432, 2301 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
Metadata:
creation_time : 2017-06-27T17:58:17.000000Z
handler_name : Alias Data Handler
encoder : AVC Coding
Stream #2:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
Metadata:
creation_time : 2017-06-27T17:58:17.000000Z
handler_name : Alias Data Handler
Input #3, mov,mp4,m4a,3gp,3g2,mj2, from '4.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2017-06-27T17:53:32.000000Z
Duration: 00:06:47.36, start: 0.000000, bitrate: 3144 kb/s
Stream #3:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 768x432, 2819 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
Metadata:
creation_time : 2017-06-27T17:53:32.000000Z
handler_name : Alias Data Handler
encoder : AVC Coding
Stream #3:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
Metadata:
creation_time : 2017-06-27T17:53:32.000000Z
handler_name : Alias Data Handler
【问题讨论】:
-
首先手动确保您的
ffmpeg命令可以在终端中无脚本地工作。然后,一旦你让它工作,你就可以将它实现到脚本中。现在我不知道问题是由于脚本还是由于您的 ffmpeg 命令或两者兼而有之。您可以让我们更轻松地提供帮助,但提供复制问题所需的任何输入,显示您正在执行的实际 ffmpeg 命令,以及这些命令的完整控制台输出。 -
其次,ffmpeg 的控制台输出并不意味着在脚本中进行解析,而仅用于提供信息。这就是 ffprobe 的用途。 ffmpeg 输出未标准化,因此输出可能无法正确解析。此外,它输出的帧速率是速记值,因此不准确。 Use ffprobe instead。通过 shellcheck.net 运行您的脚本以获得一些 bash 建议。
-
嗨@LordNeckbeard我会修改它,目前脚本只提取帧率并计算封闭帧率
-
感谢建议,其实肯定不完美,我会用ffprobe更新,但我确定结果是一样的
-
您能否显示要连接的每个单独输入的信息?
ffmpeg -i input1 -i input2 -i input3