我想在 webrtc 中使用 IP 摄像头。但是 webrtc 似乎只支持网络摄像头。所以我尝试将 IP 摄像机的流转换为虚拟网络摄像头。
我找到了IP Camera Adapter 之类的软件,但它们不能很好地工作(每秒 2-3 帧,延迟 2 秒),而且它们只能在 Windows 上工作,我更喜欢使用 Linux(如果可能的话)。
我尝试 ffmpeg/avconv:-首先,我用v4l2loopback创建了一个虚拟设备(命令是:)sudo modprobe v4l2loopback。检测到虚拟设备,可以使用如下命令提供视频 (.avi): ffmpeg -re -i testsrc.avi -f v4l2 /dev/video1
- 来自 IP 摄像机的流可rtsp://IP/play2.sdp用于:Dlink DCS-5222L 摄像机。这个流可以被 ffmpeg 捕获。
我的问题是在这两个步骤之间建立链接(接收 rstp 流并将其写入虚拟网络摄像头)。我试过了,ffmpeg -re -i rtsp://192.168.1.16/play2.sdp -f video4linux2 -input_format mjpeg -i /dev/video0但 v4l2 有错误(找不到 v4l2)。
有没有人知道如何将流从 IP 摄像机转换为虚拟摄像机?
我正在使用 FFmpeg 将一些旧的 mpeg4 视频(在 avi 容器中)转码为 h.264。基本上
ffmpeg -i input.avi -c:v libx264 [x264 settings] -c:a libfdk_aac [aac settings] output.mp4
Run Code Online (Sandbox Code Playgroud)
这样做时,会mpeg4发出以下警告
视频使用非标准且浪费的方式来存储 B 帧(“打包 B 帧”)。考虑使用 VirtualDub 或 avidemux 之类的工具来修复它。
我知道我仍然可以成功转码,但是从警告中我不清楚生成的 h.264 视频的质量是否会受到影响。
所以,
鉴于我只关心veryslow输出 h.264 视频的质量(和大小,我想最小化我的移动设备的大小,这就是为什么我也使用预设),我是否应该关心打包的 B-帧?
如果应该,我该如何使用 avidemux 修复它们?(我已经尝试浏览手册。)
我有一个 23.976 fps (24000/1001) 的 mkv (h264) 视频,但我想将其转换为 25fps 而不重新编码和降低质量。我知道 mkvmerge 可以做到(使用选项 --default-duration '0:25fps'),但如果可能的话,我想直接从 ffmpeg 执行根据文档,这应该可以工作:
ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv
Run Code Online (Sandbox Code Playgroud)
但是当我执行它时,我只能获得相同的视频 fps。在 ffmpeg 中执行此操作(如果存在)的正确方法是什么?
我正在尝试在 Debian 9.3 上使用 Nvidia Cuda 支持编译 FFMPEG。参数,我使用的是:
--enable-cuda --enable-cuvid --enable-nvenc --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-gpl --enable-libx264 --disable-x86asm --enable-libx265 --enable-libfdk-aac --enable-nonfree
Run Code Online (Sandbox Code Playgroud)
安装了带有驱动程序的 Nvidia Cuda。当我尝试配置 ffmpeg 时,它说:
ERROR: cuvid requested, but not all dependencies are satisfied: cuda
Run Code Online (Sandbox Code Playgroud)
较新的 ffmpeg 将显示类似的、重新措辞的消息:
ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
Run Code Online (Sandbox Code Playgroud)
我完全不知道为什么我会遇到这个问题,因为我正在ffmpeg我们所有的转码服务器上进行编译。
我只想更改 .mp4 视频文件中的旋转标志。存在许多类似的问题,大多数答案建议使用
ffmpeg -i input.mp4 -map_metadata 0 -metadata:s:v rotate=90 -codec copy output.mp4
Run Code Online (Sandbox Code Playgroud)
我对这些解决方案的问题是,即使它复制了大部分元数据,也会丢失一些部分,并且文件小 700kb。附件是来自 ffprobe 和 exifer 的元数据之前和之后。
另一个奇怪的发现是 ffmpeg rotate=90 命令进行 ccw 旋转,在 ffprobe 中元数据中为 (cw) 270°,但在 displaymatrix 侧数据中为 (ccw)90°。
= equal attributes
* altered attributes
- removed attributes
+ added attributes
Run Code Online (Sandbox Code Playgroud)
*Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\input.mp4':
= Metadata:
* major_brand : avc1
* minor_version : 0
* compatible_brands: avc1isom
= creation_time : 2016-10-29T12:10:41.000000Z
- firmware : HD3.11.03.03
* Duration: 00:00:06.01, start: 0.000000, bitrate: …Run Code Online (Sandbox Code Playgroud) 给定输入视频 ,input.mp4以下命令会生成一个out文件夹,其中包含一堆 HLS 视频片段和m3u8多种分辨率的播放列表文件:
ffmpeg -hide_banner -y -i input.mp4 \
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 800k -maxrate 856k -bufsize 1200k -b:a 96k -hls_segment_filename out/360p_%03d.ts out/360p.m3u8 \
-vf scale=w=842:h=480:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 1400k -maxrate 1498k -bufsize 2100k -b:a 128k …Run Code Online (Sandbox Code Playgroud) 我想将很多视频文件转换为我们公司网站的 Flash 视频。我有一个要求,所有的视频都必须是 360p 格式,所以它们的大小应该是 Nx360。
FFMpeg 使用-s参数将目标分辨率指定为W x H。我不知道W¯¯ IDþ,因为它依赖于源文件的宽高比。如果源为 640x480,目标将为 480x360。如果源为 848x480,目标将为 636x360。
有没有办法用ffmpeg的一些开关来做到这一点?它将保留纵横比,我只会指定目标视频的高度?
我可以通过制作一个程序来轻松解决它,该程序将启动 ffprobe 以获取源视频大小,计算纵横比,然后计算新的宽度。
我需要将视频调整为 640x360(我的手机播放器可以处理的最大值),同时还要保留纵横比,但我也希望视频在小于640x360 时保持不变(毕竟放大它没有意义)。
有没有办法使用 ffmpeg 的命令行来获得这种行为?
我在 Flash Builder(动作脚本 3)中使用 ffmpeg 将视频转换为视频的延时。我已经研究出如何使用 setpts 来执行此操作,但生成的输出文件与输入的长度相同(时间流逝后仅显示最后一帧),我希望根据传递的设置更改持续时间到ffmpeg。
我首先通过命令行尝试以下操作:
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
我想使用 Concat demuxer 将文件与 ffmpeg 连接起来,如本文如何连接(加入、合并)媒体文件中所述。但是,我的文件包含单引号(撇号)。所以我的 concat.list 看起来像这样:
file 'artist's song.mp3'
file 'artist's song 2 .mp3'
Run Code Online (Sandbox Code Playgroud)
如您所见,文件名中间的撇号与 concat 文件的格式冲突。放置反斜杠无济于事,因为 ffmpeg 读取文件名文学并抱怨该文件不存在。作为额外的细节,我在 Windows 7 下使用 ffmpeg 和 cygwin。