Я хочу, чтобы иметь возможность регистрировать процессы FFMPEG, потому что я пытаюсь выяснить, сколько минут займет видео, чтобы конвертировать, чтобы помочь с планированием емкости моего сервера кодирования видео. Как включить ведение журнала и где хранится файл журнала. У меня установлен FFMPEG на машине CentOS LAMP.Как включить ведение журнала FFMPEG и найти файл журнала FFMPEG?
ответ
FFmpeg не записывается в конкретный файл журнала, а отправляет свой результат на standard error. Для того, чтобы захватить то, что вам нужно либо
- захвата и разобрать его, как он генерируется
- переориентировать стандартную ошибку в файл и читать, что после завершения процесса
Пример для перенаправления ошибок станд :
ffmpeg -i myinput.avi {a-bunch-of-important-params} out.flv 2> /path/to/out.txt
Как только процесс будет завершен, вы можете осмотреть out.txt
.
Это немного сложнее сделать первый вариант, но это возможно. (Я сделал это сам, так что у меня есть другие. Посмотрите вокруг SO и в сети.)
Если вы просто хотите узнать, сколько времени потребуется для выполнения команды, вы можете рассмотреть возможность использования time команда. Вы, например, используете time ffmpeg -i myvideoofoneminute.aformat out.anotherformat
Я нахожу ответ. 1/Первый положить в пресетах, у меня есть этот пример «Выходной формат 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
Если вы хотите, отчет включает в себя команду -vstats_file MFRfile.txt в предустановки, как пример. это может сделать отчет, который он ubicadet в источнике папки вашего файла Source. вы можете поместить любое имя, если хотите, я решил свою проблему «я пишу много раз в этом форуме», читая полный .docx о свойствах mpeg. наконец, я могу сделать свой индикатор выполнения, считывая этот txt-файл.
С уважением.
+1 индикатор выполнения –
Я нашел материал ниже в документах ffmpeg. Надеюсь это поможет! :)
Ссылка: http://ffmpeg.org/ffmpeg.html#toc-Generic-options
«-report» дамп всю командную строку и консольный вывод в файл с именем программа-YYYYMMDD-HHMMSS.log в текущем каталоге. Этот файл может быть полезен для отчетов об ошибках. Он также подразумевает подробный список.
Примечание: настройка переменной окружения FFREPORT на любое значение имеет такой же эффект .
появляется в эти дни. FFREPORT также может указать имя выходного файла, см. Http://stackoverflow.com/questions/11241878/ffmpeg-report-generation/14417386#14417386 также NB, что указание «-report» автоматически устанавливает регистрацию к вербальному режиму, я считаю. – rogerdpack
Можете ли вы использовать -report и изменить лог-уровень для отладки? – MarcusJ
@MarcusJ: Да, используйте 'из = out.mkv; FFREPORT = "level = 32: file = $ of.log" ffmpeg -v verbose ... "$ из' ', чтобы установить уровень журнала для stderr в" verbose "и уровень журнала для' 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. –
кажется, что если добавить это в командной строке:
-loglevel debug
или
-loglevel verbose
Вы получаете более подробный вывод отладки в командной строке.
Вы должны объявить файл отчета как переменную для консоли.
Проблема все Dokumentations вы можете найти не работают так .. я был дать 1 день моей жизни, чтобы найти правильный путь ....
Пример: для партии/консоли
cmd.exe/K set FFREPORT = file = 'C: \ ffmpeg \ proto \ test.log': level = 32 & & C: \ ffmpeg \ bin \ ffmpeg.exe -loglevel warning -report -i inputfile f outputfile
Исключить Javascript:
var reortlogfile = "cmd.exe/K set FFREPORT = file = 'C: \ ffmpeg \ proto \" + filename + ".log': level = 32 & & C: \ ffmpeg \ bin \ ffmpeg.exe" .. .....;
Вы можете изменить каталог и имя файла, как вы хотите.
Франк из Берлина
журналы FFmpeg на стандартный вывод, и может войти в файл с другим логарифмического уровня от STDERR. Параметр командной строки -report
не дает вам контроля над именем файла журнала или уровнем журнала, поэтому предпочтительнее установить переменную окружения.
(-v
является синонимом -loglevel
. Run ffmpeg -v help
, чтобы увидеть уровни. Run ffmpeg -h full | less
, чтобы увидеть все. Или обратитесь к online docs или их вики-страниц, как 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, и установить уровень журнала для STDERR в «многословной», и уровень журнала для out.mkv.log
в «статус».
(AV_LOG_WARNING=24
, AV_LOG_INFO=32
, AV_LOG_VERBOSE=40
, и т.п.). Поддержка этого была added 2 years ago, поэтому вам нужна не-древняя версия ffmpeg. (Всегда хорошая идея, во всяком случае, для безопасности/исправления ошибок и ускорений)
Несколько кодеками, как -c:v libx265
, писать непосредственно в стандартный вывод вместо использования протоколирования инфраструктуры FFmpeg,. Таким образом, их сообщения в журнале не попадают в файл отчета. Я предполагаю, что это элемент с ошибкой/TODO-list.
Чтобы зарегистрировать 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 в pipe в sed или использовать подстановку процесса в tee в pipe to 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
Обратите внимание, что он проверяет на наличие видеофайла вывода, чтобы избежать извергает дополнительный мусор в лог-файл, если он уже существует. Тем не менее, я использовал и добавлял (>>
) перенаправление.
Было бы «чище» написать функцию оболочки, в которой вместо аргументов командной строки вместо аргументов командной строки, но это было удобно и легко писать для моего собственного использования. Вот почему я сохранил пространство, не указав при этом все мои переменные расширения. ($v
вместо "$v"
)
- 1. Как включить ведение журнала FFMPEG?
- 2. Включить ведение журнала MySQL
- 3. Svnant включить ведение журнала
- 4. Как включить ведение журнала Ehcache
- 5. Как включить ведение журнала vstest.console.exe?
- 6. Включить ведение журнала для JDBC
- 7. Как включить ведение журнала restkit в быстрых
- 8. Как включить ведение журнала named/bind/DNS?
- 9. Phalcon Как включить более подробное ведение журнала?
- 10. Как включить ведение журнала в Rails?
- 11. Как включить ведение журнала в Android программно
- 12. Как включить ведение журнала в mysql-драйвере
- 13. Как включить/отключить ведение журнала в ASP.NET
- 14. Как включить ведение журнала привязки к сборке?
- 15. Как включить ведение журнала в стартовой сцене?
- 16. Как включить ведение журнала на com.sun.enterprise.security.auth.realm.ldap.LDAPRealm?
- 17. Как включить ведение журнала в модуле Perl?
- 18. Как включить ведение журнала кеша в solr
- 19. Как включить ведение журнала с помощью Ninject?
- 20. Как включить ведение журнала для Spring Security?
- 21. Как включить встроенное ведение журнала tomcat
- 22. Kafka: Как включить ведение журнала клиента?
- 23. Как включить ведение журнала для @RestController?
- 24. Как включить ведение журнала для Apache FtpServer
- 25. Как включить ведение журнала DEBUG в Objectify
- 26. Regex: Получение FPS из журнала FFMPEG
- 27. Включить ведение журнала в контейнере docker mysql
- 28. FFMpeg для IOS - Отключение уровней журнала
- 29. Включить ведение журнала с помощью $ log AngularJS
- 30. Включить ведение журнала JBoss EAP 6.2 log4j
Хотя ffmpeg не может предоставить возможность записывать файлы журналов, в зависимости от вашего кодека и параметров кодер будет создавать журналы. И это может быть очень разрушительным, поскольку оно написано там, где оно было выполнено, что может привести к разрешению проблем. В моем случае это была проблема с ** PHP ** и использованием '-pass 1/2'. – cregox
@Stu Thompson, проблема в том, что ffmpeg не выводит нормальный вывод отладки в stderr, когда ffmpeg не запускается с консоли, а выполняется программно (он проверяет, является ли это TTY). – Tom
@Tom: У меня нет этой проблемы, мой код Java вызывает FFmpeg программно без проблем. И я не единственный. –