标签: audio-video-sync

使用gstreamer组合音频和视频流

我正在使用gstreamer通过RTP流将mp4(mpeg-4)文件从一个设备传输到另一个设备.基本上我将mp4文件拆分为其音频和视频文件,然后将其全部发送到其他设备进行流式处理.现在,我想将mp4文件保存到另一台设备的磁盘上,但我的问题是我可以单独保存音频和视频文件而无法单独播放.

我很困惑如何结合音频和视频rtp流来形成我的mp4文件并将其保存到其他设备中的文件.

以下是命令行代码:

发件人(服务器)

gst-launch-0.10 -v filesrc location=/home/kuber/Desktop/sample.mp4 \
             ! qtdemux name=d \
             ! queue \
             ! rtpmp4vpay \
             ! udpsink port=5000 \
             d. \
             ! queue \
             ! rtpmp4gpay \
             ! udpsink port=5002
Run Code Online (Sandbox Code Playgroud)

Reciever(客户端)

gst-launch-0.10 udpsrc port=5000 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)243, config=(string)000001b0f3000001b50ee040c0cf0000010000000120008440fa282fa0f0a21f, payload=(int)96, ssrc=(uint)4291479415, clock-base=(uint)4002140493, seqnum-base=(uint)57180" \
             ! rtpmp4vdepay \
             ! ffdec_mpeg4 \
             ! xvimagesink sync=false \
             udpsrc port=5002 caps="application/x-rtp, media=(string)audio, clock-rate=(int)32000, encoding-name=(string)MPEG4-GENERIC, encoding-params=(string)2, streamtype=(string)5, profile-level-id=(string)2, mode=(string)AAC-hbr, config=(string)1290, sizelength=(string)13, indexlength=(string)3, indexdeltalength=(string)3, payload=(int)96, ssrc=(uint)501975200, clock-base=(uint)4248495069, seqnum-base=(uint)37039"\
             ! …
Run Code Online (Sandbox Code Playgroud)

streaming rtp video-streaming gstreamer audio-video-sync

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

iOS AVFoundation音频/视频不同步

问题:

在每次播放期间,音频都在视频后1-2秒.


设置:

资产从媒体流加载AVURLAssets.

为了编写合成,我使用了具有不对称时间尺度的AVMutableCompositions和AVMutableCompositionTracks.音频和视频都流式传输到设备.音频的时间刻度是44100; 视频的时间刻度是600.

使用AVPlayer完成播放.


尝试的解决方案:

  • 使用videoAssetTrack.timeRange[composition insertTimeRange].
  • 运用 CMTimeRangeMake(kCMTimeZero, videoAssetTrack.duration);
  • 运用 CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration);

代码:

+(AVMutableComposition*)overlayAudio:(AVURLAsset*)audioAsset
                          withVideo:(AVURLAsset*)videoAsset
{
    AVMutableComposition* mixComposition = [AVMutableComposition composition];

    AVAssetTrack* audioTrack = [self getTrackFromAsset:audioAsset withMediaType:AVMediaTypeAudio];
    AVAssetTrack* videoTrack = [self getTrackFromAsset:videoAsset withMediaType:AVMediaTypeVideo];
    CMTime duration = videoTrack.timeRange.duration;

    AVMutableCompositionTrack* audioComposition = [self composeTrack:audioTrack withComposition:mixComposition andDuration:duration andMedia:AVMediaTypeAudio];
    AVMutableCompositionTrack* videoComposition = [self composeTrack:videoTrack withComposition:mixComposition andDuration:duration andMedia:AVMediaTypeVideo];
    [self makeAssertionAgainstAudio:audioComposition andVideo:videoComposition];
    return mixComposition;
}

+(AVAssetTrack*)getTrackFromAsset:(AVURLAsset*)asset withMediaType:(NSString*)mediaType
{
    return [[asset tracksWithMediaType:mediaType] objectAtIndex:0];
}

