标签: avconv

使用avconv在设定的时间从h264视频中获取单帧

我想使用avconv在视频文件的指定时间获取单个图像.

我已经阅读了很多关于libav的内容,认为我知道自己在做什么,但实际上并不知道.

我试过了:

avconv -ss 00:00:01.786 -r 25 -i input_video.h264 -frames 1 output_image.jpg
Run Code Online (Sandbox Code Playgroud)

以及使用t来避免'frames'参数:

avconv -ss 00:00:01.786 -r 25 -i input_video.h264 -t 0.01 output_image.jpg
Run Code Online (Sandbox Code Playgroud)

并在几秒钟内传递而不是使用hh:mm:ss.xxx格式:

avconv -ss 1.786 -r 25 -i input_video.h264 -t 0.01 output_image.jpg
Run Code Online (Sandbox Code Playgroud)

我看到的是当ss设置为0(即'0','00:00:00.000','0.0'等)时,output_image只是视频的第一帧.正如所料.

ss的任何其他值 - 甚至0.0001 - 都会给出视频的最后一帧.

我正在使用Raspbian wheezy repo的最新avconv.这种行为对我来说感觉像是一个错误,但我不知道视频流的其他复杂性是否足以确定.

有谁知道我做错了什么?



奖金问题:我实际上想从同一个视频中获取大量这些图像.将命令串起来之前似乎有效,即:

avconv -ss 1.786 -r 25 -i input_video.h264 -t 0.01 output_image1.jpg 
-ss 3.454 -r 25 -i input_video.h264 -t 0.01 output_image2.jpg
-ss 5.823 -r 25 -i input_video.h264 -t 0.01 output_image3.jpg
-ss …
Run Code Online (Sandbox Code Playgroud)

video ffmpeg raspberry-pi raspbian avconv

5
推荐指数
1
解决办法
4316
查看次数

Ffmpeg,avconv和sameq

我早些时候写过:

ffmpeg -i input.mp4 -sameq output.mp3
Run Code Online (Sandbox Code Playgroud)

...从而从视频文件接收音频.Ffmpeg刚刚取出或将音频转换为具有适当质量的mp3.全部归功于关键:-sameq [使用相同的量化器作为源]

现在在Ubuntu而不是ffmpeg我们有libav和那里(在avcomv的人)我看到没有-sameq键.嗯,这是一个问题:我现在要做什么?..

我现在要做的是获得与原版相同质量的转换音频文件?

PS.-sameq:使用相同的量化器作为源(暗示VBR).

$ man ffmpeg | col -b > ./man_ffmpeg
Run Code Online (Sandbox Code Playgroud)

这个man_ffmpeg在那里:http://pastebin.com/qYxz1M1E

FFMPEG(1)
NAME
   ffmpeg - ffmpeg video converter
SYNOPSIS
   ffmpeg [[infile options][-i infile]]... {[outfile options] outfile}...
...
...
...
-sameq
   Use same quantizer as source (implies VBR).
...
...
...
SEE ALSO
   avplay(1), avprobe(1), avserver(1) and the Libav HTML documentation
AUTHORS
   The Libav developers
2014-02-06
FFMPEG(1)
Run Code Online (Sandbox Code Playgroud)

audio ffmpeg quantization libav avconv

5
推荐指数
1
解决办法
1844
查看次数

avconv mp4到webm libvorbis缓冲区溢出

试图将一堆mp4文件转换为webm.所以我运行以下命令.我用ffmpeg尝试了一个类似的命令.

avconv -i input.mp4 -threads 8 -s 1280x720 -pre libvpx-720p -b 3900k -pass 2 -acodec libvorbis -b:a 128k -ac 2 -f webm -y output/webm
Run Code Online (Sandbox Code Playgroud)

结果是:

    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.32.0
  Duration: 00:01:02.90, start: 0.000000, bitrate: 1649 kb/s
    Stream #0.0(und): Video: mpeg4 (Simple Profile), yuv420p, 640x480 [PAR 4:3 DAR 16:9], 1492 kb/s, PAR 853:640 DAR 853:480, 23.94 fps, 30 tbr, 30 tbn, 30 tbc
    Metadata: …
Run Code Online (Sandbox Code Playgroud)

video mp4 vorbis webm avconv

