Wie kann ich Adobe Connect-Videos im MP4-Format herunterladen oder das Anhören beschleunigen?
Ideen:
Hacken Sie meinen Computer irgendwie, um die Videowiedergabe zu beschleunigen, indem Sie die Zeit in der CPU beschleunigen oder so etwas für diese Chrome Flash Player-Anwendung. Ich denke, das ist zumindest für das Video möglich, und was den Ton angeht, hoffe ich, dass sich dadurch die Tonhöhe nicht ändert. Mein Betriebssystem ist eine Debian-basierte Version von Linux.
Ich könnte das Ganze auf dem Bildschirm aufzeichnen, aber das wäre trotzdem mühsam, da ich dafür einen dedizierten Computer benötigen würde und nicht gleichzeitig etwas anderes tun könnte.
Laden Sie die Videos herunter, indem Sie den vorhandenen
/output/filename.zip?download=zip
Hack verwenden, der dies an die URL anhängt. Dies führt jedoch zu einer Zip-Datei mit 17 (oder mehr) lästigen.flv
Dateien,.xml
die Audio und Video getrennt enthalten. Ich habe nach einem Tool gesucht, um diese wieder in das normale Video umzuwandeln, und habe nichts Nützliches gefunden. Ich habe festgestellt, dass diese lästigen und lästigen Dateien dieselben sind wie die, die bereits für die Wiedergabe in den Cache des Browsers heruntergeladen wurden.Bitten Sie jeden Professor, den MP4-Download freizugeben, z. B. indem er die Möglichkeit zur Verwendung
/output/filename.mp4?download=mp4
mitdownload=mp4
anstelle einer harschen ZIP-Datei ermöglicht. Ich befürchte jedoch, dass sie dafür in ihren Administratoreinstellungen den öffentlichen Zugriff auf ihr Video für jedermann zulassen müssten. Daher bin ich mir nicht sicher, ob dies für sie eine Option ist.
Antwort1
Angenommen, die Adobe Connect-ID lautet p6vwxp2d0c2f, d. h. die URL lautethttps://my.adobeconnect.com/p6vwxp2d0c2f. Wie Sie in der Frage erwähnt haben, können Sie /output/p6vwxp2d0c2f.zip?download=zip
am Ende der URL hinzufügen, dass ein Zip-Archiv mit einer Reihe von Audio- und Videodateien sowie einigen XML-Dateien heruntergeladen werden soll. Beispiel:https://my.adobeconnect.com/p6vwxp2d0c2e/output/p6vwxp2d0c2e.zip?download=zipkönnte enthalten:
Directory of C:\Users\[...]\p6vwxp2d0c2f
02/09/2019 11:27 AM <DIR> .
02/09/2019 11:27 AM <DIR> ..
02/09/2019 11:00 AM 52,239,473 cameraVoip_1_11.flv
02/09/2019 11:00 AM 1,364,573 cameraVoip_1_11.xml
02/09/2019 11:00 AM 7,176,904 cameraVoip_1_15.flv
02/09/2019 11:00 AM 188,012 cameraVoip_1_15.xml
02/09/2019 11:00 AM 6,004 cameraVoip_1_3.flv
02/09/2019 11:00 AM 1,698 cameraVoip_1_3.xml
02/09/2019 11:00 AM 62,603,505 cameraVoip_1_7.flv
02/09/2019 11:00 AM 1,625,383 cameraVoip_1_7.xml
02/09/2019 11:00 AM 2,249 ftcontent1.flv
02/09/2019 11:00 AM 8,219 ftcontent1.xml
02/09/2019 11:00 AM 25,685 ftcontent13.flv
02/09/2019 11:00 AM 85,464 ftcontent13.xml
02/09/2019 11:00 AM 199,781 ftcontent5.flv
02/09/2019 11:00 AM 657,091 ftcontent5.xml
02/09/2019 11:00 AM 182,297 ftcontent9.flv
02/09/2019 11:00 AM 601,758 ftcontent9.xml
02/09/2019 11:00 AM 1,354 fttitle0.flv
02/09/2019 11:00 AM 3,272 fttitle0.xml
02/09/2019 11:00 AM 1,354 fttitle12.flv
02/09/2019 11:00 AM 3,298 fttitle12.xml
02/09/2019 11:00 AM 1,354 fttitle4.flv
02/09/2019 11:00 AM 3,290 fttitle4.xml
02/09/2019 11:00 AM 1,354 fttitle8.flv
02/09/2019 11:00 AM 3,298 fttitle8.xml
02/09/2019 11:00 AM 1,815,158 indexstream.flv
02/09/2019 11:00 AM 7,703,603 indexstream.xml
02/09/2019 11:00 AM 5,316,597 mainstream.flv
02/09/2019 11:00 AM 21,259,001 mainstream.xml
02/09/2019 11:00 AM 217,448,561 screenshare_2_10.flv
02/09/2019 11:01 AM 1,364,572 screenshare_2_10.xml
02/09/2019 11:01 AM 32,364,457 screenshare_2_14.flv
02/09/2019 11:01 AM 188,011 screenshare_2_14.xml
02/09/2019 11:01 AM 387,981 screenshare_2_2.flv
02/09/2019 11:01 AM 1,698 screenshare_2_2.xml
02/09/2019 11:01 AM 237,470,572 screenshare_2_6.flv
02/09/2019 11:01 AM 1,625,385 screenshare_2_6.xml
02/09/2019 11:01 AM 48 telephony-files.xml
02/09/2019 11:01 AM 691 transcriptstream.flv
02/09/2019 11:01 AM 2,391 transcriptstream.xml
39 File(s) 653,935,396 bytes
2 Dir(s) 1,590,358,016 bytes free
- KameraVoip__.xml enthält Audio + Webcam, falls vorhanden.
- Bildschirm teilen__.xml enthält Audio + Webcam, falls vorhanden.
Um sie zusammenzuführen, können Sie Folgendes verwenden ffmpeg
(ich habe die ffmpeg
Befehle von Oliver Wang / Yannick Hold-Geoffroy / Aaron Hertzmann übernommen):
ffmpeg -i cameraVoip_1_11.flv -i screenshare_2_10.flv -c copy -map 0:a:0 -map 1:v:0 -shortest output.flv
Wo:
-map 0:a:0
: Ordnen Sie die erste Eingabedatei zu, die nur für das Audio verwendet werden soll.-map 1:v:0
: Ordnen Sie die zweite Eingabedatei zu, die nur für das Video verwendet werden soll.-shortest
: Schneiden Sie Audio oder Video, falls cameraVoip_1_11.flv und screenshare_2_10.flv nicht dieselbe Länge haben.
Wenn Sie das Webcam-Video behalten und in einer Ecke der Videobildschirmfreigabe platzieren möchten:
ffmpeg -i cameraVoip_1_11.flv -i screenshare_2_10.flv \
-filter_complex \
"color=s=1072x480:c=black [base]; [0:v] setpts=PTS-STARTPTS, scale=640x480 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=432x240 [upperright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=640" \
-c:v libx264 -c:a mp2 output.mkv
Bezüglich der Zuordnung der KameraVoip__.xml zum richtigen Screenshare__.xml, falls mehrere vorhanden sind:
Man könnte in die Kamera schauenVoip__.xml / Bildschirmfreigabe__.xml, um die Zeitstempel zu erhalten, wann das Audio-/Bildschirmfreigabevideo begann. Dies ermöglicht die Zuordnung der Bildschirmfreigabe__.xml mit der richtigen KameraVoip__.xml.
Beispielsweise inhttps://my.adobeconnect.com/p6vwxp2d0c2f/output/p6vwxp2d0c2f.zip?download=zip, aus cameraVoip_1_11.xml, Zeile 21:
<String><![CDATA[Thu Feb 07 21:11:23 2019]]></String>
Andernfalls könnte eine andere Möglichkeit darin bestehen, KameraVoip_ zu sortieren_.xml / Bildschirmfreigabe__.xml, dann ordnen Sie die erste Kamera Voip_ zu_.xml mit dem ersten Screenshare__.xml, die zweite KameraVoip__.xml mit dem ersten Screenshare__.xml usw. Ich weiß nicht, ob es in manchen Fällen nicht funktioniert (bei den paar Adobe Connect-Aufzeichnungen, die ich mir angesehen habe, scheint es in Ordnung zu sein, aber das liegt vielleicht daran, dass die Leute immer Bildschirme gemeinsam nutzen).
Ich habe ein Python-Skript geschrieben, um den Prozess zu automatisieren (Code-Repository:https://github.com/Franck-Dernoncourt/adobe-connect-video-downloader):
'''
Requirements:
- python 2.7 or 3
- wget, unzip, and ffmpeg accessible from command line.
Examples:
python connect2vid_v2.py https://my.adobeconnect.com/pqc06mcawjgn/ --output_filename=" Understanding how the Network impacts your service"
Please email Franck Dernoncourt <[email protected]> if you improve this code.
'''
import shlex
import subprocess
import os
import glob
import argparse
import sys
import re
def run_command(command):
print('running command: {0}'.format(command))
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
while True:
output = process.stdout.readline()
print(output.strip())
if output == b'' and process.poll() is not None:
print('Done running the command.')
break
if output:
print(output.strip())
rc = process.poll()
return rc
def create_folder_if_not_exists(directory):
'''
Create the folder if it doesn't exist already.
'''
if not os.path.exists(directory):
os.makedirs(directory)
def extract_connect_id(parser, args):
'''
Function written by Aaron Hertzmann
'''
# ----- extract the connectID or ZIP file -----
if len(args.URLorIDorZIP) < 1:
# print('Error: No Connect recording URL provided.')
parser.print_help()
sys.exit(0)
if args.URLorIDorZIP[0][-4:].lower() == '.zip':
sourceZIP = args.URLorIDorZIP[0]
connectID = os.path.basename(sourceZIP[:-4])
elif len(args.URLorIDorZIP[0]) == 12:
connectID = args.URLorIDorZIP[0]
else:
s = args.URLorIDorZIP[0].split('/')
connectID = None
for i in range(len(s)-1):
if 'adobeconnect.com' in s[i]:
connectID = s[i+1]
break
if connectID == None:
print("Error: couldn't parse URL")
sys.exit(1)
return connectID
def main():
'''
This is the main function
'''
# ================ parse the arguments (part of the parsing code was written by Aaron Hertzmann) ======================
parser = argparse.ArgumentParser(description='Download an Adobe Connect recording and convert to a video file.')
parser.add_argument('URLorIDorZIP', nargs='*', help='URL, code, or ZIP file for the Connect recording')
parser.add_argument('--output_folder',default='output_videos',help='Folder for output files')
parser.add_argument('--output_filename',default='noname', help='output_filename')
args = parser.parse_args()
#main_output_folder = "all_videos"
main_output_folder = args.output_folder
output_filename = args.output_filename
output_filename = re.sub(r'[^\w\s]','', output_filename)
output_filename = output_filename.replace('@', '').strip()
print('output_filename: {0}'.format(output_filename))
connect_id = 'pul1pgdvpr87'
connect_id = 'p6vwxp2d0c2f'
connect_id = extract_connect_id(parser, args)
video_filename = 'hello'
video_filename = output_filename
# ================ Download video ======================
output_folder = connect_id
output_zip_filename = '{0}.zip'.format(connect_id)
create_folder_if_not_exists(output_folder)
create_folder_if_not_exists(main_output_folder)
# Step 1: retrieve audio and video files
connect_zip_url = 'https://my.adobeconnect.com/{0}/output/{0}.zip?download=zip'.format(connect_id)
wget_command = 'wget -nc -O {1} {0}'.format(connect_zip_url, output_zip_filename) # -nc, --no-clobber: skip downloads that would download to existing files.
run_command(wget_command)
unzip_command = 'unzip -n {0} -d {1}'.format(output_zip_filename, output_folder) # -n: Unzip only newer files.
run_command(unzip_command)
# Step 2: create final video output
cameraVoip_filepaths = []
for filepaths in sorted(glob.glob(os.path.join(output_folder, 'cameraVoip_*.flv'))):
cameraVoip_filepaths.append(filepaths)
print('cameraVoip_filepaths: {0}'.format(cameraVoip_filepaths))
screenshare_filepaths = []
for filepaths in sorted(glob.glob(os.path.join(output_folder, 'screenshare_*.flv'))):
screenshare_filepaths.append(filepaths)
part = 0
output_filepaths = []
for cameraVoip_filepath, screenshare_filepath in zip(cameraVoip_filepaths, screenshare_filepaths):
output_filepath = os.path.join(main_output_folder, '{0}_{1:04d}.flv'.format(video_filename, part))
#output_filepath = '{0}_{1:04d}.flv'.format(video_filename, part)
output_filepaths.append(output_filepath)
# ffmpeg command from Oliver Wang / Yannick Hold-Geoffroy / Aaron Hertzmann
conversion_command = 'ffmpeg -i "%s" -i "%s" -c copy -map 0:a:0 -map 1:v:0 -shortest -y "%s"'%(cameraVoip_filepath, screenshare_filepath, output_filepath)
# -y: override output file if exists
run_command(conversion_command)
part += 1
# Concatenate all videos into one single video
# https://stackoverflow.com/questions/7333232/how-to-concatenate-two-mp4-files-using-ffmpeg
video_list_filename = 'video_list.txt'
video_list_file = open(video_list_filename, 'w')
for output_filepath in output_filepaths:
video_list_file.write("file '{0}'\n".format(output_filepath))
video_list_file.close()
final_output_filepath = '{0}.flv'.format(video_filename)
# ffmpeg command from Oliver Wang / Yannick Hold-Geoffroy / Aaron Hertzmann
conversion_command = 'ffmpeg -safe 0 -y -f concat -i "{1}" -c copy "{0}"'.format(final_output_filepath, video_list_filename)
run_command(conversion_command)
#os.remove(video_list_filename)
if __name__ == "__main__":
main()
#cProfile.run('main()') # if you want to do some profiling