Posts Tagged ‘MP4’

Freitag, 2. April 2021

Videos auf WhatsApp hochladbar machen

Soeben wollte ich einen Playback-Mitschnitt meiner Wyze-Kamera über WhatsApp teilen, doch auf dem iPhone erhalte ich beim Versand die Meldung:

This video could not be sent. Please choose a different video.

Unter macOS war der Versand möglich, das Video wird aber nicht abspielbar angezeigt, sondern nur als Attachment zum Download angeboten (als wäre es irgendein Binärformat).

Die Lösung:

$ ffmpeg -i "2021-04-01 23-25.mp4" -c:v libx264 -profile:v baseline -level 3.0 -pix_fmt yuv420p "2021-04-01 23-25.whatsapp.mp4"

Quelle: ffmpeg – whatsapp: video format not supported

Wie unterscheiden sich die beiden Videoformate?

$ ffmpeg -i "2021-04-01 23-25.mp4"
...
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2021-04-01 23-25.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isom
  Duration: 00:01:39.40, start: 0.000000, bitrate: 841 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 1143 kb/s, 15 fps, 15 tbr, 90k tbn, 20 tbc (default)
    Metadata:
      encoder         : JVT/AVC Coding
    Stream #0:1(und): Audio: pcm_alaw (alaw / 0x77616C61), 8000 Hz, mono, s16, 64 kb/s (default)

sowie der WhatsApp-kompatible Clip:

$ ffmpeg -i "2021-04-01 23-25.whatsapp.mp4" 
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2021-04-01 23-25.whatsapp.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:01:39.53, start: 0.000000, bitrate: 1628 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080, 2344 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 8000 Hz, mono, fltp, 36 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

Tags: , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 23. Juli 2017

iPhone-Videos auf der Kommandozeile für den E-Mail-Versand eindampfen

Heute musste ich unseren Vermieter wie jeden Sommer in der Starkregensaison mahnen, doch bitte den Dachkännel unseres Hauses zu reinigen.

Um dem Hausverwalter aufzuzeigen, wie prekär die Situation ist, habe ich wie letztes Jahr ein Video beigelegt, das den aus dem Kännel überlaufenden Wasserfall zeigt.

Damit das 14 MB grosse iPhone-Video im .m4v-Format per E-Mail versendet werden kann, musste ich es aber zuerst eindampfen (und mein Gefluche auf der Audiospur entfernen). Das macht man mit ffmpeg auf der Kommandozeile folgendermassen:

$ ffmpeg -i IMG_5193.m4v -an -b:v 2000k IMG_5193.NOAUDIO.mp4
  • Das Argument -an weist ffmpeg an, die Audiospur zu entfernen.
  • Mit dem Argument -b:v 2000k schraube ich die Bitrate des Videos auf 2000 KB/s herunter (mein iPhone 5s hat gemäss VLC ein Video mit einer Bitrate von 10000 KB/s produziert).

Das neun Sekunden dauernde Video wog im E-Mail dann nur noch 2.6 MB und liegt nun bereits auf dem Mailserver unserer Hausverwaltung.

Tags: , , , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Sonntag, 22. Februar 2015

ogv mit ffmpeg zu mp4 konvertieren

Das geht bei mir unter Mac OS X mit MacPorts und ffmpeg in der Version 2.5.3 folgendermassen:

$ ffmpeg -i "Selectric.ogv" -acodec aac -strict -2 -aq 80 -vcodec libx264 -preset slow -crf 25 -threads 0 "Selectric.mp4"

Via: ffmpeg unkown libfaac ubuntu 14.04

Obwohl ffmpeg folgende Fehlermeldungen ausspuckt, kann ich das Video anschliessend schauen:

[ogg @ 0x7f9884026c00] Broken file, keyframe not correctly marked.

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 15. Dezember 2014

Wieder einmal: Wie ich Video-Streams von News-Sendungen herunterlade

Mittels eines Cron-Scripts lade ich jede Stunde alle YouTube-Links in meinen Remember The Milk-Taskliste auf mein NAS, damit ich diese dann zu Hause mit Air Video auf meinen Apple TV (und somit 55″ Plasma) streamen kann.

Manchmal komme ich aber auch an News-Beiträgen von Fernsehanstalten vorbei, welche nicht auf YouTube angeboten werden und mit youtube-dl nicht heruntergeladen werden können.

Um dieser Videos trotzdem habhaft zu werden ist (leider) noch einiges an Handarbeit nötig. In der Regel streamen Fernsehanstalten solche Inhalte als f4f („F4F is Adobe’s fragmented MP4 or FLV file format for HTTP Dynamic Streaming“).

