use*_*164 7 audio ffmpeg command-line
TL;DR 使用 ffpmpeg 在单行中使用 Loudnorm 2pass 的示例(ffmpeg-normalize 是单线程/进程,我无法将其他 ffmpeg 选项组合到其中)
关于 Loudnorm 的例子并不多,因为它对 ffmpeg 来说相对较新,我已经使用 ffmpeg 10 年左右了。然而我是 Loudnorm 的新手
我读了:
http://k.ylo.ph/2016/04/04/loudnorm.html
这很有帮助。然而,我试图将多个 ffmpeg 条目合并到 1. 使用 ffmpeg-normalize (python)库也将您限制为单个线程/进程。这很慢
对于 ffmpeg x264 的 2 次传递,您可以简单地执行以下操作:
ffmpeg -y -i $FILE -c:v libx264 -b:v 4000k -pass 1 -c:a aac -b:a 256k -f mkv /dev/null && \
ffmpeg -i $FILE -c:v libx264 -b:v 4000k -pass 2 -c:a aac -b:a 256k $FILE.mkv
Run Code Online (Sandbox Code Playgroud)
不过,对于 Loudnorm 来说似乎并不存在。我根本看不出有什么办法可以通过一次和两次通过来做到这一点?
目前我正在编码视频,然后规范化音频,最后从文件中剥离元数据和章节数据(如果存在)(无论是否存在)
这会创建 3 个废弃文件(包括原始文件)
能够在一行中执行 Loudnorm 将帮助我向其中添加其他内容,是否可以同时执行 x264 的 2pass 和 Loudnorm 的 2pass?就像它处理两者然后在第二遍中将它们组合起来一样。
如果可能的话,我想要这些例子,而不是链接。我可以自己用谷歌搜索链接,并且已经持续了几个星期。谢谢
仅使用 ffmpeg 无法自动运行两通调响滤波器,但您可以使用ffmpeg-normalize
程序来为您完成此操作。我知道您已经提到过,但是如果您想同时对视频 \xe2\x80\x93 进行编码,特别是通过两次 \xe2\x80\x93 进行编码,那么您将必须使用一个中间文件,即:
ffmpeg-normalize
在原始视频上,复制原始视频流。你想要实现的目标根本无法仅靠 ffmpeg 来完成。您需要编写自己的解决方案,特别是如果您想并行处理多个文件。即使单个 ffmpeg 运行仅使用一个线程,这肯定会加快该过程。
\n\n作为起点, FFmpeg 存储库中还有一个更简单的 Ruby 脚本。它执行两次 Loudnorm 传递,读取第一次运行的统计数据。您可以修改它以使用多线程额外运行双通道 x264 编码,即在第一次运行中运行第一个 x264 通道,在第二次运行中运行第二个通道:
\n\n第一遍:
\n\nffmpeg -y -i $FILE -c:v libx264 -b:v 4000k -pass 1 -filter:a loudnorm=print_format=json -f mkv /dev/null\n
Run Code Online (Sandbox Code Playgroud)\n\n从输出中读取 JSON 统计信息loudnorm
(例如,使用 Python 的 JSON 解析器或任何其他工具,如grep
或awk
),然后运行第二遍:
ffmpeg -i $FILE -c:v libx264 -b:v 4000k -pass 2 -filter:a loudnorm=linear=true:measured_I=$input_i:measured_LRA=$input_lra:measured_tp=$input_tp:measured_thresh=$input_thresh -c:a aac -b:a 256k $FILE.mkv\n
Run Code Online (Sandbox Code Playgroud)\n\n其中$input_i
、$input_lra
、$input_tp
、$input_thresh
是从第一遍读取的值。
不需要其他程序。这实际上可以单独使用 ffmpeg 来完成。我实际上创建了一个bat 文件来执行此操作。
cls
echo off
ffmpeg -i %1 -filter_complex "[0:a]loudnorm=I=-16:TP=-1.5:LRA=11:print_format=summary" -f null x 2>%1.txt
@for /f "tokens=3" %%a in ('findstr /C:"Input Integrated" %1.txt') do (set II=%%a)
echo %II% is the Input Integrated
@for /f "tokens=4" %%a in ('findstr /C:"Input True Peak" %1.txt') do (set ITP=%%a)
echo %ITP% is the Input True Peak
@for /f "tokens=3" %%a in ('findstr /C:"Input LRA" %1.txt') do (set ILRA=%%a)
echo %ILRA% is the Input LRA
@for /f "tokens=3" %%a in ('findstr /C:"Input Threshold" %1.txt') do (set IT=%%a)
echo %IT% is the Input Threshold
@for /f "tokens=3" %%a in ('findstr /C:"Output Integrated" %1.txt') do (set OI=%%a)
echo %OI% is the Output Integrated
@for /f "tokens=4" %%a in ('findstr /C:"Output True Peak" %1.txt') do (set OTP=%%a)
echo %OTP% is the Output True Peak
@for /f "tokens=3" %%a in ('findstr /C:"Output LRA" %1.txt') do (set OLRA=%%a)
echo %OLRA% is the Output LRA
@for /f "tokens=3" %%a in ('findstr /C:"Output Threshold" %1.txt') do (set OT=%%a)
echo %OT% is the Output Threshold
@for /f "tokens=3" %%a in ('findstr /C:"Target Offset" %1.txt') do (set TO=%%a)
echo %TO% is the Target Offset
ffmpeg -i %1 -af loudnorm=linear=true:I=-16:LRA=11:tp=-1.5:measured_I=%II%:measured_LRA=%ILRA%:measured_tp=%ITP%:measured_thresh=%IT%:offset=%TO%:print_format=summary loudnorm.wav
Run Code Online (Sandbox Code Playgroud)
它的作用是首先分析音频并将结果保存到文本文件中。然后,它从文本文件中读取结果并将其存储为每个所需测量字段的变量。您所要做的就是根据您在文件中的喜好调整 I= 和 TP= 。
归档时间: |
|
查看次数: |
18361 次 |
最近记录: |