FFMPEG:尽管中间音频块损坏,但仍以准确的时间提取音频
FFMPEG : Extract Audio with exact Timing despite corrupted intermediate audio chunks
我有一个全自动工具链,它首先连接视频块并根据它调整用户事件。
第一步使用第 3 方软件,我无法解决那里的问题。
在此过程的后期,我从视频中提取音频。有时中间会有损坏的音频块。 FFMPEG 在提取时忽略损坏的部分。所以我得到了一个更短的音频(链接事件依赖于组织 A/V 的确切长度)。如果它只发生在最后,那不会是一个大问题,我知道如何在那里填充它,但在随机位置,我没有在文档中找到一个选项来完成这项工作。
唯一可行的解决方案是(我知道这很脏)将视频转换为另一个视频容器并删除视频流并将文件重命名为 MP3/AAC。它在 windows/Android 上工作,但所有 Mac-浏览器都没有播放它。
-filter_complex -discard 看起来很有前途,但我没有找到任何正确语法的好例子。
我发现一个 Adobe 工具可以正确地完成这项工作,所以我希望也有一种方法可以处理 ffmpeg。
General
Complete name : C:\tmp123\video.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 57.8 MiB
Duration : 6 min 51 s
Overall bit rate : 1 177 kb/s
Writing application : Lavf58.26.100
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L4
Format settings, CABAC : No
Format settings, RefFrames : 2 frames
Format settings, GOP : M=1, N=30
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 6 min 51 s
Bit rate : 1 003 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.303 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.016
Stream size : 49.2 MiB (85%)
Audio
ID : 2
Format : AAC
Format/Info : Advanced Audio Codec
Format profile : LC
Codec ID : 40
Duration : 6 min 51 s
Bit rate mode : Constant
Bit rate : 168 kb/s
Channel(s) : 2 channels
Channel positions : Front: L R
Sampling rate : 44.1 kHz
Frame rate : 43.066 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 8.22 MiB (14%)
Default : Yes
Alternate group : 1
感谢 Gyan,我能够通过以下方式修复丢失的时间:
ffmpeg -i x.mp4 -y -vn -af aresample=async=1:first_pts=0:min_hard_comp=0.01 -acodec libfdk_aac x.aac
但是我有很多音频剪辑。 Gyan 建议改用“async=3072”,但它对我不起作用。剪辑仍然存在。我尝试了其他值,min_hard_comp 完成了这项工作。将其设置为 0.2 而不是 0.01 后,剪裁消失了。生成的音频现在不是 100% 适合,但它已从 >1:30 分钟减少到 30 毫秒用于 6:51min 视频:
ffmpeg -i video.mp4 -y -vn -af aresample=async=1:first_pts=0:min_hard_comp=0.2 audioout1.mp3
谢谢吉安!
我有一个全自动工具链,它首先连接视频块并根据它调整用户事件。 第一步使用第 3 方软件,我无法解决那里的问题。 在此过程的后期,我从视频中提取音频。有时中间会有损坏的音频块。 FFMPEG 在提取时忽略损坏的部分。所以我得到了一个更短的音频(链接事件依赖于组织 A/V 的确切长度)。如果它只发生在最后,那不会是一个大问题,我知道如何在那里填充它,但在随机位置,我没有在文档中找到一个选项来完成这项工作。 唯一可行的解决方案是(我知道这很脏)将视频转换为另一个视频容器并删除视频流并将文件重命名为 MP3/AAC。它在 windows/Android 上工作,但所有 Mac-浏览器都没有播放它。
-filter_complex -discard 看起来很有前途,但我没有找到任何正确语法的好例子。 我发现一个 Adobe 工具可以正确地完成这项工作,所以我希望也有一种方法可以处理 ffmpeg。
General
Complete name : C:\tmp123\video.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 57.8 MiB
Duration : 6 min 51 s
Overall bit rate : 1 177 kb/s
Writing application : Lavf58.26.100
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L4
Format settings, CABAC : No
Format settings, RefFrames : 2 frames
Format settings, GOP : M=1, N=30
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 6 min 51 s
Bit rate : 1 003 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.303 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.016
Stream size : 49.2 MiB (85%)
Audio
ID : 2
Format : AAC
Format/Info : Advanced Audio Codec
Format profile : LC
Codec ID : 40
Duration : 6 min 51 s
Bit rate mode : Constant
Bit rate : 168 kb/s
Channel(s) : 2 channels
Channel positions : Front: L R
Sampling rate : 44.1 kHz
Frame rate : 43.066 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 8.22 MiB (14%)
Default : Yes
Alternate group : 1
感谢 Gyan,我能够通过以下方式修复丢失的时间:
ffmpeg -i x.mp4 -y -vn -af aresample=async=1:first_pts=0:min_hard_comp=0.01 -acodec libfdk_aac x.aac
但是我有很多音频剪辑。 Gyan 建议改用“async=3072”,但它对我不起作用。剪辑仍然存在。我尝试了其他值,min_hard_comp 完成了这项工作。将其设置为 0.2 而不是 0.01 后,剪裁消失了。生成的音频现在不是 100% 适合,但它已从 >1:30 分钟减少到 30 毫秒用于 6:51min 视频:
ffmpeg -i video.mp4 -y -vn -af aresample=async=1:first_pts=0:min_hard_comp=0.2 audioout1.mp3
谢谢吉安!