Als Beispiel nehmen wir ABC’s David Muir Exclusive Backstage Interview With Apple CEO Tim Cook.

Nachdem man die Web-Site im Browser der Wahl geöffnet hat, startet man die Web Developer-Konsole, schaltet auf die Ansicht der HTTP-Requests und startet anschliessend das Video. Im Chaos der aufgerufenen Assets suchen wir das sogenannte f4m-Manifest — eine XML-Datei, die dem Videoplayer sagt, wo er die Fragmente des Video-Streams findet.

Obwowhl ich Firefox längst totgeschrieben habe — ich habe die Erfahrung gemacht, dass dieser Browser die Netzwerkrequests am intuitivsten aufbereitet, um am schnellsten zum Ziel zu kommen. Nicht zuletzt, weil es eine Spalte mit dem Typ des Requests gibt, die es äusserst einfach macht, nach dem Typ f4m Ausschau zu halten.

Hier die Datei für obiges Video vom September 2014:

/tmp/temp_textmate.DgGpNM:2: warning: variable $KCODE is no longer effective; ignored
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0" xmlns:akamai="uri:akamai.com/f4m/1.0">
  <akamai:version>2.0</akamai:version>
  <akamai:bw>5000</akamai:bw>
  <id>/abcnews/2014/09/140909_wn_muir7_1837_,500,700,900,1200,1600,2000,2500,.mp4.csmil_0</id>
  <streamType>recorded</streamType>
  <akamai:streamType>vod</akamai:streamType>
  <duration>200.968</duration>
  <streamBaseTime>0.000</streamBaseTime>
  <bootstrapInfo profile="named" id="bootstrap_0">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAADEQgAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAACEBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAACEAAAAAAALuAAAAIwgAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_1">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAADEQgAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAACEBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAACEAAAAAAALuAAAAIwgAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_2">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAADEQgAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAACEBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAACEAAAAAAALuAAAAIwgAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_3">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAADEQgAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAACEBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAACEAAAAAAALuAAAAIwgAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_4">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAADEQgAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAACEBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAACEAAAAAAALuAAAAIwgAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_5">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAADEQgAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAACEBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAACEAAAAAAALuAAAAIwgAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <bootstrapInfo profile="named" id="bootstrap_6">AAAAi2Fic3QAAAAAAAAAAQAAAAPoAAAAAAADEQgAAAAAAAAAAAAAAAAAAQAAABlhc3J0AAAAAAAAAAABAAAAAQAAACEBAAAARmFmcnQAAAAAAAAD6AAAAAADAAAAAQAAAAAAAAAAAAAXcAAAACEAAAAAAALuAAAAIwgAAAAAAAAAAAAAAAAAAAAAAA==</bootstrapInfo>
  <media bitrate="495" url="0_a3ed2f8d8e5b9694_" bootstrapInfoId="bootstrap_0">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAaR752yLQ5QAFd2lkdGgAQIAAAAAAAAAABmhlaWdodABAcgAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAeSO4tL3p2AAJZnJhbWVyYXRlAEA99wg+h62+AAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQFdnYcJYreUAD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBZ8IggAAAAAAACQ==</metadata>
  </media>
  <media bitrate="694" url="1_a3ed2f8d8e5b9694_" bootstrapInfoId="bootstrap_1">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAaR752yLQ5QAFd2lkdGgAQIQAAAAAAAAABmhlaWdodABAdoAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAgs/By82odgAJZnJhbWVyYXRlAEA99wg+h62+AAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQFdnYcJYreUAD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBcKoP4AAAAAAACQ==</metadata>
  </media>
  <media bitrate="894" url="2_a3ed2f8d8e5b9694_" bootstrapInfoId="bootstrap_2">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAaR752yLQ5QAFd2lkdGgAQIQAAAAAAAAABmhlaWdodABAdoAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAiQ24xGUM/gAJZnJhbWVyYXRlAEA99wg+h62+AAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQFdnYcJYreUAD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBdXMc8AAAAAAACQ==</metadata>
  </media>
  <media bitrate="1194" url="3_a3ed2f8d8e5b9694_" bootstrapInfoId="bootstrap_3">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAaR752yLQ5QAFd2lkdGgAQIQAAAAAAAAABmhlaWdodABAdoAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAkTU4pmS0SwAJZnJhbWVyYXRlAEA99wg+h62+AAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQFdnYcJYreUAD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBfKCEIAAAAAAACQ==</metadata>
  </media>
  <media bitrate="1593" url="4_a3ed2f8d8e5b9694_" bootstrapInfoId="bootstrap_4">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAaR752yLQ5QAFd2lkdGgAQIQAAAAAAAAABmhlaWdodABAdoAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAl3KVnpj2SgAJZnJhbWVyYXRlAEA99wg+h62+AAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQFdnYcJYreUAD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBgxjZEAAAAAAACQ==</metadata>
  </media>
  <media bitrate="1993" url="5_a3ed2f8d8e5b9694_" bootstrapInfoId="bootstrap_5">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAaR752yLQ5QAFd2lkdGgAQJAAAAAAAAAABmhlaWdodABAggAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAnbA4DHkwAgAJZnJhbWVyYXRlAEA99wg+h62+AAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQFdnYcJYreUAD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBh+GlUAAAAAAACQ==</metadata>
  </media>
  <media bitrate="2491" url="6_a3ed2f8d8e5b9694_" bootstrapInfoId="bootstrap_6">
    <metadata>AgAKb25NZXRhRGF0YQgAAAAMAAhkdXJhdGlvbgBAaR752yLQ5QAFd2lkdGgAQJQAAAAAAAAABmhlaWdodABAhoAAAAAAAAANdmlkZW9kYXRhcmF0ZQBAor16mqIiOAAJZnJhbWVyYXRlAEA99wg+h62+AAx2aWRlb2NvZGVjaWQAQBwAAAAAAAAADWF1ZGlvZGF0YXJhdGUAQFdnYcJYreUAD2F1ZGlvc2FtcGxlcmF0ZQBA5YiAAAAAAAAPYXVkaW9zYW1wbGVzaXplAEAwAAAAAAAAAAZzdGVyZW8BAQAMYXVkaW9jb2RlY2lkAEAkAAAAAAAAAAhmaWxlc2l6ZQBBjdrgaAAAAAAACQ==</metadata>
  </media>
