我希望能夠記錄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