4
推荐指数
1
解决办法
9206
查看次数

将动画gif转换为linux服务器上的视频,同时保留帧速率

如何在linux服务器上以编程方式将动画gif转换为视频(例如h264 @ mp4)?

我需要这个来处理用户生成的内容,这些内容应该作为几种定义的视频格式输出; 因此,用户可能想要处理动画gif文件.我已经有一套工作的PHP脚本,使用avconv将视频文件转码为特定格式(如vpx @ webm和h264 @ mp4,缩放到特定分辨率),但我需要视频输入.

通常的方法似乎是提取gif的帧然后编码,就像

convert file.gif file%03d.png 
avconv -i file%03d.png file.mp4
Run Code Online (Sandbox Code Playgroud)

但这会丢弃帧速率,由gif文件中的暂停信息决定.可以使用-r定义avconv的帧速率,但是

  • 这不尊重帧之间的暂停,因为它们可以不同(如第一帧100ms暂停,第二帧250ms暂停,第三帧100ms暂停,......)
  • 由于输入来自用户,它甚至可能会有所不同,因为一些GIF可能有5fps而其他的是30fps

我注意到avconv能够自己处理gif,因此可能会尊重正确的暂停,但是当我这样做时(就像在如何将GIF转换为Mp4中所描述的那样可能吗?)

avconv -i file.gif -r 30 file.mp4
Run Code Online (Sandbox Code Playgroud)

avconv只会占用gif的第一帧,而它至少会检测到文件为视频:

Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
  Stream #0.0: Video: gif, pal8, 640x480, 25 tbn
Run Code Online (Sandbox Code Playgroud)

(例如gif'file.gif'有15帧,每帧有100ms暂停=> 1.5s持续时间,循环)

  • 我错过了什么?什么出错了?
  • 这个用例可能有更好的工具吗?
  • 什么是大型网站,例如9gag用于将上传的GIF转码为视频?

linux video ffmpeg video-processing avconv

4
推荐指数
1
解决办法
6247
查看次数

在avconv中淡出(out)音频

我正在尝试剪切和淡出mp3文件的最后4秒:

avconv -i SPEX_pilot_02.mp3 -t 0:0:25 -filter:a fade=t=out:st=21:d=4 preteach-words.mp3
Run Code Online (Sandbox Code Playgroud)

没有错误,但没有应用淡出效果.):

我的版本是avconv 0.8.10-6:0.8.10-0ubuntu0.13.10.1

avconv -filters | grep fade 给我

fade             Fade in/out input video
Run Code Online (Sandbox Code Playgroud)

官方LibAV文档中,淡入淡出过滤器仅列在视频过滤器部分中,并使用帧作为参数.

mp3 fadeout avconv

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

如何从 python 中的音频/视频文件中提取元数据和比特率信息

