小编Jam*_*ewp的帖子

视频中的帧在提取后颠倒

我的问题是,当我使用 opencv 将视频提取到帧中时,有时我得到的帧会翻转,这发生在我的机器(窗口)和 VM(ubuntu)但我测试的一些视频中,帧不翻转。所以,我想知道应该在我的代码中更改/添加什么因素或什么来使提取物固定而不翻转

def extract_frame(video,folder):
   global fps

   os.mkdir('./green_frame/{folder}/'.format(folder=folder))
   vidcap = cv2.VideoCapture(video)
   success,image = vidcap.read()
   fps = vidcap.get(cv2.CAP_PROP_FPS)
   count = 0
   success = True
   while success:  #os.path.join(pathOut,(name+'.png'))
      cv2.imwrite(os.path.join('./green_frame/{folder}/'.format(folder=folder),"frame%d.png" % count), image)
      success,image = vidcap.read()
      print('Read a new frame: ', success) 
      count += 1
Run Code Online (Sandbox Code Playgroud)

这是我从这段代码中得到的框架示例。 翻动 我使用的原始视频是这样颠倒的:在此处输入图片说明

所以,就我而言,我必须改变什么才能使它不像我的第一张照片那样翻转。它与视频的分辨率或帧率有关吗?我用 1280x720 分辨率的视频进行了测试,提取的所有帧都颠倒了,但是来自具有 568x320 分辨率的视频的帧是正常的

谢谢

编辑:所以,我查看了视频的信息,我发现在元数据中,它对提取到倒置帧的视频进行了 180 度旋转 在此处输入图片说明 但是当我检查产生非倒置帧的普通视频时,它没有旋转:180 在此处输入图片说明

因此,从这里开始,我该如何处理具有旋转功能的视频?

python video-processing opencv3.0

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

将 DataFrame 加载到 BigQuery 表时出错(pyarrow.lib.ArrowTypeError:<class 'str'> 类型的对象无法转换为 int)

我在 GCS 中存储了一个 CSV 文件,我想将其加载到 BigQuery 表中。但我需要先进行一些预处理,所以我将其加载到 DataFrame,然后加载到 BigQuery 表

import pandas as pd
import json 
from google.cloud import bigquery


cols_name_list = [....]. # column name in order
uri = "gs://<bucket>/<path>/<csv_file>"
df = pd.read_csv(uri, dtype="string")
df =df.reindex(columns=cols_name_list)

client = bigquery.Client()
job_config = bigquery.LoadJobConfig(
   ... # added all schema field according to table column type
)

job = client.load_table_from_dataframe(
    df, "<bq_table_id>", job_config=job_config
)
job.result()
Run Code Online (Sandbox Code Playgroud)

从上面的代码中,我对数据帧列顺序进行了重新排序,以与 BigQuery 表中的顺序相匹配(不确定这是否重要),并将所有列转换为字符串类型。

我收到此错误,如下所示

pyarrow.lib.ArrowInvalid: Could not convert '47803' with type str: tried to convert to int …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas google-bigquery pyarrow

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

写入视频后视频比特率降低

我正在尝试编写一个 python 函数,使用 moviepy 将一个视频中的视频添加到另一个视频(没有声音)。首先,我尝试了

clip = mpe.VideoFileClip(video-to-add-sound.mp4)
clip = clip.set_audio(mpe.AudioFileClip(video-that-has-sound.mp4))
Run Code Online (Sandbox Code Playgroud)

这没有任何作用。所以,我意识到我没有 write_videofile 来剪辑所以,我创建了一个函数

def addAudioBack(original_vid, processed_vid):

    clip = mpe.VideoFileClip(processed_vid)
    clip = clip.set_audio(mpe.AudioFileClip(original_vid))
    clip.write_videofile(processed_vid,codec='libx264')
Run Code Online (Sandbox Code Playgroud)

它将把original_vid 中的音频添加到processed_vid 中,并将旧的processed_vid 覆盖到具有orignal_vid 中音频的新音频。声音效果很好,但问题是我的视频比特率和数据率正在下降,这使得视频质量看起来更差。我尝试添加bitrate='3000k'到最后一行,但它不起作用。原版的速度约为3000kbps,但编辑后的速度降至约300kbps或以下。