+(AVAssetExportSession*)configureExportSessionWithAsset:(AVMutableComposition*)composition toUrl:(NSURL*)url
{
    AVAssetExportSession* exportSession …
Run Code Online (Sandbox Code Playgroud)

objective-c avfoundation ios avplayer audio-video-sync

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

FFmpeg-非单调递增dts是什么意思?

观察-第一部分

我在其他地方看到了运行以下命令的建议,以查看我的.mp4是否有问题。

ffmpeg -v error  -i ~/Desktop/5_minute_sync_output_15mn.mp4 -f null - 2>error.log
Run Code Online (Sandbox Code Playgroud)

当我运行上面的命令时,在下面显示的行上看到了很多日志。

应用程序向流0中的复用器提供了无效的,非单调递增的dts:15635> = 15635

通过大量的搜索和阅读,我了解到解码时间戳不是按顺序排列的。

观察-第二部分

但是,使用以下命令和一些后期处理检查相同mp4的帧时,我没有看到pkt_dtsframes_info json中的视频或音频流出现故障。

ffprobe -loglevel panic -of json -show_frames ~/Desktop/5_minute_sync_output_15mn.mp4
Run Code Online (Sandbox Code Playgroud)

这使我怀疑我对“ 观察-一部分-我”的初步理解

这2件事无关吗?任何帮助,将不胜感激。

dts ffmpeg audio-video-sync ffprobe

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

如何在 Pytube 中结合音频和视频?

我正在尝试编写一段代码,在 Python 3.6 上使用 Pytube 下载 YouTube 视频。但对于大多数视频,渐进式下载(同一文件中的音频和视频)格式最多只能提供 360p。所以我想把音频和视频文件分开下载然后合并起来。我能够下载音频和视频文件。如何将两个文件合并在一起?

python youtube python-3.x audio-video-sync pytube

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

使用 ffmpeg 进行音视频同步

我有很奇怪的视频文件。它有音频/视频同步问题。视频会很快,音频很好。视频有奇怪的帧率:26.07 fps。

如何使用 ffmpeg 修复视频流。在视频开始时,同步正常,但在视频流结束时,还剩下大约 5 分钟的音频,并且正在黑屏播放。

这是 ffmpeg -i video.avi 的输出

ffmpeg version git-2011-10-15-1d0afec, Copyright (c) 2000-2011 the FFmpeg developers
  built on Oct 15 2011 14:27:57 with gcc 4.4.5
  configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-libxvid
  libavutil    51. 21. 0 / 51. 21. 0
  libavcodec   53. 20. 1 / 53. 20. 1
  libavformat  53. 16. 0 / 53. 16. 0
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 43. 6 …
Run Code Online (Sandbox Code Playgroud)

ffmpeg video-processing audio-video-sync

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

如何使用ffmpeg在python中合并音频和视频文件?

我正在尝试创建一个 python 脚本,将音频和视频文件合并到一个(音频+视频)文件中。

我正在使用 ffmpeg 来实现此目的,但它不起作用,并且出现错误。运行此脚本时,这里是我的脚本。

import os
import subprocess
import time
from datetime import datetime
def merge_all():
    
 global p
 p =subprocess.Popen('ffmpeg -i temp_vid.mp4 -i temp_voice.wav -c:v copy -c:a aac -strict experimental - 
 strftime 1 ' + dt_file_name ,stdin=subprocess.PIPE,creationflags = subprocess.CREATE_NO_WINDOW)
  time.sleep(2)
  print('merging done')
  os.remove('temp_vid.mp4')
  os.remove('temp_voice.wav')
  print('file delete done')>
Run Code Online (Sandbox Code Playgroud)

这是错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\kp\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)

  File "C:\Users\kp\Desktop\test.py", line 179, in change_icon
    merge_all()

  File "C:\Users\kp\Desktop\test.py", line 104, in merge_all …
Run Code Online (Sandbox Code Playgroud)

python subprocess ffmpeg audio-video-sync

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

在linux上加入AVCHD .mts文件

我有一台Lumix相机,像大多数新相机一样,以AVCHD格式录制视频.由于存储卡上使用的文件系统的限制,文件被分段为2或4个GiB段.

当我将文件传输到我的linux计算机进行编辑时,我自然希望将每个视频放在一个文件中,这对linux的文件系统来说完全没问题.那么,我如何无损地加入这些片段,维持/ v-sync?

(使用Avidemux 2.6.8我可以附加这些段,但它会在切割点处导致令人讨厌的扭曲.)

linux video h.264 audio-video-sync

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