- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 ffmpeg 从水下调查视频中提取帧。提取的帧应在该过程稍后基于时间戳与 GPS 位置合并。我用来提取帧的代码是:ffmpeg -i GOPR0173.MP4 -qscale:v 2 -r 1 frames/%4d.jpg
.
我需要一个解决方案来根据调查日期时间获取帧的实际时间戳,以便帧的时间戳等于创建视频时的实际时间。理想情况下,时间戳保存在图像 exif 中,或者如果这不可能在单独的文本文件中,则时间戳用作文件的名称,例如 2020_01_01_HH_MM_SS.jpg。
我的想法是使用视频的 creation_time 将帧的时间戳添加到此并将结果存储在提取帧的 exif 中,或者如果这在 txt 文件中是不可能的。
我是 ffmpeg 的新手,真的迷路了,如果能帮助解决这个任务,我将不胜感激!
如果有人能给我提供必要的代码,那就太棒了!
C:\Unterwasserfotos>ffmpeg -i GOPR0173.MP4 -vstats -qscale:v 2 -r 0.1 frames/%4d.jpg
ffmpeg version git-2020-01-21-fc6fde2 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.2.1 (GCC) 20200122
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls
--enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enabl
e-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-
libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwol
ame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enab
le-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable
-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable
-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enabl
e-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 38.100 / 56. 38.100
libavcodec 58. 66.100 / 58. 66.100
libavformat 58. 35.104 / 58. 35.104
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 71.100 / 7. 71.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'GOPR0173.MP4':
Metadata:
major_brand : mp41
minor_version : 538120216
compatible_brands: mp41
creation_time : 2020-01-21T12:33:10.000000Z
firmware : HD4.02.05.00.00
Duration: 00:02:21.85, start: 0.000000, bitrate: 30152 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR
1:1 DAR 16:9], 30000 kb/s, 50 fps, 50 tbr, 90k tbn, 100 tbc (default)
Metadata:
creation_time : 2020-01-21T12:33:10.000000Z
handler_name : GoPro AVC
encoder : GoPro AVC encoder
timecode : 12:33:11:16
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (defa
ult)
Metadata:
creation_time : 2020-01-21T12:33:10.000000Z
handler_name : GoPro AAC
timecode : 12:33:11:16
Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default)
Metadata:
creation_time : 2020-01-21T12:33:10.000000Z
handler_name : GoPro TCD
timecode : 12:33:11:16
Stream #0:3(eng): Data: none (fdsc / 0x63736466), 12 kb/s (default)
Metadata:
creation_time : 2020-01-21T12:33:10.000000Z
handler_name : GoPro SOS
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'frames/%4d.jpg':
Metadata:
major_brand : mp41
minor_version : 538120216
compatible_brands: mp41
firmware : HD4.02.05.00.00
encoder : Lavf58.35.104
Stream #0:0(eng): Video: mjpeg, yuvj420p(pc), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s,
0.10 fps, 0.10 tbn, 0.10 tbc (default)
Metadata:
creation_time : 2020-01-21T12:33:10.000000Z
handler_name : GoPro AVC
timecode : 12:33:11:16
encoder : Lavc58.66.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
frame= 16 fps=0.3 q=2.0 Lsize=N/A time=00:02:40.00 bitrate=N/A dup=0 drop=7076 speed=3.26x
video:1938kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown´´´
最佳答案
这是我的任务的解决方案。核心组件是一个很好的批处理脚本(见下文),我发现并采用了我的需要。
@echo off
rem Ksheesh Geotag Video Frames 0.0.1
rem
rem Extract frames from video every X seconds and geotag them using GPS data file.
rem Requires exiftool and ffmpeg.
rem Copyright (c) 2017 krzysiu.net
rem
rem Permission is hereby granted, free of charge, to any person obtaining a copy
rem of this software and associated documentation files (the "Software"), to deal
rem in the Software without restriction, including without limitation the rights
rem to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
rem copies of the Software, and to permit persons to whom the Software is
rem furnished to do so, subject to the following conditions:
rem
rem The above copyright notice and this permission notice shall be included in all
rem copies or substantial portions of the Software.
rem
rem THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
rem IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
rem FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
rem AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
rem LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
rem OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
rem SOFTWARE.
setlocal EnableDelayedExpansion
rem Config starts here. Remember:
rem * Paths and names: don't use quotes, even if it has spaces in the string.
rem * Binaries: if they are in shared path, you may set just the binary name,
rem i.e. "ffmpeg" (without quotes) for ffmpegBin variable.
rem Input video file
set videoFile=GOPR0173.MP4
rem Prefix which will be added to image file names
set framePrefix=frame_
rem Output directory for frame images (must exist; without trailing slash)
set outputDirectory=%cd%
rem Path to ffmpeg binary.
set ffmpegBin=ffmpeg.exe
rem Path to exiftool binary.
set exiftoolBin=exiftool.exe
rem Padding digit count (1-9) in frame file names (i.e. 3 will make 001.jpg and 2 will make 01.jpg)
set paddingDigits=4
rem Get frame every X seconds.
set getFrameEvery=1
rem Date and time of the start of the video. You may use:
rem * DateTimeOriginal - if the file has DateTimeOriginal tag
rem * FileCreateDate - set timestamp to file creation date
rem * FileModifyDate - set timestamp to file modify date
rem * 0 - own timestamp (see videoTimestamp variable)
set dateSource=0
rem If dateSource is set to 0, set here date and time of the start of the video.
rem The format is yyyy:mm:dd hh:mm:ss
set videoTimestamp=2020:01:21 13:28:33
rem The source of GPS data, i.e. GPX or other supported file. Wildcards are also
rem possible, e.g. gpsDataFile=c:\gps_data\*.gpx
set gpsDataFile=2020-01-21_gps.gpx
rem Config ends here.
set exifDateParam=-tagsFromFile "%videoFile%" "-datetimeoriginal<%dateSource%"
if %dateSource% equ 0 set exifDateParam="-datetimeoriginal=%videoTimestamp%Z"
if not exist "%outputDirectory%" (
set errMsg=Can't access output directory ^(%outputDirectory%^)
goto error
)
if not exist "%videoFile%" (
set errMsg=Can't access video file ^(%videoFile%^)
goto error
)
pushd %outputDirectory%
echo Extracting frames...
%ffmpegBin% -loglevel error -hide_banner -stats -i "%videoFile%" -qscale:v 2 -vf fps=fps=1/%getFrameEvery%:start_time=0:round=zero %framePrefix%%%0%paddingDigits%d.jpg
if %errorlevel% neq 0 (
set errMsg=ffmpeg returned error
goto error
)
echo Done!
echo.
echo Setting base timestamp to files.
set fileNumber=0
%exiftoolBin% %exifDateParam% -overwrite_original -globaltimeshift "+0:0:0 0:0:!timeShift!" "%framePrefix%*.jpg"
echo Done!
echo.
echo Setting timestamp offsets.
for %%f in ("%framePrefix%*.jpg") do (
set /a "timeShift=!fileNumber!*%getFrameEvery%"
if !fileNumber! neq 0 %exiftoolBin% -P -m -overwrite_original "-datetimeoriginal+=0:0:0 0:0:!timeShift!" "%%~nxf"
set /a "fileNumber=!fileNumber!+1"
)
echo Done!
echo.
goto theend
:error
echo %errMsg%. Exitting.
:theend
pause
popd
endlocal
关于ffmpeg 提取帧并根据 exif 或 txt 中每个提取帧的创建时间获取时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865863/
我正在使用 exiv2操作 jpeg 文件中的元数据。我需要将更多与图像处理相关的信息写入元数据中。除了标准标签之外,是否可以创建自定义 Exif 标签? 最佳答案 来自 http://www.exi
是否可以检测是否有人修改了照片中的 EXIF 数据?有人如何检测到 EXIF 数据已被修改? 最佳答案 参见 Can digital cameras sign images to prove auth
如上图所示,我选择拍照exif信息为空。我选择了来自手机的图像选项,但 exif 信息不为空。 最佳答案 现在可以通过 ExifInterface 支持库从流中读取 EXIF 数据。 compile
我想使用iphone-exif library我的项目中的 EXIF 数据。但我不知道我是否犯了任何错误,它给出了像 这样的错误 架构 i386 的 undefined symbol : “_OBJC
场景:几个人带着数码相机一起去度假,然后抓拍。有些人记得将他们的相机时钟调整为本地时间,有些人将它们留在家乡时间,有些人将它们留在他们出生国家的本地时间,还有一些人将他们的相机留在工厂时间。 问题:照
如何加载图像并根据它的方向 exif 数据旋转它并使用UIImageOrientationUp exif 数据(或没有任何方向)保存它exif 数据)以便不处理 exif 方向数据的软件将正确显示图像
PHP 版本 5.2.9 我想知道是否有人在使用 EXIF 2.3 的 PHP 的 exif_read_data() 提取 GPS 或什至只是提取所有 EXIF 数据时遇到问题(并可能找到解决方案)。
我试图了解 jpeg 文件(十六进制)的 EXIF header 部分以及如何理解它,以便我可以提取数据,特别是 GPS 信息。无论好坏,我都在使用 VB.Net 2008(对不起,这是我现在可以掌握
我喜欢遵循此处描述的简码约定:https://laurakalbag.com/processing-responsive-images-with-hugo/并像这样在 config.toml 中设置
有谁知道 EXIF 键名的一个很好的解释?我正在写一个照片组织者,并希望尽可能多地从照片中获取信息。 但是,EXIF 键名并不是很有帮助。例如,据我所知(通过从 iPhoto 导出图像) 专辑或集合名
我正在研究照片查看器。在这种情况下,我编写了一个小类来读取和使用一些 EXIF 数据,例如图像方向。这门课很适合阅读。 但是,我会添加一个新选项来旋转照片。我想旋转和写入照片数据本身,而不仅仅是重写方
我是 PHP 新手,正在改编来自 http://www.techrepublic.com/article/create-a-dynamic-photo-gallery-with-php-in-thre
我正在使用我正在拍摄的照片中的 iPhone EXIF 数据。 目前我得到的 EXIF 数据是: { ApertureValue = "2.970854"; ColorSpace =
我有一堆带有地理标记的图片,我正在使用 pyexiv2 在 python 中访问它们。它工作得很好,只是我不明白“GPSImgDirection”值给出了什么。基本上,它是两个很大的数字,例如: 21
在Python中,如何找出图像文件中EXIF标签的位置?我假设它位于文件的开头,但我有一些专有的图像格式,并且希望确保情况始终如此。谢谢。 最佳答案 这不仅取决于 EXIF 本身,还取决于文件类型。
我正在尝试从 DNG 文件(不是缩略图)获取 jpg 预览。据我所知,预览只是一个 exif 预览,并不特定于 DNG。然而,尽管我在谷歌上搜索了很多次,但我找不到任何关于专门从 c# 文件的 exi
我正在使用这个库 http://blog.nihilogic.dk/2008/05/reading-exif-data-with-javascript.html .我这样调用库:EXIF.pretty
我需要访问已加载到页面上的图像中的 EXIF 数据。说,从浏览器扩展。 AFAIU,有一些 javascript 方法可以完成任务: 使用JavaScript-Load-Image ; 使用Nihol
我有一个 iOS 应用程序,用户可以在其中上传使用 UIImagePickerController 拍摄的照片。 当我查看 jpg exif 数据时,我注意到大量照片的“相机型号名称”中填写了“iPo
我想在特定相册中保存一些带有图像的字符串。所以我使用了[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{添加 Assets 。 但是当我从相册
我是一名优秀的程序员,十分优秀!