我正在使用 ffmpeg 从视频中提取关键帧。这是命令:
ffmpeg -i test2.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 160x90 -f image2 thumbnails-%02d.jpeg
Run Code Online (Sandbox Code Playgroud)
如何获取视频中提取的每个关键帧的索引?例如,对于第一个 I 帧,索引将为 0,对于第二个 I 帧,索引将为 24,依此类推。
我读过关于使用程序,如一些答案和文章VLC,MPlayer,ffmpeg,等,但没有我见过的方法是“无损”。他们不会捕捉每一帧。我想从视频中提取每一帧作为图像(100% 质量,我不想丢失任何细节),所以理论上可以拍摄这些图像并重新创建视频文件而无法区分原版(当然不包括缺少音频)。
如果我可以指定从中抓取帧的开始和结束时间,则奖励积分,因此我不必事先裁剪视频文件。
我正在开发将mp4文件转换为gifsusing 的android 应用程序ffmpeg。问题是生成的 gif 尺寸很大。另一个问题是,我不能使用其他任何东西ffmpeg(例如imagemagickfor convert,甚至palletes现在)来减少生成的 gif 大小。
这是我正在使用的命令:
ffmpeg -y -i file.mp4 -pix_fmt rgb24 -r 10 -s 320x480 file.gif
那么有没有其他方法可以优化转换?
我犯了一个错误,我需要将视频从 30 fps 重新编码为 24fps,同时保持相同的速度/持续时间。
有谁知道我如何在 FFMPEG 中做到这一点?
我尝试更改 -r 值,这会更改速率,但会更改视频长度。
谢谢
我想更改音频文件的频率。意思是:整个文件应该听起来(比方说)高一个八度或低一个八度。怎么做?使用ffmpeg或其他命令行开源工具会更可取。
我正在使用 ffmpeg 从视频文件中提取音频流:
ffmpeg -i video.mp4 -vn -acodec copy audio.aac
Run Code Online (Sandbox Code Playgroud)
这会产生一个干净的音频文件,但没有任何元数据。
要添加元数据,ffmpeg 有一个命令行选项:
ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.aac
Run Code Online (Sandbox Code Playgroud)
这运行没有错误,但是当使用 ffprobe 检查输出文件时,它根本没有元数据标签。
如果将输出容器更改为 mp4,则可以设置元数据并出现在输出文件中:
ffmpeg -i video.mp4 -vn -acodec copy -metadata title="My Title" audio.mp4
Run Code Online (Sandbox Code Playgroud)
这是有趣的一点;如果我使用 Banshee 编辑现有 .aac 文件的元数据,然后使用 ffmpeg 以相同的方式处理文件,原始元数据将成功复制到新的 .aac 文件。
ffmpeg -i metadata.aac -vn -acodec copy audio.aac
Run Code Online (Sandbox Code Playgroud)
但是,尝试更改元数据无效:
ffmpeg -i metadata.aac -vn -acodec copy -metadata title="My Title" audio.aac
Run Code Online (Sandbox Code Playgroud)
因此,似乎 .aac 容器可以保存元数据,而 ffmpeg 可以将其从输入复制到输出,但在使用复制编解码器时无法更改它。
有没有人知道一种让 ffmpeg 在不重新编码的情况下更改 aac 容器中的元数据的方法?
或者,在处理文件后,我可以使用另一个通用工具来设置元数据吗?
非常感谢。克里斯。
我正在尝试为科学目的提取视频的“每 10 帧中恰好有 1 帧”(即提取 1 ,保留 9 然后重复)。视频为 105 帧,3.5 秒,29.97fps(h.264,.mov,尼康 D3100 出品)。
我已经上传到这里了。
下面的命令应该产生 10 帧,但它只产生 6 个图像。我尝试了不同的场景比例,但它们都没有产生正确的帧数(甚至接近正确)。
vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我是什么问题吗?
FFmpeg 似乎没有完全符合我的目的的命令。下面的命令每秒提取 3 帧,但由于 FPS 不完全是 30(而是 2.97),这不会为我产生正确的结果。
此外,即使使用此命令,FFmpeg 也不会给出正确的帧数。对于 3.5 秒的视频,我预计最多 10 帧,但我得到的是 12 帧!
ffmpeg -i 1.mov -y -an -sameq -r 3 -f image2 -vcodec mjpeg %03d.jpg
Run Code Online (Sandbox Code Playgroud)
我怎样才能达到我想要的?
我有一个 PNG 序列(这里是一个样本),我用 ffmpeg 将其转换为视频:
ffmpeg -r 10 -i image%03d.png -s 1380x720 -c:v libx264 -qscale 10 -r 30
basf_merck_libx264.mp4
Run Code Online (Sandbox Code Playgroud)
使用 VLC,它看起来很漂亮,但在youtube 上我看到的都是灰色的!?为什么?

过了一会儿,会显示一个带有彩色斑点的单杠:

当我将“-pix_fmt yuv420p”添加到命令中时,youtube 会正确显示剪辑。但是我可以选择的最高质量是 480p,为此目的太低了。
ffmpeg 输出
C:\Users\Raffael\Documents\proj>ffmpeg -r 10 -i image%03d.png -s 1380x720 -c:v libx264 -qscale 10 -r 30 basf_merck_libx264.mp4
ffmpeg version N-48785-g2ea3f37 Copyright (c) 2000-2013 the FFmpeg developers
built on Jan 12 2013 20:45:33 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnu
tls --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype …Run Code Online (Sandbox Code Playgroud) 我需要 FFmpeg 来获取音频源并将其重新编码为 16 位 FLAC。
如何强制 16 位 FLAC 输出?
./ffmpeg -i http://7359.live.streamtheworld.com:80/CONTINENTALAAC_SC -vn -ac 1 -ar 16000 -acodec flac -map 0 -f segment -segment_list /flac/out.list -segment_time 00:00:12.00 /flac/out%03d.flac
ffmpeg version N-49622-g127ff88 Copyright (c) 2000-2013 the FFmpeg developers
built on Feb 6 2013 05:11:38 with gcc 4.6 (Debian 4.6.3-1)
configuration: --prefix=/root/ffmpeg-static/32bit --arch=x86_32 --extra-cflags='-m32 -I/root/ffmpeg-static/32bit/include -static' --extra-ldflags='-m32 -L/root/ffmpeg-static/32bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex …Run Code Online (Sandbox Code Playgroud) 我需要创建一个具有两个流(webm 和 mp4)的提要,以便它可以在所有 HTML5 视频播放器上兼容。webm 流完美运行。但是,当尝试访问mp4流时,服务器吐出以下错误:
Sat Mar 9 23:21:54 2013 muxer does not support non seekable output
Run Code Online (Sandbox Code Playgroud)
这是 ffserver.conf 文件中处理 mp4 流的部分:
<Stream channel1.mp4> # Output stream URL definition
Feed feed1.ffm # Feed from which to receive video
Format mp4
# Audio settings
AudioCodec libmp3lame
AudioBitRate 64 # Audio bitrate
# Video settings
VideoCodec libx264
VideoSize 560x320 # Video resolution
VideoFrameRate 25 # Video FPS
AVOptionVideo flags +global_header # Parameters passed to encoder
# (same as ffmpeg command-line parameters) …Run Code Online (Sandbox Code Playgroud)