附言。我编辑了最后一行,以免覆盖旧文件并写入新文件。比特率提高到大约 900kbps,但我想要的是与我的旧视频具有相似比特率的视频(将添加声音)

那么,我如何根据上述目的编写视频,使其与原始视频具有相同或几乎相同的比特率?

谢谢

python video-processing moviepy

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

如何从 GCS 读取 json gzipped 文件并写入表?

我有一个带有 gzip 文件(.json.gz)的 json 压缩文件,存储在 Google Cloud Storage 的存储桶中,我想在其中读取它并将其复制到 postgres 表中。我的 json.gz 文件只是一个 json 文件,其中没有嵌套对象,如下所示:

\n
[{\n\xe2\x80\x9cdate\xe2\x80\x9d: \xe2\x80\x9c2019-03-10T07:00:00.000Z\xe2\x80\x9d,\n\xe2\x80\x9ctype\xe2\x80\x9d: \xe2\x80\x9cchair\xe2\x80\x9d,\n\xe2\x80\x9ctotal\xe2\x80\x9d: 250.0,\n"payment": "cash"\n},{\n\xe2\x80\x9cdate\xe2\x80\x9d: \xe2\x80\x9c2019-03-10T07:00:00.000Z\xe2\x80\x9d,\n\xe2\x80\x9ctype\xe2\x80\x9d: \xe2\x80\x9cshirt\xe2\x80\x9d,\n\xe2\x80\x9ctotal\xe2\x80\x9d: 100.0,\n"payment": "credit card"\n},{\n.\n.\n}]\n
Run Code Online (Sandbox Code Playgroud)\n

以前,我使用 csv 文件做过类似的工作,在该文件中我可以使用download_as_string函数并将其存储在变量中,并用于StringIO将该变量转换为类似文件的对象,并copy_expert()在查询中使用函数(此链接)。

\n

那么,如何在 GCS 中读取 json.gz 文件并使用 Python 将其写入表中呢?

\n

python postgresql json gzip google-cloud-storage

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

如何在python函数中使用ffmpeg

我曾尝试使用 ffmpeg 从视频文件中提取音频,这是我的代码

import io
import os
import subprocess

def extract_audio(video,output):
    command = "ffmpeg -i '{video}' -ac 1  -f flac -vn '{output}'"
    subprocess.call(command,shell=True)

extract_audio('dm.MOV','dm-new.flac')
Run Code Online (Sandbox Code Playgroud)

编译后我没有错误。通过这样做,我应该得到一个名为“dm-new.flac”的新文件。但是我编译脚本后没有创建这样的flac文件。我认为语法或变量“命令”中的某些内容有问题,我不知道要解决此问题。我的问题是如何在基于此代码的 python 函数中使用 ffmpeg?

顺便说一句,我知道我可以只使用 ffmpeg 而无需编写函数。但我真的需要写在一个函数中。谢谢

python audio ffmpeg

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

在Python列表中的每个列表的新行中打印列表

我在清单中有一个看起来像这样的清单

[['a', 9] , ['b', 1] , ['c', 4] , . . ., ['z', 2]]
Run Code Online (Sandbox Code Playgroud)

从这里开始,我要逐行打印出列表中的每个列表,如下所示

['a',9]
['b',1]
. 
. 
['z',2]
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用循环将其打印出来,如下所示:

for i in list:
   print(i)
Run Code Online (Sandbox Code Playgroud)

但是我的问题是,不使用循环就可以做到吗?就像只打印一行而不与循环交互的一行。(我打算与某些警报功能一起使用,因此我希望它位于包含所有列表的大消息中,而不是包含每个列表的多条消息中)

我已经试过了:

print(list, sep='\n')
Run Code Online (Sandbox Code Playgroud)

但不会将每个列表分成一行。我也试过这个:

print('\n'.join(list))
Run Code Online (Sandbox Code Playgroud)

并发生此错误:

TypeError: sequence item 0: expected str instance, list found
Run Code Online (Sandbox Code Playgroud)

这似乎不适用于列表中的列表。任何的想法?

python list

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