</manifest>

Hat man die URL dieses Manifests ergattert (in diesem Fall ist es abcvod.abcnews.com/z/abcnews/2014/09/140909_wn_muir7_1837_,500,700,900,1200,1600,2000,2500,.mp4.csmil/manifest.f4m?g=SFHWHPOOGNQB&hdcore=3.5.0&plugin=aasp-3.5.0.151.81), verwendet man AdobeHDS.php, um die Stream-Fragmente automatisiert auf den lokalen Rechner herunterzuladen und danach zu einer MP4 oder FLV-Datei zusammenzuschustern:

$ php AdobeHDS.php --manifest "http://abcvod.abcnews.com/z/abcnews/2014/09/140909_wn_muir7_1837_,500,700,900,1200,1600,2000,2500,.mp4.csmil/manifest.f4m?g=SFHWHPOOGNQB&hdcore=3.5.0&plugin=aasp-3.5.0.151.81"

Tags: , , , , , , , ,
Labels: Web

1 Kommentar | neuen Kommentar verfassen

Mittwoch, 5. März 2014

f4f-Streams lokal sichern

Das von College Humor produzierte Video What If Google Was a Guy ist der Hammer – doch wie kriegt man eine Sicherungskopie auf die lokale Festplatte?

Besucht man die Web-Seite mit einem Browser unter Windows- oder Mac OS X, wird ein Flash-Player geladen, welcher den Video-Clip im f4f-Format streamt. Dabei handelt es sich um eine Adobe-Erfindung „HTTP Dynamic Streaming“, welche man (meines Wissens) derzeit nicht rippen kann.

Zum Glück realisierte ich aber schnell, dass das Video auch auf meinem iPad problemlos angeschaut werden kann. Ist dies der Fall, kann das Video im MP4- respektive im H.264-Standard angeschaut werden – und somit ist das Video als Datei abgreifbar.

Ich installierte deshalb Charles Proxy auf meinem Mac, startete die Software und fügte auf meinem iPad den Proxy-Server mit der internen IP-Adresse meines Mac minis hinzu. Dann rief ich in Safari auf dem iPad die Web-Seite erneut auf und begann, das Video abzuspielen. Innert Sekundenbruchteilen zeigte mir Charles Proxy die URL des Videos an:

5ce3c8cb95dc5c1a63efafff9d56c29a_9.mp4

Mit wget lud ich mir dann die Kopie herunter:

$ wget "http://0.media.collegehumor.cvcdn.com/12/65/5ce3c8cb95dc5c1a63efafff9d56c29a_9.mp4"

Tags: , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen