我正在尝试将 .mov 转换为 .gif,但没有成功。
这是错误:
ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay
libavutil 51. 54.100 / 51. 54.100
libavcodec 54. 23.100 / 54. 23.100
libavformat 54. 6.100 / 54. 6.100
libavdevice 54. 0.100 / 54. 0.100
libavfilter 2. 77.100 / …Run Code Online (Sandbox Code Playgroud) 如何使用ffmpeg使用音频文件替换视频文件中的音频?
我想象命令看起来像:
ffmpeg -i v.mp4 -i a.wav -MAGIC video-new.mp4
Run Code Online (Sandbox Code Playgroud)
这与如何用多个音频流替换视频文件中的音频流非常相似?但是这个问题处理多个音轨,这使它变得非常复杂,使得不清楚解决方案的哪一部分足以进行简单的音频交换。
是否可以ffmpeg从一组序列创建视频,其中数字不是从零开始?
例如,我有一些图像 [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg],我想将它们转换为视频。我尝试了以下命令,但没有用(似乎数字应该从零开始):
ffmpeg -i test_%d.jpg -vcodec mpeg4 test.avi
有什么建议吗?
如何以秒为单位获得视频时长?
我试过的:
ffmpeg -i file.flv 2>&1 | grep "Duration"
Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s
mediainfo file.flv | grep Duration
Duration : 39mn 43s
Run Code Online (Sandbox Code Playgroud)
这是什么接近,但它不是那么准确,2383 是 39.71 分钟
ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'
2383
Run Code Online (Sandbox Code Playgroud) FFmpeg 可以从视频中捕获图像,这些图像可以用作缩略图来表示视频。在FFmpeg Wiki中捕获了最常见的方法。
但是,我不想在某些时间间隔内选择随机帧。我发现了一些在 FFmpeg 上使用过滤器来捕捉场景变化的选项:
过滤器thumbnail试图找到视频中最具代表性的帧:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
Run Code Online (Sandbox Code Playgroud)
并且以下命令仅选择与之前相比具有超过 40% 变化的帧(因此可能是场景变化)并生成 5 个 PNG 的序列。
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
Run Code Online (Sandbox Code Playgroud)
以上命令的信息归功于Fabio Sonnati。第二个看起来更好,因为我可以得到 n 个图像并选择最好的。我试过了,它生成了 5 次相同的图像。
更多的调查使我:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
Run Code Online (Sandbox Code Playgroud)
-vsync vfr确保您获得不同的图像。这仍然总是选择视频的第一帧,在大多数情况下,第一帧是署名/标志并且没有意义,所以我添加了一个-ss3 来丢弃视频的前 3 秒。
我的最终命令如下所示:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
Run Code Online (Sandbox Code Playgroud)
这是我能做的最好的事情。我注意到,由于我只挑选了5个视频,所有视频都来自视频的开头,可能会错过视频后面出现的重要场景。
我想为任何其他更好的选择挑选你的大脑。
如何将视频文件转换为一系列图像,例如每 N 秒一帧。mplayer 或 ffmpeg 可以做到这一点吗?我已经使用 MPlayer 手动抓取屏幕截图,但我想为长视频自动执行此操作。
从我所见,在我看来,Libavavconv被认为是继任者ffmpeg——这是正确的吗?
如果这是真的,为什么会这样?libav 究竟在什么方面做得更好,为什么我要选择它而不是 ffmpeg?
我在 VM 中安装 Ubuntu 12.04.1 LTS 时遇到了这个“问题”,当我安装 ffmpeg 时,它出现了一条消息,告诉 mit ffmpeg 已被弃用,我首先想到的是“wtf?”。
如果我使用avconv我是否能够根据 ffmpeg 或多或少地轻松地将我的脚本迁移到 libav?我主要用它来编写元数据和进行音频转换(wav、flac、vorbis、mp3、aac)。
我有一个 html 5 视频播放器,宽 700 像素,高 400 像素。我试图用avconv使用ffmpeg确保它符合我的播放器来调整(同时保留宽高比)和决策。
输入可以是任何大小的文件,所以我需要调整较大的文件的大小,但用黑条将较小的文件居中。到目前为止,我已经尝试过:-s和-aspect,我已经看到pad与-vfswitch一起使用,但不明白它是如何工作的,足以获得我需要的东西。

这是我需要什么的粗略想法。我不确定这是否可能。这几乎就像 CSS 的 max-width/max-height。我意识到这可能只是一个混乱的词,但如果有人碰巧明白我在说什么,我会很感激帮助,谢谢。
avconv 命令:
avconv -y -i control.avi -vcodec libx264 -b 2000k -bufsize 20M -acodec aac -strict experimental -ar 44100 -ab 256k bigbuck_out.mp4
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 FFmpeg 删除视频的几个部分。
例如,想象一下,如果您在电视上录制了一个节目并想剪掉广告。这对于 GUI 视频编辑器来说很简单;您只需标记要删除的每个剪辑的开头和结尾,然后选择删除。我正在尝试使用 FFmpeg 从命令行执行相同的操作。
我知道如何将单个片段剪切为新视频,如下所示:
ffmpeg -i input.avi -ss 00:00:20 -t 00:00:05 -map 0 -codec copy output.avi
Run Code Online (Sandbox Code Playgroud)
这会剪切一个 5 秒的剪辑并将其另存为新的视频文件,但是我如何做相反的事情并在没有指定剪辑的情况下保存整个视频,以及如何指定要删除的多个剪辑?
例如,如果我的视频可以用 ABCDEFG 表示,我想创建一个由 ACDFG 组成的新视频。