我希望能够记录FFMPEG进程,因为我正在努力计算一分钟视频花费多长时间来转换以帮助我的视频编码服务器的容量规划。如何启用日志记录以及保存日志文件的位置。我在CentOS LAMP机器上安装了FFMPEG。如何启用FFMPEG日志记录以及在哪里可以找到FFMPEG日志文件?
回答
FFmpeg不写入特定的日志文件,而是将其输出发送到standard error。为了捕捉这一点,你需要或者
- 捕获并分析它,因为它会产生
- 标准错误重定向到文件和读取STD错误重定向这样以后过程结束
例:
ffmpeg -i myinput.avi {a-bunch-of-important-params} out.flv 2> /path/to/out.txt
一旦这个过程完成后,你可以检查out.txt
。
做第一个选项有点麻烦,但这是可能的。 (我已经做到了我自己。所以有别人。有一个走一走,看一看,净了解详情。)
如果你只是想知道需要多长时间要执行的命令,你可以考虑使用time命令。你例如使用time ffmpeg -i myvideoofoneminute.aformat out.anotherformat
我找到答案。 1 /首先放在预设,如果你想有一个报告包括-vstats_file MFRfile.txt命令到像例子中的预置我有这样的例子“输出格式MPEG2的DVD HQ”
-vcodec mpeg2video -vstats_file MFRfile.txt -r 29.97 -s 352x480 -aspect 4:3 -b 4000k -mbd rd -trellis -mv0 -cmp 2 -subcmp 2 -acodec mp2 -ab 192k -ar 48000 -ac 2
。这可以生成一个报告,它是您的文件源的文件夹源中的ubicadet。 如果你愿意,你可以放任何名字,我解决了我的问题“我在这个论坛上多次写道”阅读关于mpeg属性的完整的.docx。最后,我可以做我的进度条读取生成的这个txt文件。
问候。
+1进度条 – 2012-06-17 19:28:32
我在ffmpeg Docs中找到了下面的东西。希望这可以帮助! :)
参考:http://ffmpeg.org/ffmpeg.html#toc-Generic-options
“-report”完整的命令行和控制台输出转储到一个名为 程序YYYYMMDD-HHMMSS.log在当前目录下的文件。这个文件可以是 用于错误报告。它也意味着-loglevel冗长。
注意:将环境变量FFREPORT设置为任何值都具有 相同的效果。
这些天出现FFREPORT也可以指定一个输出文件名,参见http://stackoverflow.com/questions/11241878/ffmpeg-report-generation/14417386#14417386也注意指定“-report”自动设置日志记录我相信,详细模式。 – rogerdpack 2013-01-19 18:26:20
您可以使用-report并更改日志级别进行调试吗? – MarcusJ 2014-10-30 10:27:39
@MarcusJ:是的,使用'of = out.mkv; FFREPORT =“level = 32:file = $ of.log”ffmpeg -v verbose ...“$ of”'将stderr的日志级别设置为“详细”,以及“out.mkv.log”的日志级别到“地位”。 ('AV_LOG_WARNING = 24','AV_LOG_INFO = 32','AV_LOG_VERBOSE = 40')。对此的支持[在2年前添加](https://trac.ffmpeg。org/ticket/3057#comment:5),所以你需要一个非古老版本的ffmpeg。 – 2016-07-18 06:12:56
看来,如果你将其添加到命令行:
-loglevel debug
或
-loglevel verbose
你得到更详细的调试输出到命令行。
您必须将reportfile声明为控制台的变量。
问题是所有的Dokumentations你可以找到不运行,所以.. 我给1天我的生活,找到正确的方式....
示例:批/控制台
cmd.exe/K set FFREPORT = file ='C:\ ffmpeg \ proto \ test.log':level = 32 & & C:\ ffmpeg \ bin \ ffmpeg.exe -loglevel警告-report -i输入文件f输出文件
示例Javascript:
var reortlogfile =“cmd.exe/K set FFREPORT = file ='C:\ ffmpeg \ proto \”+ filename +“.log”:level = 32 & & C:\ ffmpeg \ bin \ ffmpeg.exe“.. .....;
你可以改变目录和文件名你想要的。
弗兰克从柏林
ffmpeg的日志标准错误,并能记录到文件与标准错误一个不同的日志级别。 -report
命令行选项不支持您控制日志文件名或日志级别,因此设置环境变量是可取的。
(-v
是-loglevel
的代名词。运行ffmpeg -v help
看到的水平。运行ffmpeg -h full | less
看到的一切,或者咨询online docs,或它们的wiki页面一样the h.264 encode guide)。
#!/bin/bash
of=out.mkv
FFREPORT="level=32:file=$of.log" ffmpeg -v verbose -i src.mp4 -c:a copy -preset slower -c:v libx264 -crf 21 "$of"
这将TRANCODE src.mp4
与X264,并设置日志级别为标准错误,以“详细”,并为out.mkv.log
到“地位”的日志级别。
(AV_LOG_WARNING=24
,AV_LOG_INFO=32
,AV_LOG_VERBOSE=40
等)。对此的支持是added 2 years ago,所以你需要一个非古老版本的ffmpeg。 (总是一个好主意,无论如何,安全/错误修正和加速比)
一些编解码器,像-c:v libx265
,直接写而不是标准错误使用FFmpeg的日志基础设施。所以他们的日志消息不会在报告文件中结束。我认为这是一个bug/TODO列表项。
要记录stderr,但仍然在终端中看到它,可以使用tee(1)
。
如果使用包括状态更新行(默认-v info
,或更高)的日志级别,它们将被包括在日志文件中,^M
(回车又名\r
)分离。没有包含编码器统计信息(如SSIM)的日志级别,但没有状态行更新,因此最佳选择可能是过滤该流。
如果不想过滤(例如,因此每个状态更新间隔的fps/bitrate位于文件中),您可以使用less -r
将它们直接传递到您的终端,以便您可以干净地查看文件。如果您有几个要翻转的编码的.enc
日志,less -r ++G *.enc
效果很好。 (++ G表示从文件末尾开始,对于所有文件)。使用single-key key bindings(如.
和,
)可以很好地翻阅一些日志文件。 (默认绑定为:n
和:p
)。
如果你想过滤,sed 's/.*\r//'
完美适用于ffmpeg输出。 (在一般情况下,您需要like vt100.py
,但不能用于回车)。至少有两种方法可以通过tee + sed执行:tee
到/ dev/tty,以及将tee的输出转换为sed,或者使用进程替换将tee加入到sed的管道中。
# pass stdout and stderr through to the terminal,
## and log a filtered version to a file (with only the last status-line update).
of="$1-x265.mkv"
ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |& # pipe stdout and stderr
tee /dev/tty | sed 's/.*\r//' >> "$of.enc"
## or with process substitution where tee's arg will be something like /dev/fd/123
ffmpeg -v info -i "$1" -c:a copy -c:v libx265 ... "$of" |&
tee >(sed 's/.*\r//' >> "$of.enc")
为了测试几个不同的编码参数,你可以像这样的,我用最近测试一些东西的功能。我把它全部放在一行中,这样我就可以轻松地向上箭头并编辑它,但我会在这里解开它。 (这就是为什么有每行的末尾是;
S)
ffenc-testclip(){
# v should be set by the caller, to a vertical resolution. We scale to WxH, where W is a multiple of 8 (-vf scale=-8:$v)
db=0; # convenient to use shell vars to encode settings that you want to include in the filename and the ffmpeg cmdline
[email protected]${v}p.x265$pre.mkv;
[[ -e "$of.enc" ]]&&echo "$of.enc exists"&&return; # early-out if the file exists
# encode 25 seconds starting at 21m15s (or the keyframe before that)
nice -14 ffmpeg -ss $((21*60+15)) -i src.mp4 -t 25 -map 0 -metadata title= -color_primaries bt709 -color_trc bt709 -colorspace bt709 -sws_flags lanczos+print_info -c:a copy -c:v libx265 -b:v 1500k -vf scale=-8:$v -preset $pre -ssim 1 -x265-params ssim=1:cu-stats=1:deblock=$db:aq-mode=1:lookahead-slices=0 "$of" |&
tee /dev/tty | sed 's/.*\r//' >> "$of.enc";
}
# and use it with nested loops like this.
for pre in fast slow; do for v in 360 480 648 792;do ffenc-testclip ;done;done
less -r ++G *.enc # -r is useful if you didn't use sed
注意,它会检测输出的视频文件,以避免额外喷涌垃圾到日志文件,如果它已经存在的存在。即使如此,我使用并追加(>>
)重定向。
编写一个带参数而不是查看shell变量的shell函数会更“干净”,但这很方便且容易编写,供我自己使用。这也是为什么我通过没有正确引用所有变量扩展来节省空间的原因。 ($v
而不是"$v"
)
- 1. Java日志记录 - 我的日志文件在哪里?
- 2. 我在哪里可以找到XAMPP中的MySQL日志文件
- 3. 我在哪里可以找到日志记录通道适配器的文档?
- 4. 在哪里可以使用活动日志记录功能
- 5. 哪里可以找到Virtuoso的http日志子目录?
- 6. 最古老的日志文件在哪里得到与python日志记录
- 7. 可能的DDOS,在哪里可以找到?什么日志?
- 8. 我在哪里可以找到MySQL的日志在Yii框架
- 9. Windows日志文件目录在哪里?
- 10. 我在哪里可以找到MySQL事务日志?
- 11. 我在哪里可以找到错误日志?
- 12. 我可以在哪里找到phpmyadmin中的mysql日志?
- 13. 我在哪里可以找到System.out.println()的日志?
- 14. 我在哪里可以找到蝗虫日志?
- 15. 在哪里可以找到PHP输出/日志
- 16. 我在哪里可以找到Windows 7上的Glassfish日志?
- 17. 我在哪里可以找到JavaScript的更新日志?
- 18. Log4j日志记录以分离文件
- 19. 从哪里可以看到SQL Server启动/停止日志?
- 20. 我在哪里可以找到存储在S3中的文件访问日志
- 21. 哪里可以找到Azure Cosmos中mastekey访问日志DB
- 22. Hadoop启用日志记录
- 23. VBA启用日志记录
- 24. 启用Activiti日志记录
- 25. 哪里可以找到用于获取呼叫日志(PhoneOpenCallLog)的Phone.dll文件?
- 26. 我在哪里可以找到Weblogic服务器中的日志配置文件?
- 27. tortoisehg一步提交推 - 如何以及在哪里是日志文件
- 28. 如何启用vstest.console.exe日志记录?
- 29. Rails日志记录到Apache日志而不是应用日志
- 30. 从哪里可以找到来自GWT的remoteLoggingServlet的日志文件?
尽管ffmpeg可能不提供写日志文件的选项,但根据您的编解码器和选项,编码器将创建日志。这可能是非常具有破坏性的,因为它被写入执行的地方,这可能导致许可问题。在我的例子中,这是** PHP **和使用'-pass 1/2'的问题。 – cregox 2010-04-08 16:22:56
@Stu Thompson,这里的问题是当ffmpeg没有从控制台运行,但以编程方式执行(它检查它是否是TTY)时,ffmpeg不会生成正常的调试输出到stderr。 – Tom 2011-07-15 13:11:55
@Tom:我没有这个问题,我的Java代码以编程方式调用FFmpeg没有问题。我不是唯一的。 – 2012-05-19 06:52:06