У меня есть этот видеокодер ffmpeg с использованием Rails, и мне нужно сообщить о прогрессе ffmpeg пользователю. Как это можно сделать, если я использую Linux?Как отслеживать прогресс с ffmpeg?
2
A
ответ
3
Это решение, которое я достиг:
def execute_ffmpeg(cmd, progress)
logger.debug "Running command #{cmd}"
command = "#{cmd} 2>&1"
progress = nil
frames = nil
fps = 25
ffmpeg = IO.popen(command)
ffmpeg.each("\r") do |line|
if frames.nil? && line =~ /Duration:(\s.?(\d*):(\d*):(\d*\.\d*))/
duration = $2.to_s + ":" + $3.to_s + ":" + $4.to_s
frames = ($4.to_i + ($3.to_i * 60) + ($2.to_i * 60 * 60)) * fps
end
if line =~ /frame=(\s.?(\d*))/
progress = $1.to_i/frames.to_i
print "Progress: #{progress}"
end
end
end
0
Спасибо за этот пост, я изменил его немного. Я использую ffmpeg версии 0.10.2. Вот моя версия:
def exec_ffmpeg src_path, dst_path
cmd = "ffmpeg -i \"%s\" -acodec libfaac -ac 2 -ab 128k -vcodec libx264 -threads 0 \"%s\" 2>&1" %
[src_path, dst_path]
puts "%s" % cmd.gsub(/2\>\&1$/,'')
puts "press 'q' to quit"
progress = nil
dur_secs = nil
frame_rate = nil
frames = 0
dur_str = '00:00:00.000'
ostr = ''
ffmpeg = IO.popen(cmd)
ffmpeg.each("\r") do |line|
if dur_secs == nil && line =~ /Duration:\s*(\d*):(\d*):(\d*\.\d*)/
dur_str = $1.to_s + ":" + $2.to_s + ":" + $3.to_s
dur_secs = ($3.to_f + ($2.to_i * 60).to_f + ($1.to_i * 360).to_f)
puts "Video Duration:" + dur_str
end
if frame_rate == nil && line =~ /Stream.+\, (\d+\.{0,1}\d{0,3}) fps\,/
frame_rate = $1.to_f
frames = dur_secs * frame_rate
puts "Total Frames: %i" % frames.to_i
puts "Frame Rate: %.3f fps" % frame_rate
end
if line =~ /frame=(\s.?(\d*))/
cframe = $1.to_i
csecs = 0
if line =~ /time=\s*(\d*):(\d*):(\d*\.\d*)/
csecs = ($3.to_f + ($2.to_i * 60).to_f + ($1.to_i * 360).to_f)
csecs_str = $1.to_s + ":" + $2.to_s + ":" + $3.to_s
elsif line =~ /time=\s*(\d*\.\d*)/
csecs $1.to_f
t = Time.at(csecs).gmtime
csecs_str = "%0.2i:%0.2i:%0.2i.%3i" % [t.hour, t.min, t.sec, t.nsec]
end
if line =~ /fps=\s*(\d*)/
cfps = $1.to_i
else
cfps = 0
end
if line =~ /bitrate=\s*(\d*\.\d*kbits)/
br = $1
else
br = "???"
end
ostr = " %3.2f%% (%s) @frame:%i fps:%i bitrate:%s" %
[((csecs/dur_secs)*100), csecs_str, cframe, cfps, br]
print ostr + ("\b" * (ostr.length + 4))
end
end
print "\n"
end
Смежные вопросы
- 1. Как отслеживать writeObject() Прогресс
- 2. Как отслеживать прогресс в Parallel.ForEach
- 3. Отслеживать прогресс `map`
- 4. Можно ли отслеживать прогресс ObjectContext.SaveChanges?
- 5. Показать прогресс конвертации видео с помощью FFMpeg
- 6. Python: отслеживать прогресс работы с использованием tqdm
- 7. Как отслеживать прогресс запросов в PostgreSQL?
- 8. Android OS - Как отслеживать прогресс загрузки Azure
- 9. Как отслеживать прогресс при использовании Kanban?
- 10. Как отслеживать прогресс в задаче очереди?
- 11. Как отслеживать прогресс итерации с использованием API веб-служб Rally
- 12. Как отслеживать прогресс (JProgressBar) с помощью метода передачи FileChannelsFrom()?
- 13. Есть ли способ отслеживать прогресс на mclapply?
- 14. Android Apache - Загрузить и отслеживать прогресс
- 15. Попытка отслеживать прогресс в этом месяце по сравнению с предыдущим
- 16. загрузить кодировку видео с ffmpeg и прогресс кодирования
- 17. как отслеживать прогресс в mclapply в R в параллельном пакете
- 18. как отслеживать прогресс в угловом вызове службы 2
- 19. Как разобрать прогресс ffmpeg в реальном времени в ruby
- 20. Как отслеживать прогресс Powershell и ошибки в C#?
- 21. Как отслеживать/показывать прогресс во время сортировки по C++
- 22. Как отслеживать прогресс резервного копирования веб-сайта Azure?
- 23. ffmpeg Прогресс сканирования видео во время вытягивания кадра
- 24. отслеживать прогресс пользователя, не требуя входа в систему asp.net mvc
- 25. Можете ли вы отслеживать прогресс загрузки на ASIFormDataRequest?
- 26. module-cloudfiles module - есть способ отслеживать прогресс загрузки
- 27. Как отслеживать прогресс, используя eventHandlers и uploadEventHandlers в angularjs 1.5.5 с $ http или $ ресурсом?
- 28. Как отслеживать прогресс в многостраничной загрузке на s3 с помощью Go?
- 29. Как я могу отслеживать прогресс пользователя сочлененной презентации (SCORM/TinCan) с помощью php
- 30. Установить прогресс прогресс бар
В итоге я написал драгоценный камень: https://github.com/owahab/paperclip-ffmpeg –