相关疑难解决方法(0)

在Android上使用FFmpeg

我在Android上编译了FFmpeg(libffmpeg.so).现在我必须构建像RockPlayer这样的应用程序或使用现有的Android多媒体框架来调用FFmpeg.

  1. 你有关于在Android/StageFright上集成FFmpeg的步骤/程序/代码/示例吗?

  2. 您能否指导我如何使用此库进行多媒体播放?

  3. 我有一个要求,我已经有音频和视频传输流,我需要将其提供给FFmpeg并进行解码/渲染.我怎么能在Android上这样做,因为IOMX API是基于OMX的,不能在这里插入FFmpeg?

  4. 另外,我找不到需要用于播放的FFmpeg API的文档.

android ffmpeg stagefright android-ffmpeg

202
推荐指数
6
解决办法
15万
查看次数

如何使用FFmpeg从图像创建视频?

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)

ffmpeg image slideshow

132
推荐指数
4
解决办法
27万
查看次数

如何使用FFMPEG分割视频,以便每个块以关键帧开始?

我们需要将大型实时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)

等等...

video split ffmpeg keyframe

33
推荐指数
5
解决办法
5万
查看次数

FFmpeg concat视频和音频不同步

使用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)

audio video ffmpeg concatenation

22
推荐指数
3
解决办法
1万
查看次数

在关键帧之间剪切视频而不使用 ffpmeg 重新编码完整视频?

我想在任何特定时间戳的开头剪切视频,并且需要精确,因此最近的关键帧不够好。

此外,这些视频相当长——一个小时或更长时间——所以如果可能的话,我想避免完全重新编码,或者只重新编码总持续时间的一小部分。因此,想最大限度地利用-vcodec copy.

我怎样才能做到这一点ffmpeg

注意:请参阅方案以及我自己对以下可能解决方案的粗略想法。


设想:

  • 原始视频
    • 1:00:00 时长
    • 每 10 秒有一个关键帧
  • 想要的剪裁:
    • 从 0:01:35 到结束
  • 尝试#1:
    • 使用-ss 0:01:35 -i blah.mp4 -vcodec copy,结果是一个文件,其中:
    • 音频从 0:01:30 开始
    • 视频也从 0:01:30 开始
    • 这太早开始了音频和视频
  • using -i blah.mp4 -ss 0:01:35 -vcodec copy,结果是一个文件,其中:
    • 音频从 0:01:35 开始,
    • 但视频在前 5 秒是空白/黑色,
      • 直到 0:01:40,当视频开始时
    • 这会按时启动音频,但视频启动太晚了

粗略的想法

  • (1) 切 0:01:30 到 0:01:40
    • 重新编码它以获得新的关键帧,包括目标时间 0:01:35 的关键帧
    • 然后剪下这个以获得从 0:01:35 到 0:01:40 的 5 秒
  • (2) 从 0:01:40 切到最后
    • 无需重新编码,使用 …

audio video ffmpeg

7
推荐指数
1
解决办法
1682
查看次数

使用ffmpeg在python中获取视频持续时间

我在我的电脑上使用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)

如果问题有些基本,请道歉.我所需要的只是能够迭代一组视频文件并获得他们的开始时间和结束时间.

谢谢!

python video ffmpeg

6
推荐指数
3
解决办法
7855
查看次数

如何在不使用 FFMPEG 重新编码的情况下在精确位置修剪视频文件

我无法在不导致视频/音频不同步的情况下修剪视频文件。据我了解,-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 可以在修剪时处理这样的精度吗?

谢谢你的时间。

android ffmpeg android-mediacodec

5
推荐指数
0
解决办法
4972
查看次数

每30秒就是切一个视频3s

我有一个30分钟的视频。我想每 30 秒跳过 3 秒。并继续到视频的结尾。它将所有 30 秒的视频连接在一起示例:00:00:00 到 00:30:00 + 00:33:00 到 00:63:00 + 00:66:00 到 00:96:00 ..... 所以结尾视频太多了,请帮我写一下

ffmpeg

3
推荐指数
1
解决办法
2117
查看次数