我想做的是从音频或视频文件中获取元数据并将其保存到数据库记录中,到目前为止,唯一的方法似乎是使用子进程将 AVCONV 保存到文件中。打开调用然后读取该文件,是有没有库可以做到这一点以节省一些步骤?我找不到使用 Pydub 或 PySox 来完成此操作的方法。这是我使用的简单粗暴的初学者代码,它确实有效,并将比特率、持续时间等信息放入变量audio_info中,并将元数据放入元数据中。OGG 输出的工作方式与我测试的其他格式不同(这是大量的视频和音频!)。

    try:
            p = subprocess.Popen(["avconv" , "-i" , music_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            out, err = p.communicate()
            retcode = p.wait()
    except IOError,e:
            pass
    extension = uploaded_music_file[-3:]
    if "ogg" not in [err , extension]:
            if "Metadata:" in err:
                    list = err.split("Metadata:")
                    holder = list[1].split("Duration:")
                    metadata = holder[0]
                    audio_info = holder[1].replace("At least one output file must be specified","")
                    print metadata
                    print audio_info
            else:
                    list = err.split("Duration:")
                    audio_info = list[1].replace("At least one output file must be specified","")
                    print …
Run Code Online (Sandbox Code Playgroud)

python avconv pydub

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

来自视频文件的无限流(循环中)

有没有办法如何h264从视频文件(例如mp4,AVI,...)创建无限流.我想使用ffmpeg将avi文件转码为h264但是没有loop输出选项.

video ffmpeg video-streaming avconv

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

使用生成器时设置matplotlib动画的持续时间

如何在将matplotlib动画保存到文件时指定持续时间?通常它将由frame参数给出animation.FuncAnimation(),但不是在使用生成器来创建动画的帧时.例如,使用这个例子

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def simData():
    t_max = 10.0
    dt = 0.05
    x = 0.0
    t = 0.0
    while t < t_max:
        x = np.sin(np.pi*t)
        t = t + dt
        yield x, t

def simPoints(simData):
    x, t = simData[0], simData[1]
    time_text.set_text(time_template%(t))
    line.set_data(t, x)
    return line, time_text

fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([], [], 'bo', ms=10)
ax.set_ylim(-1, 1)
ax.set_xlim(0, 10)
time_template = …
Run Code Online (Sandbox Code Playgroud)

python animation matplotlib avconv

2
推荐指数
1
解决办法
1386
查看次数

如何使用avconv/ffmpeg获取H264文件的持续时间/比特率

执行avprobe test.h264输出

Input #0, h264, from 'test.h264':
  Duration: N/A, bitrate: N/A
    Stream #0.0: Video: h264 (High), yuv420p, 720x480, 25 fps, 25 tbn, 50 tbc
Run Code Online (Sandbox Code Playgroud)

执行file test.h264输出

test.h264: JVT NAL sequence, H.264 video @ L 30
Run Code Online (Sandbox Code Playgroud)

请注意,文件没有损坏或损坏,我可以在VLC上播放它没有任何问题.

有没有办法从原始的H264文件中获取持续时间和比特率?我在某处读到如果我首先解码文件可能是可能的,但我不确定如何做到这一点.

编辑#1

我是那个用Python库创建H264文件的人picamera.

编辑#2

运行时控制台输出 avconv -i test.h264 -f null -

avconv version 11.7-6:11.7-1~deb8u1+rpi1, Copyright (c) 2000-2016 the Libav developers
  built on Jun 17 2016 02:13:49 with gcc 4.9.2 (Raspbian 4.9.2-10)
[h264 @ 0x1bcc200] Estimating duration from bitrate, …
Run Code Online (Sandbox Code Playgroud)

ffmpeg h.264 ffprobe avconv avprobe

2
推荐指数
1
解决办法
3954
查看次数

异步运行PHP exec(),但检查完成?

我正在编写一个包含用户上传视频的网站后端.为了确保最大程度的可访问性,我正在压缩上传的视频,并将它们重新保存为.mp4和.webm格式,以涵盖所有浏览器(或者尽可能多的浏览器).为此,我在PHP exec()函数中运行avconv命令.

我不想让用户在页面加载之前等待脚本完成,所以我正在异步运行代码.到目前为止,我的代码如下.

exec('bash -c "exec nohup setsid avconv -i ' . $tempPath . ' -c:v libx264 ' . $transpose . ' ' . $newPath . 'mp4 > /dev/null 2>/dev/null &"');
exec('bash -c "exec nohup setsid avconv -i ' . $tempPath . ' -c:v libvpx ' . $transpose . ' ' . $newPath . 'webm > /dev/null 2>/dev/null &"');
Run Code Online (Sandbox Code Playgroud)

除了运行exec功能外,我还将视频保存到数据库并向用户发送电子邮件,感谢他们上传视频.

这就是问题:我希望服务器在视频转换完成之前等待,然后将其添加到数据库并向用户发送电子邮件.基本上,程序流程将是:

用户上传视频.视频放在临时文件夹中.用户被带到感谢页面,表明他们的视频很快就会播出.服务器执行两个avconv命令来转换和压缩视频以供Web使用.完成两次转换后,视频信息将添加到MySQL数据库,电子邮件将发送给用户,并删除原始上传的视频.

它可能只是我对命令行的无知(事实上它几乎肯定是),但我怎么能'排队'这些命令呢?首先进行两次转换,然后调用PHP脚本添加到数据库,然后删除原始视频,同时与原始PHP脚本异步?

编辑:我已尝试使用'&&'运算符排队,如下所示:

exec('bash -c "exec nohup setsid avconv -i ' . $tempPath . ' -c:v libx264 ' . …
Run Code Online (Sandbox Code Playgroud)

php video asynchronous ffmpeg avconv

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