我在Android上编译了FFmpeg(libffmpeg.so).现在我必须构建像RockPlayer这样的应用程序或使用现有的Android多媒体框架来调用FFmpeg.
你有关于在Android/StageFright上集成FFmpeg的步骤/程序/代码/示例吗?
您能否指导我如何使用此库进行多媒体播放?
我有一个要求,我已经有音频和视频传输流,我需要将其提供给FFmpeg并进行解码/渲染.我怎么能在Android上这样做,因为IOMX API是基于OMX的,不能在这里插入FFmpeg?
另外,我找不到需要用于播放的FFmpeg API的文档.
ffmpeg -r 1/5 -start_number 2 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)
这条线工作正常,但我想从另一个文件夹中的图像创建一个视频文件.我的文件夹中的图像名称是:
img001.jpg
img002.jpg
img003.jpg
...
Run Code Online (Sandbox Code Playgroud)
我怎么能从不同的文件夹输入图像文件?例:C:\mypics
我尝试了这个命令,但只ffmpeg生成了带有第一个图像(img001.jpg)的视频.
ffmpeg -r 1/5 -start_number 0 -i C:\myimages\img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud) 我们需要将大型实时WMV视频源分成大小相同的小块.我们创建了一个可以正常工作的脚本,除了一件事:视频块不是以关键帧开始的,所以当播放大多数视频块时,它们不显示任何图像,直到原始视频的关键帧最终到达.
有没有办法让ffmpeg让输出视频以关键帧开始?
以下是我们的命令行现在的样子:
ffmpeg.exe -i "C:\test.wmv" -ss 00:00:00 -t 00:00:05 -acodec copy -vcodec copy -async 1 -y "0000.wmv"
ffmpeg.exe -i "C:\test.wmv" -ss 00:00:05 -t 00:00:05 -acodec copy -vcodec copy -async 1 -y "0001.wmv"
Run Code Online (Sandbox Code Playgroud)
等等...
使用ffmpeg concat连接多个文件似乎导致音频的时间戳或偏移不匹配.我尝试了几个视频,并注意到h.264/MP4的相同问题.
使用concat 和编码视频似乎工作正常.音频保持同步,因为ffmpeg执行完整的转换计算,似乎可以使一切正常.
但是,简单地连接视频而不进行任何转换或编码会导致同步问题缓慢增加.显然,对视频进行编码而不是简单地加入它们将导致信息/质量的损失,所以我宁愿找到解决这个问题的方法.
我已经尝试了几个标志来解决这个似乎基于时间戳的问题.但这些似乎都没有解决问题.
ffmpeg -f concat -fflags +genpts -async 1 -i segments.txt test.mov
ffmpeg -auto_convert 1 -f concat -fflags +genpts -async 1 -i segments.txt -c copy test2.mov
ffmpeg -f concat -i segments.txt -c copy -fflags +genpts test3.mp4
ffmpeg -f concat -fflags +genpts -async 1 -i segments.txt -copyts test4.mov
ffmpeg -f concat -i segments.txt -copyts test5.mov
ffmpeg -f concat -i segments.txt -copyts -c copy test6.mov
ffmpeg -f concat -fflags +genpts -i segments.txt -copyts …Run Code Online (Sandbox Code Playgroud) 我想在任何特定时间戳的开头剪切视频,并且需要精确,因此最近的关键帧不够好。
此外,这些视频相当长——一个小时或更长时间——所以如果可能的话,我想避免完全重新编码,或者只重新编码总持续时间的一小部分。因此,想最大限度地利用-vcodec copy.
我怎样才能做到这一点ffmpeg?
注意:请参阅方案以及我自己对以下可能解决方案的粗略想法。
设想:
-ss 0:01:35 -i blah.mp4 -vcodec copy,结果是一个文件,其中:-i blah.mp4 -ss 0:01:35 -vcodec copy,结果是一个文件,其中:
粗略的想法
我在我的电脑上使用pip ffprobe命令安装了ffprobe,并从这里安装了ffmpeg .
但是,我仍然无法运行此处列出的代码.
我尝试使用以下代码失败.
SyntaxError:第12行的文件GetVideoDurations.py中的非ASCII字符'\ xe2',但未声明编码; 有关详细信息,请参阅 http://python.org/dev/peps/pep-0263/
有谁知道什么是错的?我没有正确引用目录吗?我是否需要确保.py和视频文件位于特定位置?
import subprocess
def getLength(filename):
result = subprocess.Popen(["ffprobe", "filename"],
stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
return [x for x in result.stdout.readlines() if "Duration" in x]
fileToWorkWith = ?'C:\Users\PC\Desktop\Video.mkv'
getLength(fileToWorkWith)
Run Code Online (Sandbox Code Playgroud)
如果问题有些基本,请道歉.我所需要的只是能够迭代一组视频文件并获得他们的开始时间和结束时间.
谢谢!
我无法在不导致视频/音频不同步的情况下修剪视频文件。据我了解,-ss在输入文件之前或之后使用 seek 参数会导致两种不同的行为。例如:
ffmpeg -ss 00:00:00.600 -i in.mp4 -c copy out.mp4
Run Code Online (Sandbox Code Playgroud)
这会产生具有准确 A/V 同步但粗略的音频修剪的修剪(修剪发生在视频关键帧而不是精确的搜索值)
ffmpeg -i in.mp4 -ss 00:00:00.600 -c copy out.mp4
Run Code Online (Sandbox Code Playgroud)
这会产生更准确的音频修剪,但会导致 A/V 不同步。修剪位置之后的帧取决于修剪位置之前的帧。这些帧被分配负时间戳并复制到输出文件,这会导致视频在播放期间与音频不同步。
另一方面,
ffmpeg -i "in.mp4" -ss 00:00:00.600 -strict -2 out.mp4
Run Code Online (Sandbox Code Playgroud)
这会产生更精确的修剪和 A/V 同步。修剪任务需要很长时间才能运行并导致质量损失。
我的问题是:有没有办法在不重新编码视频的情况下获得准确的修剪?可能是通过在开头丢弃导致 A/V 不同步的额外帧。就我而言,只要在精确位置修剪音频并保留 A/V 同步,我就可以在开始时忍受一些黑帧。是否可以使用 FFMPEG 来完成此操作?如果没有,Android 上的 MediaCodec 可以在修剪时处理这样的精度吗?
谢谢你的时间。
我有一个30分钟的视频。我想每 30 秒跳过 3 秒。并继续到视频的结尾。它将所有 30 秒的视频连接在一起示例:00:00:00 到 00:30:00 + 00:33:00 到 00:63:00 + 00:66:00 到 00:96:00 ..... 所以结尾视频太多了,请帮我写一下