- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有包含 10 分钟视频的视频文件 (.avi)。我还有包含 1 分钟声音的音频文件 (.wav)。
我需要将音频添加到现有视频,但音频需要在视频播放一分钟后开始
怎么做?
(如果可能,最好使用 ffmpeg)
已经尝试这个查询(延迟 30 秒)
-i video.avi -i audio.wav -filter_complex \"[1]adelay=30000|30000[aud];[0][aud]amix\" - c:v copy out.avi"
尝试合并多于一个 wav 时附上 ffmpeg 的日志:
ffmpeg started on 2018-01-10 at 11:14:57
Report written to "ffmpeg-20180110-111457.log"
Command line:
ffmpeg.exe -report -i "..\\merged.avi" -i "Storage\\1.wav" -i "Storage\\2.wav" -i "Storage\\3.wav" -filter_complex "adelay=30000|30000" "adelay=91000|91000" "adelay=151000|151000" -c:v copy "Storage\\ALL.AVI"
ffmpeg version 3.4.1 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 7.2.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Splitting the commandline.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Reading option '-i' ... matched as input url with argument '..\mergedVideoOnly.avi'.
Reading option '-i' ... matched as input url with argument '\Storage\0030_0130.wav'.
Reading option '-i' ... matched as input url with argument '\Storage\0130_0230.wav'.
Reading option '-i' ... matched as input url with argument '\Storage\0230_0330.wav'.
Reading option '-filter_complex' ... matched as option 'filter_complex' (create a complex filtergraph) with argument 'adelay=30000|30000'.
Reading option 'adelay=91000|91000' ... matched as output url.
Reading option 'adelay=151000|151000' ... matched as output url.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'copy'.
Reading option 'ALL.AVI' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Applying option filter_complex (create a complex filtergraph) with argument adelay=30000|30000.
Successfully parsed a group of options.
Parsing a group of options: input url ..\mergedVideoOnly.avi.
Successfully parsed a group of options.
Opening an input file: ..\mergedVideoOnly.avi.
[NULL @ 042ed360] Opening '..\mergedVideoOnly.avi' for reading
[file @ 042ee300] Setting default whitelist 'file,crypto'
[avi @ 042ed360] Format avi probed with size=2048 and score=100
[avi @ 042ee500] use odml:1
[avi @ 042ed360] Before avformat_find_stream_info() pos: 5690 bytes read:100744 seeks:4 nb_streams:1
[avi @ 042ed360] parser not found for codec scpr, packets or times may be invalid.
[avi @ 042ed360] parser not found for codec scpr, packets or times may be invalid.
[avi @ 042ed360] max_analyze_duration 5000000 reached at 5000000 microseconds st:0
[avi @ 042ed360] rfps: 2.916667 0.012539
[avi @ 042ed360] rfps: 2.916667 0.012539
[avi @ 042ed360] rfps: 3.000000 0.000000
[avi @ 042ed360] rfps: 3.083333 0.012539
[avi @ 042ed360] rfps: 3.083333 0.012539
[avi @ 042ed360] rfps: 5.916667 0.012539
[avi @ 042ed360] rfps: 5.916667 0.012539
[avi @ 042ed360] rfps: 6.000000 0.000000
[avi @ 042ed360] rfps: 6.000000 0.000000
[avi @ 042ed360] rfps: 6.083333 0.012539
[avi @ 042ed360] rfps: 6.083333 0.012539
[avi @ 042ed360] rfps: 8.916667 0.012539
[avi @ 042ed360] rfps: 8.916667 0.012539
[avi @ 042ed360] rfps: 9.000000 0.000000
[avi @ 042ed360] rfps: 9.083333 0.012539
[avi @ 042ed360] rfps: 9.083333 0.012539
[avi @ 042ed360] rfps: 11.916667 0.012539
[avi @ 042ed360] rfps: 11.916667 0.012539
[avi @ 042ed360] rfps: 12.000000 0.000000
[avi @ 042ed360] rfps: 12.000000 0.000000
[avi @ 042ed360] rfps: 12.083333 0.012539
[avi @ 042ed360] rfps: 12.083333 0.012539
[avi @ 042ed360] rfps: 14.916667 0.012539
[avi @ 042ed360] rfps: 14.916667 0.012539
[avi @ 042ed360] rfps: 15.000000 0.000000
[avi @ 042ed360] rfps: 15.083333 0.012539
[avi @ 042ed360] rfps: 15.083333 0.012539
[avi @ 042ed360] rfps: 17.916667 0.012539
[avi @ 042ed360] rfps: 17.916667 0.012539
[avi @ 042ed360] rfps: 18.000000 0.000000
[avi @ 042ed360] rfps: 18.000000 -0.000000
[avi @ 042ed360] rfps: 18.083333 0.012539
[avi @ 042ed360] rfps: 18.083333 0.012539
[avi @ 042ed360] rfps: 20.916667 0.012539
[avi @ 042ed360] rfps: 20.916667 0.012539
[avi @ 042ed360] rfps: 21.000000 0.000000
[avi @ 042ed360] rfps: 21.083333 0.012539
[avi @ 042ed360] rfps: 21.083333 0.012539
[avi @ 042ed360] rfps: 23.916667 0.012539
[avi @ 042ed360] rfps: 23.916667 0.012539
[avi @ 042ed360] rfps: 24.000000 0.000000
[avi @ 042ed360] rfps: 24.000000 -0.000000
[avi @ 042ed360] rfps: 24.083333 0.012539
[avi @ 042ed360] rfps: 24.083333 0.012539
[avi @ 042ed360] rfps: 26.916667 0.012539
[avi @ 042ed360] rfps: 26.916667 0.012539
[avi @ 042ed360] rfps: 27.000000 0.000000
[avi @ 042ed360] rfps: 27.083333 0.012539
[avi @ 042ed360] rfps: 27.083333 0.012539
[avi @ 042ed360] rfps: 29.916667 0.012539
[avi @ 042ed360] rfps: 29.916667 0.012539
[avi @ 042ed360] rfps: 30.000000 0.000000
[avi @ 042ed360] rfps: 30.000000 -0.000000
[avi @ 042ed360] rfps: 33.000000 0.000000
[avi @ 042ed360] rfps: 36.000000 0.000000
[avi @ 042ed360] rfps: 36.000000 -0.000000
[avi @ 042ed360] rfps: 39.000000 0.000000
[avi @ 042ed360] rfps: 42.000000 0.000000
[avi @ 042ed360] rfps: 42.000000 0.000000
[avi @ 042ed360] rfps: 45.000000 0.000000
[avi @ 042ed360] rfps: 48.000000 0.000000
[avi @ 042ed360] rfps: 48.000000 0.000000
[avi @ 042ed360] rfps: 51.000000 0.000000
[avi @ 042ed360] rfps: 54.000000 0.000000
[avi @ 042ed360] rfps: 54.000000 -0.000000
[avi @ 042ed360] rfps: 57.000000 0.000000
[avi @ 042ed360] rfps: 60.000000 0.000000
[avi @ 042ed360] rfps: 60.000000 0.000000
[avi @ 042ed360] rfps: 120.000000 0.000000
[avi @ 042ed360] rfps: 120.000000 -0.000000
[avi @ 042ed360] rfps: 240.000000 0.000000
[avi @ 042ed360] rfps: 240.000000 -0.000000
[avi @ 042ed360] rfps: 23.976024 0.001038
[avi @ 042ed360] rfps: 23.976024 0.001038
[avi @ 042ed360] rfps: 29.970030 0.001622
[avi @ 042ed360] rfps: 29.970030 0.001622
[avi @ 042ed360] rfps: 59.940060 0.006487
[avi @ 042ed360] rfps: 59.940060 0.006487
[avi @ 042ed360] rfps: 11.988012 0.000259
[avi @ 042ed360] rfps: 11.988012 0.000259
[avi @ 042ed360] rfps: 14.985015 0.000405
[avi @ 042ed360] rfps: 14.985015 0.000405
[avi @ 042ed360] rfps: 47.952048 0.004152
[avi @ 042ed360] rfps: 47.952048 0.004152
[avi @ 042ed360] After avformat_find_stream_info() pos: 105829 bytes read:175139 seeks:4 frames:15
Input #0, avi, from '..\mergedVideoOnly.avi':
Metadata:
encoder : Lavf57.83.100
Duration: 00:00:25.33, start: 0.000000, bitrate: 113 kb/s
Stream #0:0, 15, 1/3: Video: scpr (SCPR / 0x52504353), rgb0, 1920x1200, 112 kb/s, 3 fps, 3 tbr, 3 tbn, 3 tbc
Successfully opened the file.
Parsing a group of options: input url " "\Storage\0030_0130.wav.
Successfully parsed a group of options.
Opening an input file: " "\Storage\1.wav.
[NULL @ 03be0180] Opening '" "\Storage\1.wav' for reading
[file @ 03be0820] Setting default whitelist 'file,crypto'
[wav @ 03be0180] Format wav probed with size=2048 and score=99
[wav @ 03be0180] Before avformat_find_stream_info() pos: 44 bytes read:65580 seeks:1 nb_streams:1
[wav @ 03be0180] probing stream 0 pp:32
[wav @ 03be0180] probing stream 0 pp:31
[wav @ 03be0180] probing stream 0 pp:30
[wav @ 03be0180] probing stream 0 pp:29
[wav @ 03be0180] probing stream 0 pp:28
[wav @ 03be0180] probing stream 0 pp:27
[wav @ 03be0180] probing stream 0 pp:26
[wav @ 03be0180] probing stream 0 pp:25
[wav @ 03be0180] probing stream 0 pp:24
[wav @ 03be0180] probing stream 0 pp:23
[wav @ 03be0180] probing stream 0 pp:22
[wav @ 03be0180] probing stream 0 pp:21
[wav @ 03be0180] probing stream 0 pp:20
[wav @ 03be0180] probing stream 0 pp:19
[wav @ 03be0180] probing stream 0 pp:18
[wav @ 03be0180] probing stream 0 pp:17
[wav @ 03be0180] probing stream 0 pp:16
[wav @ 03be0180] probing stream 0 pp:15
[wav @ 03be0180] probing stream 0 pp:14
[wav @ 03be0180] probing stream 0 pp:13
[wav @ 03be0180] probing stream 0 pp:12
[wav @ 03be0180] probing stream 0 pp:11
[wav @ 03be0180] probing stream 0 pp:10
[wav @ 03be0180] probing stream 0 pp:9
[wav @ 03be0180] probing stream 0 pp:8
[wav @ 03be0180] probing stream 0 pp:7
[wav @ 03be0180] probing stream 0 pp:6
[wav @ 03be0180] probing stream 0 pp:5
[wav @ 03be0180] probing stream 0 pp:4
[wav @ 03be0180] probing stream 0 pp:3
[wav @ 03be0180] probing stream 0 pp:2
[wav @ 03be0180] probing stream 0 pp:1
[wav @ 03be0180] probed stream 0
[wav @ 03be0180] parser not found for codec pcm_s16le, packets or times may be invalid.
[wav @ 03be0180] max_analyze_duration 5000000 reached at 5120000 microseconds st:0
[wav @ 03be0180] After avformat_find_stream_info() pos: 131116 bytes read:196652 seeks:1 frames:22
Guessed Channel Layout for Input Stream #1.0 : mono
Input #1, wav, from '" "\Storage\0030_0130.wav':
Duration: 00:00:56.80, bitrate: 128 kb/s
Stream #1:0, 22, 1/8000: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Successfully opened the file.
Parsing a group of options: input url " "\Storage\2.wav.
Successfully parsed a group of options.
Opening an input file: " "\Storage\2.wav.
[NULL @ 03bed760] Opening '" "\Storage\2.wav' for reading
[file @ 03bb3100] Setting default whitelist 'file,crypto'
[wav @ 03bed760] Format wav probed with size=2048 and score=99
[wav @ 03bed760] Before avformat_find_stream_info() pos: 44 bytes read:65580 seeks:1 nb_streams:1
[wav @ 03bed760] probing stream 0 pp:32
[wav @ 03bed760] probing stream 0 pp:31
[wav @ 03bed760] probing stream 0 pp:30
[wav @ 03bed760] probing stream 0 pp:29
[wav @ 03bed760] probing stream 0 pp:28
[wav @ 03bed760] probing stream 0 pp:27
[wav @ 03bed760] probing stream 0 pp:26
[wav @ 03bed760] probing stream 0 pp:25
[wav @ 03bed760] probing stream 0 pp:24
[wav @ 03bed760] probing stream 0 pp:23
[wav @ 03bed760] probing stream 0 pp:22
[wav @ 03bed760] probing stream 0 pp:21
[wav @ 03bed760] probing stream 0 pp:20
[wav @ 03bed760] probing stream 0 pp:19
[wav @ 03bed760] probing stream 0 pp:18
[wav @ 03bed760] probing stream 0 pp:17
[wav @ 03bed760] probing stream 0 pp:16
[wav @ 03bed760] probing stream 0 pp:15
[wav @ 03bed760] probing stream 0 pp:14
[wav @ 03bed760] probing stream 0 pp:13
[wav @ 03bed760] probing stream 0 pp:12
[wav @ 03bed760] probing stream 0 pp:11
[wav @ 03bed760] probing stream 0 pp:10
[wav @ 03bed760] probing stream 0 pp:9
[wav @ 03bed760] probing stream 0 pp:8
[wav @ 03bed760] probing stream 0 pp:7
[wav @ 03bed760] probing stream 0 pp:6
[wav @ 03bed760] probing stream 0 pp:5
[wav @ 03bed760] probing stream 0 pp:4
[wav @ 03bed760] probing stream 0 pp:3
[wav @ 03bed760] probing stream 0 pp:2
[wav @ 03bed760] probing stream 0 pp:1
[wav @ 03bed760] probed stream 0
[wav @ 03bed760] parser not found for codec pcm_s16le, packets or times may be invalid.
[wav @ 03bed760] max_analyze_duration 5000000 reached at 5120000 microseconds st:0
[wav @ 03bed760] After avformat_find_stream_info() pos: 131116 bytes read:196652 seeks:1 frames:22
Guessed Channel Layout for Input Stream #2.0 : mono
Input #2, wav, from '" "\Storage\0130_0230.wav':
Duration: 00:00:59.81, bitrate: 128 kb/s
Stream #2:0, 22, 1/8000: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Successfully opened the file.
Parsing a group of options: input url " "\Storage\3.wav.
Successfully parsed a group of options.
Opening an input file: " "\Storage\3.wav.
[NULL @ 03bfeea0] Opening '" "\Storage\3.wav' for reading
[file @ 03bfe8e0] Setting default whitelist 'file,crypto'
[wav @ 03bfeea0] Format wav probed with size=2048 and score=99
[wav @ 03bfeea0] Before avformat_find_stream_info() pos: 44 bytes read:65580 seeks:1 nb_streams:1
[wav @ 03bfeea0] probing stream 0 pp:32
[wav @ 03bfeea0] probing stream 0 pp:31
[wav @ 03bfeea0] probing stream 0 pp:30
[wav @ 03bfeea0] probing stream 0 pp:29
[wav @ 03bfeea0] probing stream 0 pp:28
[wav @ 03bfeea0] probing stream 0 pp:27
[wav @ 03bfeea0] probing stream 0 pp:26
[wav @ 03bfeea0] probing stream 0 pp:25
[wav @ 03bfeea0] probing stream 0 pp:24
[wav @ 03bfeea0] probing stream 0 pp:23
[wav @ 03bfeea0] probing stream 0 pp:22
[wav @ 03bfeea0] probing stream 0 pp:21
[wav @ 03bfeea0] probing stream 0 pp:20
[wav @ 03bfeea0] probing stream 0 pp:19
[wav @ 03bfeea0] probing stream 0 pp:18
[wav @ 03bfeea0] probing stream 0 pp:17
[wav @ 03bfeea0] probing stream 0 pp:16
[wav @ 03bfeea0] probing stream 0 pp:15
[wav @ 03bfeea0] probing stream 0 pp:14
[wav @ 03bfeea0] probing stream 0 pp:13
[wav @ 03bfeea0] probing stream 0 pp:12
[wav @ 03bfeea0] probing stream 0 pp:11
[wav @ 03bfeea0] probing stream 0 pp:10
[wav @ 03bfeea0] probing stream 0 pp:9
[wav @ 03bfeea0] probing stream 0 pp:8
[wav @ 03bfeea0] probing stream 0 pp:7
[wav @ 03bfeea0] probing stream 0 pp:6
[wav @ 03bfeea0] probing stream 0 pp:5
[wav @ 03bfeea0] probing stream 0 pp:4
[wav @ 03bfeea0] probing stream 0 pp:3
[wav @ 03bfeea0] probing stream 0 pp:2
[wav @ 03bfeea0] probing stream 0 pp:1
[wav @ 03bfeea0] probed stream 0
[wav @ 03bfeea0] parser not found for codec pcm_s16le, packets or times may be invalid.
[wav @ 03bfeea0] max_analyze_duration 5000000 reached at 5120000 microseconds st:0
[wav @ 03bfeea0] After avformat_find_stream_info() pos: 131116 bytes read:196652 seeks:1 frames:22
Guessed Channel Layout for Input Stream #3.0 : mono
Input #3, wav, from '" "\Storage\0230_0330.wav':
Duration: 00:00:59.81, bitrate: 128 kb/s
Stream #3:0, 22, 1/8000: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
Successfully opened the file.
detected 4 logical cores
[Parsed_adelay_0 @ 03c0c460] Setting 'delays' to value '30000|30000'
Parsing a group of options: output url adelay=91000|91000.
Successfully parsed a group of options.
Opening an output file: adelay=91000|91000.
[NULL @ 03c17640] Unable to find a suitable output format for 'adelay=91000|91000'
adelay=91000|91000: Invalid argument
[AVIOContext @ 042ee400] Statistics: 175139 bytes read, 4 seeks
[AVIOContext @ 03be0900] Statistics: 196652 bytes read, 1 seeks
[AVIOContext @ 03bca7e0] Statistics: 196652 bytes read, 1 seeks
[AVIOContext @ 03bfe9a0] Statistics: 196652 bytes read, 1 seeks
最佳答案
使用
ffmpeg -i in.avi -i audio.wav -filter_complex
"[1]adelay=62000|62000[aud];[0][aud]amix" -c:v copy out.avi
adelay
将所有 channel 的 WAV 开始延迟 62000 毫秒,假设 WAV 中有 2 个 channel ,然后将其与视频的音频混合。
混合两个音频文件,
ffmpeg -i in.avi -i audio1.wav -i audio2.wav -filter_complex
"[1]adelay=30000|30000[aud1];[2]adelay=90000|90000[aud2];
[0][aud1][aud2]amix=3" -c:v copy out.avi
关于audio - 如何在特定时间使用 FFMPEG 将音频添加到现有视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48169031/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!