我寫軟件C/C++來恢復刪除的文件,我需要根據它們的二進制內容來識別文件,所以我的問題是有一種簡單的方法來知道某個文件是否是H.264格式的視頻? H.264是否有簽名?如何分析文件並檢測文件是否爲H.264視頻格式?
我看到FFMPEG here的代碼,但它可以幫助我,怎麼樣?
我寫軟件C/C++來恢復刪除的文件,我需要根據它們的二進制內容來識別文件,所以我的問題是有一種簡單的方法來知道某個文件是否是H.264格式的視頻? H.264是否有簽名?如何分析文件並檢測文件是否爲H.264視頻格式?
我看到FFMPEG here的代碼,但它可以幫助我,怎麼樣?
問題是,H.264不是一種文件格式,它是一種視頻壓縮標準,因此它可以在多種文件格式中找到。您可以使用H.264編碼的.f4v編碼,儘可能使用H.264編碼.mp4。
那麼,你如何解決你的問題?那麼,我強烈建議你使用一個能爲你做到的庫。例如,libavformat應該這樣做(檢查AVStream
和AVFormatContext
結構,以及avformat_open_input
函數)。
現在,如果您絕對想要不使用庫,您可以查看支持H.264的each video container format的文檔以瞭解如何檢索視頻流的編碼信息,但希望這會使您至少一個月或兩個月。
我使用Visual Studio工作,無法編譯'libavformat',你知道一個解決方案嗎? – codeDom
不幸的是,我找不到可用於Visual Studio的二進制文件,但FFmpeg的編譯人員用Visual Compiler編譯了一個[wiki文章](https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC)。如果這不能實現,我想你也可以使用另一個庫,但不幸的是我不知道其他庫。我認爲[libVLC](http://www.videolan.org/vlc/libvlc.html)最終可以做你想做的,但不要在此引用我的意思。 – blue
如果你想使用FFmpeg - avformat_find_stream_info()
應該可以幫到你。 there就是一個例子。
對於那些誰遇到這樣的問題,但正在尋找一個CLI解決方案,您可以使用ffprobe
:
ffprobe -loglevel error -select_streams v -show_entries stream=codec_name -of default=nw=1:nk=1 input.mkv
輸出:
h264
ffprobe可以幫助你。 – Shark
@Shark我如何使用FFMPEG我應該使用什麼函數?你可以指導我更多的細節? – codeDom